解题思路
给一个排序数组和一个数,寻找该数在数组的位置或者插入位置。本题考查的还是二分查找。二分查找返回的结果就是该数在数组中该插入的位置。
代码实现...
分类:
其他好文 时间:
2014-06-11 00:55:14
阅读次数:
205
求两个排序数组的中位数。这个题可以有以下几个思路:
首先可以想到的是将两个数组merge起来,然后返回其中位数。
第二个是,类似merge的思想加上计数,找到(m+n)/2个数或者其前后的数,这个就可以算出中位数。这个方法对于各种情况需要一一考虑到。
第三个,假设A[k/2-1]<B[k/2-1],那么A[k/2-1]之前的数一定在整个有序数列中(m+n)/2之前。
这里我给出后面两种思路的代码。
代码一( 思路三)...
分类:
其他好文 时间:
2014-06-08 03:44:47
阅读次数:
231
我做这道题,是先用二分查找找到该数字,而后再遍历其前后相同的数字,统计次数。这种做法的平均时间复杂度为O(logn),最坏情况下为O(n),剑指offer上给的思路是两次用二分查找分别找到该数字第一次和最后一次出现的位置,这样的时间复杂度平均和最坏都是O(logn),稍好些》
下面贴上我按照自己思路写的代码:...
分类:
其他好文 时间:
2014-06-07 01:19:45
阅读次数:
197
前面讨论了几种排序算法,三种O(n2)时间复杂度的排序算法:插入,选择和冒泡和两种O(nlgn)的算法:快速排序和归并排序。这几种排序数组除了归并排序需要额外的数组开销。其他几个的空间复杂度都是O(1)。通过比较交换元素完成排序.计数排序是利用空间换取时间,增加了两个额外数组的开销,而且计数排序有一...
分类:
其他好文 时间:
2014-05-30 03:29:19
阅读次数:
241
上一篇文章《STL系列》之vector原理及实现,介绍了vector的原理及实现,这篇文章介绍map的原理及实现。STL实现源码下载。STL中map的实现是基于RBTree的,我在实现的时候没有采用RBTree,觉得这东西有点复杂,我的map采用的是排序数组(CSortVector)。map中的Ke...
分类:
其他好文 时间:
2014-05-27 16:53:47
阅读次数:
338
出题:要求将一个有序整数数组转换成最小深度的Binary Search
Tree表示;分析:由于需要是最小深度,所以BST应保持平衡,左右节点数大致相当,并且BST中当前根节点大于所有其左子树中的元素,小于所有其右子树中的元素。对于排序数组而言,中间元素必然作为根节点,然后递归对由中间元素分割的左右...
分类:
其他好文 时间:
2014-05-26 03:49:39
阅读次数:
369
出题:在已经排序的数组中,找出给定数字出现的次数;分析:解法1:由于数组已经排序,所以可以考虑使用二分查找确定给定数字A的第一个出现的位置m和最后一个出现的位置n,最后m-n+1就是A出现的次数;使用二分查找可疑快速确定给定数字,但是如果确定其左右范围则比较麻烦,对编码细节要求较高;解法2:Hash...
分类:
其他好文 时间:
2014-05-26 02:54:22
阅读次数:
1285
题目:统计一个数字k在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,输出4次
方案一:扫描数组,记录第一个出现的k和最后一个k中间有多少个,时间复杂度为O(n)
方案二:由于数组是有序的,那么我们可以利用二分的思想,求出k在数组中的第一个位置和最后位置相减即可。时间复杂度为O(logN)
注意严格按照良好的C++编码风格
#include...
分类:
其他好文 时间:
2014-05-24 21:09:24
阅读次数:
194
Find 2 numbers with given sum in sorted array.
分类:
其他好文 时间:
2014-05-22 01:53:17
阅读次数:
288
问题:3,1,4,1,5,9,6,5 通过归并排序对它进行从小到大的排序
要进行多少次数组元素之间的比较?[3] 1 4 1 5 9 6 5第一次排序结果:[1 3] 4 1 5 9 6 5;
//新加入的3和1比较,比较次数1次第二次排序结果:[1 3 4] 1 5 9 6 5; //新加入的4和...
分类:
其他好文 时间:
2014-05-21 22:19:55
阅读次数:
208