
LeetCode 153 题「寻找旋转排序数组中的最小值」要求以 O(log n) 的时间复杂度找出旋转后的升序数组中的最小元素。由于数组无重复元素可以使用二分查找。Java 实现classSolution{publicintfindMin(int[]nums){intleft0;intrightnums.length-1;while(leftright){intmidleft(right-left)/2;// 如果中间元素大于右边界元素说明最小值在 mid 的右侧if(nums[mid]nums[right]){leftmid1;}else{// 否则最小值在 mid 的左侧或就是 midrightmid;}}// 循环结束时 left right指向最小值returnnums[left];}}思路解析· 旋转后的数组可以看作两个升序段最小值是第二段的第一个元素。· 比较 nums[mid] 与 nums[right]· 若 nums[mid] nums[right]说明 mid 在第一段较大值区域最小值一定在 mid 右侧因此 left mid 1。· 否则 mid 在第二段较小值区域最小值可能在 mid 或 mid 左侧因此 right mid。· 每次循环缩小一半范围最终 left 和 right 相遇即为最小值。时间复杂度O(log n)空间复杂度O(1)。