面试题8 旋转数组的最小数字
来源:互联网 发布:vs源码加密 编辑:程序博客网 时间:2024/05/01 19:03
/*在面试中信手写出二分查找的循环和递归代码。
在排序的数组中查找一个数字或者某个数字出现的次数,都可以尝试使用二分查找算法。
能够从额外空间消耗、平均时间复杂度和最差时间复杂度比较插入排序、冒泡排序、归并排序、快速排序等不同算法的优劣。
写出快速排序的代码是很多公司的喜好要求。
面试题8
题目:把一个数组最开始的若干元素搬到数组的末尾,我们称之为旋转数组。输入一个数组的旋转,输出数组的最小数字。
应该考虑到:旋转数组是排序数字本身的情况,以及两个指针和中间数字三者相等的情况,只能使用顺序查找。
*/
int Min(int* numbers,int length)
{
if(numbers==NULL||length<=0)
throw new std::exception("Invalid paramters");
int index1=0;
int index2=length-1;
int indexMid=index1;
while(numbers[index1]>=numbers[index2])
{
if(index2-index1==1||index2-index1==0)//两个指针差为1时,第二个指针指向的就是最小的数字。
//当数组中只有一个数字时,原来的代码是直接跳转到顺序查找,我认为这时可以直接跳出循环,因此将原来的if(index2 - index1 == 1) //修改为if(index2-index1==1||index2-index1==0),这样在顺序查找的循环中使用了C++标准的循环方式i!=index2
{
indexMid=index2;
break;
}
indexMid=(index1+index2)/2;
if(numbers[index1]==numbers[indexMid]&&numbers[index1]==numbers[index2])//三个数字相等时,顺序查找最小数字。
return MinInOrder(numbers,index1,index2);
if(numbers[index1]<=numbers[indexMid])
index1=indexMid;
else if(numbers[indexMid]<=numbers[index2])
index2=indexMid;
}
return numbers[indexMid];
}
int MinInOrder(int* numbers,int index1,int index2)//顺序查找算法
{
int result=numbers[index1];
for(int i=index1+1;i!=index2;++i) //原来的代码是 i <= index2,我做了修改更符合C++的习惯
{
if(result>numbers[i])
result=numbers[i];
}
return result;
}
/*测试用例包括:升序的旋转数组,升序的数组,只包含一个数字的数组,NULL指针。
在排序的数组中查找一个数字或者某个数字出现的次数,都可以尝试使用二分查找算法。
能够从额外空间消耗、平均时间复杂度和最差时间复杂度比较插入排序、冒泡排序、归并排序、快速排序等不同算法的优劣。
写出快速排序的代码是很多公司的喜好要求。
面试题8
题目:把一个数组最开始的若干元素搬到数组的末尾,我们称之为旋转数组。输入一个数组的旋转,输出数组的最小数字。
应该考虑到:旋转数组是排序数字本身的情况,以及两个指针和中间数字三者相等的情况,只能使用顺序查找。
*/
int Min(int* numbers,int length)
{
if(numbers==NULL||length<=0)
throw new std::exception("Invalid paramters");
int index1=0;
int index2=length-1;
int indexMid=index1;
while(numbers[index1]>=numbers[index2])
{
if(index2-index1==1||index2-index1==0)//两个指针差为1时,第二个指针指向的就是最小的数字。
//当数组中只有一个数字时,原来的代码是直接跳转到顺序查找,我认为这时可以直接跳出循环,因此将原来的if(index2 - index1 == 1) //修改为if(index2-index1==1||index2-index1==0),这样在顺序查找的循环中使用了C++标准的循环方式i!=index2
{
indexMid=index2;
break;
}
indexMid=(index1+index2)/2;
if(numbers[index1]==numbers[indexMid]&&numbers[index1]==numbers[index2])//三个数字相等时,顺序查找最小数字。
return MinInOrder(numbers,index1,index2);
if(numbers[index1]<=numbers[indexMid])
index1=indexMid;
else if(numbers[indexMid]<=numbers[index2])
index2=indexMid;
}
return numbers[indexMid];
}
int MinInOrder(int* numbers,int index1,int index2)//顺序查找算法
{
int result=numbers[index1];
for(int i=index1+1;i!=index2;++i) //原来的代码是 i <= index2,我做了修改更符合C++的习惯
{
if(result>numbers[i])
result=numbers[i];
}
return result;
}
/*测试用例包括:升序的旋转数组,升序的数组,只包含一个数字的数组,NULL指针。
0 0
- 面试题:旋转数组的最小数字
- 面试题8:旋转数组的最小数字 ***
- 面试题8:旋转数组的最小数字
- 【剑指offer】面试题8:旋转数组的最小数字
- 剑指offer面试题8:旋转数组的最小数字
- 剑指Offer:面试题8 :旋转数组的最小数字
- 面试题8:旋转数组的最小数字
- 《剑指offer》面试题8旋转数组的最小数字
- 面试题8-旋转数组的最小数字
- 面试题8 旋转数组的最小数字
- 面试题8 旋转数组的最小数字
- 《剑指Offer》面试题8:旋转数组的最小数字
- 面试题8 旋转数组的最小数字
- 【剑指offer】 面试题8: 旋转数组的最小数字
- 面试题8:旋转数组的最小数字
- 面试题8:旋转数组的最小数字
- 剑指offer-面试题8:旋转数组的最小数字
- 面试题8:旋转数组的最小数字
- UNIX网络编程(配置unp.h)
- 叠筐(2074)
- 第一天起航
- UVa 1331 Minimax Triangulation
- 自学 iOS 开发的一些经验
- 面试题8 旋转数组的最小数字
- 【Rayeager PX2】andoid开机logo分析及PX上的实现
- JavaScript概念之screen/client/offset/scroll/inner/avail的width/left
- 第2章 14
- 科。学。上。网。
- perl 采集数据写入数据库
- jsp与javaBean的使用
- android耗时任务_HandlerThread
- Android-View事件处理机制