基础算法
云养猫v2
这个作者很懒,什么都没留下…
展开
-
B-Tree B树数据结构
public class BTree<Key extends Comparable<Key>, Value> { // max children per B-tree node = M-1 // (must be even and greater than 2) // 每个节点不超过M-1 children,一旦超过则分裂,M为 > 2的偶数 private static final int M = 4; private Node ro原创 2020-10-01 19:28:48 · 123 阅读 · 0 评论 -
乱序 洗牌 打乱顺序 随机
public void shuffle(int[] nums) { int n = nums.length; Random random = new Random(); for (int i = 0; i < n; i++) { int r = i + random.nextInt(n-i); //System.out.println(i + " , " + r); exch(num原创 2020-09-17 20:08:54 · 154 阅读 · 0 评论 -
平方根 立方根 sqrt(int m, int n) 保留n位小数 牛顿迭代法
https://leetcode-cn.com/problems/sqrtx/solution/er-fen-cha-zhao-niu-dun-fa-python-dai-ma-by-liweiw/牛顿迭代法原理利用一级泰勒级数展开式public double mySqrt(int m, int n) { if (m == 0) return 0; double x0 = 1; double pre; while (true) {转载 2020-09-06 15:00:35 · 798 阅读 · 0 评论 -
基数排序
https://www.cs.usfca.edu/~galles/visualization/RadixSort.htmlpublic void radixSort(int[] nums) { int n = nums.length; int maxVal = nums[0]; for (int i = 1; i < n; i++) { if (nums[i] > maxVal) maxVal = nums[i];原创 2020-09-04 16:10:44 · 77 阅读 · 0 评论 -
剑指 Offer 65. 不用加减乘除做加法
https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof/solution/mian-shi-ti-65-bu-yong-jia-jian-cheng-chu-zuo-ji-7/public int add(int a, int b) { while (b != 0) { int c = (a & b) << 1; a = a ^原创 2020-08-08 19:58:53 · 76 阅读 · 0 评论 -
快速幂
public long power(long a,int n){ long weight = 1; while (n != 0) { if ((n & 1) == 1) weight *= a; a = a * a; n = n >> 1; }}原创 2020-04-26 15:47:54 · 81 阅读 · 0 评论 -
找出一个数组中全部符合条件的数,这个数大于它前面的全部数,小于后面的全部数。要求时间空间不能超过O(N)。
https://blog.csdn.net/beiyeqingteng/article/details/7167823?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.chan转载 2020-08-06 21:37:11 · 601 阅读 · 0 评论 -
数组先升序再降序(含重复元素) 用二分法求最大值
一个数组先升序再降序,用最优时间复杂度,求最大值?例如[1,2,2,2,2,3,1]public int getMax(int[] arr) { if (arr.length < 2) return arr[0]; int lo = 0, hi = arr.length - 1; while (lo < hi) { int mid = lo + (hi - lo) / 2; if (arr[mid原创 2020-08-06 20:56:45 · 1823 阅读 · 0 评论 -
0、1背包问题 完全背包
给定 n 件物品,物品的重量为 weight[i],物品的价值为value[i]。现挑选物品放入背包中,假定背包能承受的最大重量为 V,问应该如何选择装入背包中的物品,使得装入背包中物品的总价值最大?https://www.cnblogs.com/kkbill/p/12081172.htmlhttps://labuladong.github.io/ebook/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%B3%BB%E5%88%97/%E8%83%8C%E5%8C%85原创 2020-08-06 10:12:15 · 113 阅读 · 0 评论 -
如何估算一个城市有多少座加油站
根据不同维度明确公式进行推算按面积维度(加油站服务半径)推算:市面积,城市建成区比例,城市加油站的服务半径->服务面积->折算分布密度p加油站数量N = p城市面积城市建成区比例按城市车辆保有数量(类比推算)来推算:城市内有a辆车,每日车辆出行率 b,外来车辆每日流量 c,每座加油站大约可以为k辆车服务加油站数量N = (a * b + c ) / k按车辆油耗维度推算:加油站数量=(各类型车辆保有数量*各类型车辆油耗)/ 加油站日均加油量。..原创 2020-08-05 15:49:43 · 6093 阅读 · 0 评论 -
n以内的素数 204. Count Primes
int countPrimes(int n) { boolean[] isPrime = new boolean[n]; Arrays.fill(isPrime, true); for (int i = 2; i * i < n; i++) { if (isPrime[i]) { for (int j = i * i; j < n; j += i) {原创 2020-08-05 14:24:10 · 84 阅读 · 0 评论 -
skipList 跳表
import java.util.Random;public class IntSkipList { private class Node { public Node[] next; public int value; public Node(int value, int level) { this.value...原创 2020-04-12 11:08:52 · 80 阅读 · 0 评论 -
Arrays.binarySearch()
public int binarySearch(int[] a, int fromIndex, int toIndex, int x) { int lo = fromIndex, hi = toIndex-1; while (lo <= hi) { int mid = lo + (hi - lo) / 2; if (x > a[mid]) lo = mid + 1; else if原创 2020-08-03 09:49:16 · 139 阅读 · 0 评论 -
旋转有序数组最小元素下标 有序数组二分查找第一个>= target的下标
旋转有序数组 无重复元素 找到最小元素的下标private int findMinIndex(int[] nums) { int lo = 0, hi = nums.length-1; while (lo < hi) { int mid = lo + (hi - lo) / 2; if (nums[mid] > nums[hi]) lo = mid + 1; else hi = mid; } return lo;} 有序数组 有重复元素原创 2020-07-24 11:37:27 · 234 阅读 · 0 评论 -
拓扑排序
public int[] findOrder(int numCourses, int[][] prerequisites) { int[][] adjacent = new int[numCourses][numCourses]; int[] indegree = new int[numCourses]; for (int i = 0; i < prerequisites.length; i++) { int from = pr原创 2020-05-12 12:17:32 · 88 阅读 · 0 评论 -
并查集
class QuickUnionUF { private int[] parent; private int[] size; private int count; public QuickUnionUF(int n) { if (n < 0) throw new IllegalArgumentException(); parent = new int[n]; size = new int[n];原创 2020-05-11 21:31:43 · 83 阅读 · 0 评论 -
重复元素 二分查找 lo 小于等于 hi还是lo 小于 hi
// 当数组a中没有重复数字时 用lo < hi// 当数组a中有重复数字时 用lo <= hipublic static int binarySearch(int[] a, int key) { int lo = 0, hi = a.length-1; while (lo <= hi) { int mid = lo...原创 2020-04-08 11:40:43 · 316 阅读 · 0 评论 -
排序与二分查找
public static int binarySearch(int[] a, int key) { int lo = 0, hi = a.length - 1; while (lo <= hi) { int mid = lo + (hi - lo) / 2; if (key < a[mid]) hi = mid - 1; else if ...原创 2019-03-21 14:08:06 · 125 阅读 · 0 评论 -
TopK
// 求前K大的数public class TopK { static List<Integer> res = new ArrayList<Integer>(); //第一种:基于小顶堆 public static void heapSelect(int[] a, int k) { int n = a.length; for (int i = ...原创 2019-03-21 15:55:15 · 327 阅读 · 0 评论 -
二叉树的遍历---递归与非递归--java
public class Main { static List<Integer> res = new ArrayList<Integer>(); public static void preOrderRecusive(TreeNode node) { if (node == null) return; res.add(node.val); preOrd...原创 2019-03-21 13:18:45 · 126 阅读 · 0 评论