153. 寻找旋转排序数组中的最小值
暴力
class Solution { public int findMin(int[] nums) { int min = nums[0]; for(int i = 1 ; i < nums.length;i++){ if(min>nums[i]) min = nums[i]; } return min; } }
二分 三种情况
//一开始是想看看通过断点的位置来发现规律 结果没有找到 分析过程 然后没分析出来 // if(nums[mid]>nums[l]&&nums[mid]<nums[r]) // r = mid;//该情况已经考虑 // else if(nums[mid]>nums[r]&&nums[mid]<nums[l]) // l = mid;//该情况不存在 // if(nums[mid]>nums[r]&&nums[mid]>nums[l]) // l = mid; // else if(nums[mid]<nums[r]&&nums[mid]<nums[l]) // r = mid;//没问题
//深入分析 class Solution { public int findMin(int[] nums) { //数组中不存在重复元素。 int l = 0; int r = nums.length-1; while(l<r){ if(nums[l]<nums[r])return nums[l];//二分后会落到某一段递增区间 int mid = (l+r)/2; int temp = mid+1; if(nums[temp]>nums[mid]&&nums[mid]>nums[l]){ //二分条件 l = mid; } else if(nums[temp]>nums[mid]&&nums[mid]<nums[l]){//二分条件 r = mid; } else if(nums[temp]<nums[mid]){ return nums[temp]; } } return nums[l]; } }