介绍了 JDK7 中引入的新的排序算法 TimSort,它来自 Python 中 list 的排序算法。将归并排序(merge sort) 与插入排序(insertion sort) 结合,并进行了一些优化。对于已经部分排序的数组,时间复杂度远低于 O(n log(n)),最好可达 O(n),对于随机排序的数组,时间复杂度为 O(nlog(n)),平均时间复杂度 O(nlog(n))。...
分类:
其他好文 时间:
2014-06-19 12:33:58
阅读次数:
575
旋转数组中的查找。[1, 2, 3, 4, 5, 6]的一个旋转数组为[4, 5, 6, 1, 2, 3]。在旋转数组中寻找一个数。
最直接的方法,一次遍历,时间复杂度O(n)。但是既然是一个部分有序的数组,那么对于有序的部分我们可以想方法用二分查找。这个效率可以提高。
代码:
.......
分类:
其他好文 时间:
2014-06-15 17:33:21
阅读次数:
195
题目
Given a sorted array of integers, find the starting and ending position of a given target value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target i...
分类:
其他好文 时间:
2014-06-15 16:53:32
阅读次数:
177
题目
Given a sorted array of integers, find the starting and ending position of a given target value.
解题思路:
查找一个数出现的范围,给一个排好序的数组和一个数,找出这个数在数组中出现的范围。
这个题直接使用一次遍历就可以得到结果,这样的时间复杂度为O(n)。但是对于有序数组我们一般可以使用二分查找可以得到更好的O(logn)的时间复杂度。我们可以使用二分查找找到这个数第一次出现的位置和这个数最后一次出现的位...
分类:
其他好文 时间:
2014-06-15 16:19:16
阅读次数:
237
写了好久,终于写成了.第一次zai leecode错题,题目质量很高,适合面试,与 1.归并排序是稳定的,在java中 Arrays.sort(a);中对于对象的排序就是归并排序。对于原子类型数据使用的是快排。 2.算法复杂度,我们都知道归并排序的最好最坏最差复杂度为nlogn,空间复杂度为n,在链...
分类:
编程语言 时间:
2014-06-15 00:02:45
阅读次数:
402
Java二分法查找的源代码: 二分查找是一种高效率线性表的查找算法。在查找时必须将线性表中的关键词排好序。基本思路是:先断定线性表的中心方位 mid=(first+last)/2;对比所要查找的关键词 key与中心方位的关键词的巨细,假如比key和mid.key持平则回来; key比mid.key大...
分类:
编程语言 时间:
2014-06-14 22:24:17
阅读次数:
343
Java二分法查找的源代码:二分查找是一种高效率线性表的查找算法。在查找时必须将线性表中的关键词排好序。基本思路是:先断定线性表的中心方位mid=(first+last)/2;对比所要查找的关键词key与中心方位的关键词的巨细,假如比key和mid.key持平则回来;key比mid.key大(假定为升..
分类:
编程语言 时间:
2014-06-13 21:05:10
阅读次数:
436
是什么一种scheme,用表来做信息存取,代替逻辑语句(if/else)为什么简化逻辑语句,避免大量嵌套的 if/else 或者
switch/case怎么用三种访问表的方式直接访问:将源数据作为key索引访问:构建KV表阶梯访问:分为连续区间,遍历或者二分查找例子// get the
full n...
分类:
其他好文 时间:
2014-06-12 11:54:23
阅读次数:
255
问题:对链表进行排序,要求时间复杂度为NlogN。归并排序。
inline ListNode* getMidle(ListNode *head){
if(NULL == head || NULL == head->next)
return head;
ListNode *pslow = head;
ListNode *pfast = head;
while (pfast->next...
分类:
其他好文 时间:
2014-06-10 17:35:56
阅读次数:
282