基础算法
一、全排列
void prim(List<Character> list, List<Character> res, int r, int x) { if(res.size() == r) { System.out.println(res); return; } for(int i = x; i < list.size(); i++) { List<Character> t = new LinkedList<Character>(list); res.add(t.remove(i)); // 当 x 位置用 0 代替时,组合可重复,否则反之 prim(t, res, r, 0); res.remove(res.size() - 1); } }
二、组合
//从a中取k个 的 组合(标记法) void dfs(int[] a, int[] take, boolean[] f, int num, int k, int x){ if(num == k){ for(int i = 0; i < k; i++) System.out.print((char)(take[i]+'A')); System.out.print("\n"); return; } for(int i = x; i < a.length; i++){ if(!f[i]){ f[i] = true; take[num] = a[i]; dfs(a, take, f, num+1, k, i); //当i位置用0代替时,组合可重复,否则反之 f[i] = false; } } }
三、快速排序
void Qsort(int list[], int left, int right) { if (left >= right) return; int t = list[left]; int i = left, j = right; while (i != j) { while (i < j && list[j] >= t) j--; int temp = list[i]; list[i] = list[j]; list[j] = temp; while (i < j && list[i] <= t) i++; temp = list[i]; list[i] = list[j]; list[j] = temp; } Qsort(list, left, i); Qsort(list, i + 1, right); }
四、最大公约数和最小公倍数
int gcd(int a, int b) { int mod = a % b; while (mod != 0) { a = b; b = mod; mod = a % b; } return b; } // 公倍数 :a*b/gcd(a, b);
五、二分查找
int searchInsert(int[] nums, int target) { int left = 0; int right = nums.length; int mid = right / 2; while (left < right) { if (nums[mid] == target) return mid; if (nums[mid] < target) left = mid + 1; else right = mid; mid = right /2 + left / 2; } return left; }
作 者:月 暮
出 处:https://www.cnblogs.com/AardWolf/
特此声明:欢迎园子的大大们指正错误,共同进步。如有问题或建议,也请各位大佬多多赐教!如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
出 处:https://www.cnblogs.com/AardWolf/
特此声明:欢迎园子的大大们指正错误,共同进步。如有问题或建议,也请各位大佬多多赐教!如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。