首页 > 代码库 > leetcode -Find Minimum in Rotated Sorted Array II (1)
leetcode -Find Minimum in Rotated Sorted Array II (1)
本人大三狗,大一学物理,大二转专业来了计院。一入计院深似海,从此节操是路人。转眼间一年过去了,基本上课本的知识学的很好,考前突击分数还很光鲜,但是总是觉得空虚。因为在这个讲究技术的年代,没有一点技术压身,是很容易睡不着觉的。近日阅读了不少前人的经验教训,感觉自己的目标很明确,应届入bat,有必要考个研也没问题,保研估计没戏了。在这个讲究实战的年代,我有必要积累一点代码行数了,否则坑定是混不过面试的。而且还自以为是地定制了一批书单,现在看到堆到50cm搞的一堆书,也觉得压力山大。我就是属于这种书看的少,做的少,但是想的多的人。今后一定要改掉这个习惯!不说了,先从leetcode入手。将来来还有uva oj,geeksforgeeks。路漫漫其修远兮,吾将上下而求索。路是要一步一步走的,来了计院有一年了,也大概知道要怎么走了。今开此博客,记录自己的学习经历,希望它能够见证我的成长!也希望自己不虚此言,脚踏实地。
Find Minimum in Rotated Sorted Array II
Follow up for "Find Minimum in Rotated Sorted Array":
What if duplicates are allowed?Would this affect the run-time complexity? How and why?
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
Find the minimum element.
The array may contain duplicates.
关键词:array binary
这个问题要简单起来很容易,遍历一次数组,找出最小的数,只是时间复杂度只能做到O(n)。
int min(int a,int b){ if(a<b) return a; else return b;}//a,b谁更小class Solution{public: int findMin(vector<int>&num){ if(num.size()==0) return 0; if(num.size()==1) return num[0]; if(num.size()==2) return min(num[0],num[1]); int l=0; int r=num.size()-1; if(num[l]>num[r]){//如果左边的数比右边的大 while((l+1)!=r){ int mid=l+r;//暴力法 mid/=2; if(num[l]<=num[mid])//比中值大,把左边的舍去 l=mid; else r=mid;//比中指小,把右边的舍去 } return min(num[l],num[r]); }//单独考虑很多数字都相同,而其中一小部分不同的数中恰恰又最小的数的情况 else if(num[l]==num[r]){ int m; for(int i=1;i<(num.size()-1);i++) if(num[i]<m) m=num[i]; return m; } else //如果最左边的数小于最右边的数,直接返回最左边的数 return num[l]; }};
leetcode -Find Minimum in Rotated Sorted Array II (1)