给出一个有序数组,假设其为升序,随机找到一个点,将这个点后面的序列移到数组前面,构成一个新的序列。要求对这个新的数组进行查找,找不到返回-1,否则返回其在数组中的位置。比如输入数组[7,8,9,1,2,3,4,5,6]查找1,返回3;查找8,返回1;查找0,返回-1;int searchDisord...
分类:
编程语言 时间:
2015-06-09 19:22:36
阅读次数:
132
1. 问题描述 有两个有序的整型数组a和b(没有重复元素),他们的长度分别为lenA和lenB,求出他们的共同元素。
例如:a = 0,1,3,5,7,9,11;b = 2,3,4,7,11;
它们的交集为{3,7,11}。2. 方法思路 求交集的方法有很多种,但数组的长度会影响算法的效率。2.1 长度相当时,可采取的算法2.1.1 二路归并 对于数组a,b分别以i,j从头遍历数组...
分类:
编程语言 时间:
2015-06-06 23:35:21
阅读次数:
151
问题:
两个有序数组,合并成一个有序数组,假设第一个数组空间足够容纳两个数组。
分析:
考虑到num1数组很大,可以直接在num1数组上进行合并,但是要讲究效率。
如果单纯从前往后合并,那么效率会非常低,因为a数组后面的数字需要不停的移动。
换一种思路,我们采用从后往前合并,首先计算出总长度,设置一个指针从num1数组最后往前移动。...
分类:
编程语言 时间:
2015-06-04 01:04:46
阅读次数:
115
1. 问题描述 在给定的一个已经排好序的数组中,找出指定数字出现的次数。例如数组[1,2,3,4,4,4,4,6,8,9]中4出现的次数为4次。2. 思路与方法 此问题可以在二分法的基础上进行改进。假设数组a为递增的数列,需要查找的数字为num,可以分别查找num在数组a中出现的起始位置和最后一次的位置,通过二者的差计算出数字num在数组a中出现的次数。
c++代码如下:#include...
分类:
编程语言 时间:
2015-06-03 21:33:11
阅读次数:
188
问题描述在一个无序的数组中,如果对其进行排序,然后扫描一遍有序数组,可以获得相邻两元素的最大差值,比如 {-1, 2, 4, 9},那么最大差值就是4和9之间,是5.
现在如果不对原始数组进行排序,有什么好的方案,来获取有序形式下的最大差值?
Given an unsorted array, find the maximum difference between the successive...
分类:
其他好文 时间:
2015-05-31 16:53:29
阅读次数:
109
策略模式定义了算法族,这些算法被分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。(此定义来源于《深入浅出设计模式》)
下面举一个根据这模式设计并实现有序数组的例子。
算法族是几个排序算法,它们都继承自Sort接口:
package sort;
public interface Sort {
/**
* 这是需要变化的地方。将它独立处理,和不需要变化的...
分类:
其他好文 时间:
2015-05-31 14:05:32
阅读次数:
131
/** * * 二分查找算法 * * * * @param srcArray 有序数组 * * @param target 查找元素 * * @return srcArray数组下标,没找到返回-1 */ public ...
分类:
编程语言 时间:
2015-05-30 19:45:26
阅读次数:
146
题目:一个数组是由一个递增数列右移若干位形成的,比如{4,5,1,2,3}是由{1,2,3,4,5}左移两位形成的,在这种数组中查找某一个数。解题思路如下:
首先获取元素分裂点,时间复杂度为O(log(n))
因为旋转数组是由递增数组右移得到,因此旋转数组中的第一个元素是整个数组的中间元素,比较待查找元素与第一个元素,如果待查找元素大于等于第一个元素,表明待查找元素在前半段有序数组中;如果不是这...
分类:
编程语言 时间:
2015-05-30 10:48:00
阅读次数:
179
二分查找算法是在有序数组中用到的较为频繁的一种算法,同样是一种很高效的算法,我们最长遇到的判断一个数字是不是在数组中,前提是数组是有效的,通常我们会数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{0,1, 2, 3, 4, 5, .....
分类:
编程语言 时间:
2015-05-29 11:23:00
阅读次数:
152
//two_arg.cpp//题目:两个有序数组,求是否有共同元素(假设是两个升序数组)。//要求:时间复杂度:O(n),空间复杂度S(1)。//算法描述:一次遍历,两个指针分别开始分别指向两个数组。循环控制为是否到两个数组的末尾//每次循环比较两个指针指向的元素的大小,将小的指针后移,..
分类:
编程语言 时间:
2015-05-27 01:08:48
阅读次数:
182