
算法
文章平均质量分 55
麻辣掌中宝
这个作者很懒,什么都没留下…
展开
-
有序数组查找
查找目标值位置 static public int bianrySearch(int[] nums, int target) { int left = 0; int right = nums.length - 1; while(left<=right){ int mid=left+(right-left)/2; if(nums[mid]==target){ return mi原创 2020-12-03 22:10:12 · 429 阅读 · 0 评论 -
回溯法
用回溯法解题时常用到两种典型的解空间树:子集树与排列树 子集树 当问题是:从n个元素的集合S中找出满足某种性质的子集时相应的解空间树称为子集树,例如n个物品的0/1背包问题 这类子集树通常有2n个叶结点 解空间树的结点总数为2n+1-1 遍历子集树的算法需Ω(2n)计算时间 void backtrack (int t) { if(t > n){ output(x);// 输出结果 }else{ for (int i = 0; i <= 1; i原创 2020-12-01 11:53:44 · 327 阅读 · 0 评论 -
【数据结构/堆排序】从大批量数据中快速查找前N个最大值
问题:给出一堆大批量数据(比如10亿),如何从中快速查找出前N个最大值? 解决方案:采用最小堆的形式。先取出N个数据生成最小堆,然后再取出后面的值依次与堆顶比较,比堆顶小,则继续;比堆顶大,则交换值,并更新最小堆,直到所有值全部比较完,最后生成的最小堆就是最大的N个数据。 最小堆概念:最小堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于其左子节点和右子节点的值。如下图所...翻译 2018-10-31 19:56:40 · 5573 阅读 · 1 评论