二分搜索法,是通过不断缩小解可能存在的范围,从而求得问题最优解的方法。 1.从有序数组中查找某个值 STL以lower_bound函数的形式实现了二分搜索。类似方法还有upper_bound 2.假定一个解并判断是否可行 注意输出答案的格式 3.最大化最小值 找到最大的d使得最近的两头牛的距离不小于 ...
分类:
其他好文 时间:
2017-02-28 18:07:26
阅读次数:
206
31.如何权衡是使用无序的数组还是有序的数组? 有序数组最大的好处在于查找的时间复杂度是O(log n),而无序数组是O(n)。有序数组的缺点是插入操作的时间复杂度是O(n),因为值大的元素需要往后移动来给新元素腾位置。相反,无序数组的插入时间复杂度是常量O(1)。 34.HashSet和TreeS ...
分类:
编程语言 时间:
2017-02-27 18:59:41
阅读次数:
189
9.1概述 1)树是一种数据存储结构 2)树结合了有序数组和链表的优点,并且避免了有序数组和链表的缺点。 3)树的术语:路径、根、父节点、子节点、叶子节点、层、子树、访问、遍历、关键字 4)树的分类, 5)与树相关的其他知识点 5.1二叉搜索树中的非平衡树、非平衡子树 6)Java编程思路 7)用数 ...
分类:
编程语言 时间:
2017-02-24 22:16:58
阅读次数:
190
今年是大年初四,晚上闲的没事儿干,在手机上随手写了二分查找法,对有序数组或者循环有序数组都挺管用! public int binarySearch(int []nums,int key){ return binarySearch(nums,key,0,nums.length); } public i ...
分类:
其他好文 时间:
2017-01-31 21:43:54
阅读次数:
230
寒假week1 二分查找(二分枚举)1.适用条件:要查找(枚举)的集合有序 && 查找(枚举)的“条件”具有单调性2.什么是“条件”:example: 1.给定一个有序数组,从中查找数字7的下标。条件是:这个数字等于7. 2.给定一个有序数组,从中查找满足函数f(x)<99的数字的下标。条件是:f( ...
分类:
其他好文 时间:
2017-01-25 11:42:58
阅读次数:
165
二分搜索分两类,一类可以直接看出来是二分搜索 另一类很难直接看出来是二分搜索, 最重要的是理解二分搜索的思想, 根据有序集合这个特性,每次通过O(1)的时间复杂度 ,使得搜索的规模减半, 同红黑树查找类似(红黑树也是在增加了空间复杂度的情况下,减少了时间复杂度,每次比较,然后就会使得搜索规模减半) ...
分类:
编程语言 时间:
2017-01-21 19:36:42
阅读次数:
372
我们可以通过二分查找法,在log(n)的时间内找到最小数的在数组中的位置,然后通过偏移来快速定位任意第K个数。 此处假设数组中没有相同的数,原排列顺序是递增排列。 在轮转后的有序数组中查找最小数的算法如下: 接着基于此结果进行偏移,再基于数组长度对偏移后的值取模,就可以找到第K个数在数组中的位置了: ...
分类:
编程语言 时间:
2017-01-14 08:40:26
阅读次数:
176
基本过程 1.将数组递归分解为有序数组(当分解到数组元素个数为1时候,数组自然有序) 2.将两个有序数组合并为一个大的有序数组 3.递归合并完成,即排序完成 javascript实现 ...
分类:
编程语言 时间:
2016-12-11 01:17:51
阅读次数:
180
折半查找法找到一个元素在数组中的下标 * @param arr 数组 * @param key 要查找的元素 * @return 找到则返回元素在数组中的下标,如果没找到,则返回这个元素在有序数组中的位置 * 如:[1,4,6,7,10,11,15],查找8在数组中的位置,如果存在则返1,不存在则返 ...
分类:
编程语言 时间:
2016-12-07 20:47:10
阅读次数:
204
算法:归并排序 写在前面 归并排序算法是基于一个简单的归并操作:合并两个有序数组来形成一个更大的有序数组。 提炼归并的思想,归并排序就是将一个无序数组先划分成两个部分(递归地),对其分别排序,然后再进行合并。 归并排序无论输入情况,时间复杂度为N*LogN,主要的缺点是使用了一个额外的大小为N的空间 ...
分类:
编程语言 时间:
2016-12-04 23:35:42
阅读次数:
267