154. Find Minimum in Rotated Sorted Array II
一、题目
1、审题
2、分析
一个可能有重复元素的整形数组绕一个未知元素翻转后,求新数组的最小元素。
二、解答
1、思路:
方法一、
同上一题;
只是需要考虑判断重复的元素是否被翻转到了尾部,此时 end-- 即可。
public int findMin(int[] nums) { int len = nums.length; if(len == 1) return nums[0]; int start = 0, end = len - 1; while(start < end) { if(nums[start] == nums[end]) { end--; continue; } // 已经有序 if(nums[start] < nums[end]) { return nums[start]; } // int mid = (start + end) / 2; // may be overflow int mid = start + ((end - start) >> 1); // 前半部分有序 if(nums[start] <= nums[mid]) start = mid + 1; // 前半部分无须; else end = mid; } return nums[start]; }
方法二、
直接采用线性方法进行查找;
public int findMin2(int[] nums) { for (int i = 1; i < nums.length; i++) { if(nums[i] < nums[i - 1]) return nums[i]; } return nums[0]; }