153. Find Minimum in Rotated Sorted Array
一、题目
1、审题
2、分析
一个有序整数数组翻转成两段增序数组后,求出其中的最小的元素。
二、解答
1、思路:
方法一、
采用二分法求出最小元素。
①、若 nums[start] < nums[end] ,则数组已经有序;返回 nums[start];
②、若 nums[start] < nums[ mid ], 则 前半部分已经有序,则 start = mid + 1;
否则 后半部分已经有序,则 end = mid;
③、最终,返回 nums[start];
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]) { 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 findMin(int[] nums) { for (int i = 1; i < nums.length; i++) { if(nums[i] < nums[i - 1]) return nums[i]; } return nums[0]; }