在无重复元素时,中间元素与首元素相等,表示一共只有两个元素,low与high各指向一个。
由于while循环中限制的大小关系,因此返回nums[high]即为最小值。
然而当存在重复元素时,该条件并不能表示一共只有low和high指向的两个元素,
而是说明low指向的元素重复了,因此删除其一,low ++即可。
public class Solution { public int findMin(int[] nums) { int length = nums.length; int left = 0; int right = length - 1; while (left + 1 < right && nums[left] >= nums[right]) { int mid = left + (right - left) / 2; if (nums[mid] < nums[left]) { right = mid; } else if (nums[mid] > nums[left]) { left = mid; } else { left ++; } } return Math.min(nums[left], nums[right]); } }