LeetCode---Find Minimum in Rotated Sorted Array
来源:互联网 发布:淘宝助理有什么作用 编辑:程序博客网 时间:2024/06/05 06:46
题目大意:给出一个旋转的拍过序的数组,找出其中的最小元素。
算法思想:直接遍历数组,找出最小的元素即可。
代码如下:
class Solution {public: int findMin(vector<int>& nums) { if(nums.size()==0) return 0; vector<int>::iterator pos; int Min=nums[0]; for(pos=nums.begin();pos!=nums.end();++pos){ if(*pos<Min) Min=*pos; } return Min; }};
上述算法效率不高,虽然能通过测试。下面给出优化算法:
1.当数组元素为0或者只有1个或者已经有序则可以直接返回。
2.旋转数组将之前有序的数组分为两部分,一部分元素都比另一部分元素大这里称为大端,则另一部分为小端。
3.采用折半查找的方法,将中间值与先与左端比较。会有3种情况。
1)a[mid]<a[left]时 说明a[mid]在小端,此时需判断若是小端第一个元素则找到,否则更新right.
2) > 时。 a[mid]在大端,此时需判断若是大端最后一个元素则找到,否则更新left.
3) = 时。 将a[mid]分别于右端值比较,过程同左端。(注意当a[mid]=a[left]=a[right]时,此时需打破平衡 是的right--;)
4.返回目标值。代码如下:
class Solution {public: int minNumberInRotateArray(vector<int> rotateArray) { int n=rotateArray.size(); if(n==0) return 0; if(n==1||rotateArray[0]<rotateArray[n-1]) return rotateArray[0]; int right=n-1,left=0,mid; while(left<=right){ mid=(left+right)/2; if(rotateArray[mid]>rotateArray[left])//在大端 { if(rotateArray[mid+1]<rotateArray[mid])//大端最后一个 { ++mid; break; } left=mid+1; } else if(rotateArray[mid]<rotateArray[left])//在小端 { if(rotateArray[mid-1]>rotateArray[mid])//小端第一个 break; right=mid-1; } else //相等的时候比较右边 { if(rotateArray[mid]<rotateArray[right]){ if(rotateArray[mid-1]>rotateArray[mid])//小端第一个 break; right=mid-1; } else if(rotateArray[mid]>rotateArray[right])//在大端 { if(rotateArray[mid+1]<rotateArray[mid])//大端最后一个 { ++mid; break; } left=mid+1; } else { --right; }} } return rotateArray[mid]; }};
0 0
- [LeetCode] Find Minimum in Rotated Sorted Array
- Leetcode: Find Minimum in Rotated Sorted Array
- leetcode :Find Minimum in Rotated Sorted Array
- LeetCode:Find Minimum in Rotated Sorted Array
- 【Leetcode】Find Minimum in Rotated Sorted Array
- LeetCode:Find Minimum in Rotated Sorted Array
- LeetCode: Find Minimum in Rotated Sorted Array
- leetcode: Find Minimum in Rotated Sorted Array
- [LeetCode] Find Minimum in Rotated Sorted Array
- Find Minimum in Rotated Sorted Array -- LeetCode
- Leetcode: Find Minimum in Rotated Sorted Array
- leetcode Find Minimum in Rotated Sorted Array
- leetcode - Find Minimum in Rotated Sorted Array
- LeetCode Find Minimum in Rotated Sorted Array
- Leetcode--Find Minimum in Rotated Sorted Array
- leetcode: Find Minimum in Rotated Sorted Array
- [leetcode] Find Minimum in Rotated Sorted Array
- LeetCode:Find Minimum in Rotated Sorted Array
- Easyui动态加载后台数据的例子
- 错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 程序员,你敢休息一下吗?——真爱生命,远离编程
- 黑马程序员——基础知识-反射机制
- 从C#中的引用类型到String
- LeetCode---Find Minimum in Rotated Sorted Array
- HttpClient及有关jar包详解
- 代码没报错 工程出现错误
- 电视行业再爆猛料:TCL明天将开启巅峰科技大战
- 1036. 跟奥巴马一起编程(15)
- C++通讯录程序
- phpstudy安装过程遇到的错误
- BaseAdapter2.0 -----ViewHolder
- VIM底部显示当前编辑文件绝对路径