
算法
文章平均质量分 72
fuckguidao
学习学习学习………………
展开
-
并查集的模板,优化与使用场景
并查集基本使用请参考oi-wiki常规一个不错的封装好的并查集写法class UnionFind{ public int[] fa; public UnionFind(int n){ fa = new int[n]; for(int i=0;i<n;i++)fa[i]=i; } public int find(int x){ if(fa[x]==x)return x; fa[x]=find(x);//路径压缩 return fa[x];原创 2021-02-14 22:35:26 · 414 阅读 · 4 评论 -
leetcode 990 等式方程 (6-8刷题)
方法:并查集。思路:相等的关系可以传递,最终的结果集必然是若干个集合,每个集合里的变量拥有相同的值,即处在同一个连通分量里。而不等关系则是两个变量在不同的连通分量里。所以,先针对相等关系建立并查集,而后判断每个不等关系是否都满足即可。代码:class Solution { // 并查集,这里并查集的根节点与下标相等。 public int[] parent=new int[26]; public int findParent(int t){ while(par原创 2020-06-08 23:16:58 · 163 阅读 · 0 评论 -
leetcode 912. 排序数组——解法汇总,计数排序o(n),快速排序、归并排序、堆排序
题目链接传送门说明代码class Solution { public int[] sortArray(int[] nums) { //排序? //计数排序o(n) // sortTong(nums); //归并 // int[] temp=new int[nums.length]; // ...原创 2020-04-01 00:13:26 · 164 阅读 · 0 评论 -
顺时针打印二维矩阵
问题输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:1 2 3 45 6 7 89 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解决方案代码public static void solution(int[][] a){ ...原创 2020-03-26 20:08:56 · 228 阅读 · 0 评论 -
二分法搜索临界点
二分最基础的二分查找是在有序数组里寻找某个值。如对升序序列a = {0,1,2,3,4,5,6,7,8,9}代码:int find(int *a,int l,int r,int k){ while(l<=r){ int mid=(l+r)>>1; if(a[mid]==k)return mid; if(a[mid]>k)r=mid-1; e...原创 2020-03-18 17:23:30 · 768 阅读 · 0 评论 -
little w and Exchange 解析
little w and Exchange 解析题目链接传送门这是一道思维题,对于输出的n个数,如果这n个数可以任意组合相加成1~m的数,则输出YES。没做出来,看了解析解析就两句话:定义有n张纸币,且存在m,使得这n张纸币可以通过任意组合构成不超过m元的任意值,则n符合用a[n+1]表示第n+1张纸币的值,当a[n+1] <= m+1 时n+1才符合证明:反证法:若a[n...原创 2020-03-17 14:21:44 · 197 阅读 · 0 评论 -
算法设计学习日志---线性时间选择
早就开始学算法了,但一直没有特别用功学,现在我决定了,两天解决一个经典算法问题,并且写成博客,既是自我监督,以后忘了的话也好复习。 今天的内容是线性时间选择,1. 问题描述 2. 思考分析 3. 实现解决 4. 程序清单 5. 总结分析 1. 问题描述 线性时间选择问题的引入需要先通过解决下面的问题来深入。 “给我们一个没有排好序的数组,要求其中第k小的元素的值。”原创 2018-05-07 19:50:49 · 1531 阅读 · 2 评论 -
算法设计学习日志———关于快速排序
今天的内容是快速排序,可以说是为了补上次博客的坑吧问题描述思考分析 实现解决源代码改进与总结 1.问题描述 排序,一直是一种比较热门的算法话题,有人已经证明了经典排序的时间复杂度下限为o(nlogn),越是好的算法越是接进这个时间复杂度的。 对一个长度为n的无序数组,对其进行排序,这就是我们今天要解决的问题 这一次我要写的是——快速排序,它的平...原创 2018-05-11 09:46:36 · 479 阅读 · 0 评论 -
单源最短路径---Dijkstra算法
有这样一道题:在一个图(如图所示)中,一共有四个点:1 2 3 4这四个点之间各有相连,且每条边都有自己的权值。现在小明在点1上,他想要到3去,请问最短路径是多少。很容易得到该图的邻接矩阵。我们建立一个二维数组a。a[i][j],i表示 起点,为行,j表示终点,为列。将相应的权值传入其中,如果从一个 点到另一个点不通,就认为其权值为无限例如(1-》2)为2,则a...原创 2018-01-13 21:38:29 · 28587 阅读 · 4 评论 -
使用“哨兵”减小时间复杂度
今天介绍一个很简单的算法,虽然简单,对于减少运行时间却有挺好 的效果。问题描述:对一个数组,该数组存放的数各都不同,即有唯一性。 对该数组进行查找,返回数据对应为a的序号。 如data[4]=a,就返回一个4。常规的做法是这样的://假设 数组长度为10int check(int a){ for(int i=0;i<10;i++) if(data[i]==a) re原创 2017-12-20 23:13:23 · 828 阅读 · 0 评论 -
多源最短路径——floyd-Warshall算法的拓展
多源最短路径——floyd-Warshall算法的拓展关于多源最短路径算法,我看了一下别人的博客——gooddeep的博客 总之核心代码就是五行。 for(int k=1;k<5;k++) for(int i=1;i<5;i++) for(int j=1;j<5;j++) if(infor[i][j]>infor[i][k]+infor[k原创 2017-10-11 10:30:20 · 462 阅读 · 0 评论