已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到: • 若旋转 4 次,则可以得到 [4,5,6,7,0,1,2] • 若旋转 7 次,则可以
时间: 2023-07-02 09:16:39 浏览: 74
得到 [0,1,2,4,5,6,7],即没有旋转。给定旋转后的数组,你需要找到其中最小的元素并返回。
这个问题可以使用二分查找来解决。因为数组原本是升序排列的,所以旋转后可以将数组分为两个部分,分别是旋转后的最大值的右边部分和最小值的左边部分。我们可以使用二分查找来找到最小值。
具体来说,我们可以通过比较中间元素和右端点元素的大小关系来判断中间元素所处的位置。如果中间元素比右端点元素小,说明最小值在左半部分,否则在右半部分。最后,当左右指针相遇时,即找到了最小值。
下面是这个问题的 Python 代码实现:
```python
def find_min(nums):
left, right = 0, len(nums) - 1
while left < right:
mid = (left + right) // 2
if nums[mid] > nums[right]:
left = mid + 1
else:
right = mid
return nums[left]
```
其中,left 和 right 分别表示左右指针的位置,mid 表示中间位置。在每次迭代中,我们首先计算中间位置 mid,然后比较 nums[mid] 和 nums[right] 的大小关系。如果 nums[mid] > nums[right],说明最小值在右半部分,将 left 移动到 mid+1 的位置。否则,最小值在左半部分,将 right 移动到 mid 的位置。最后,当 left 和 right 指向同一个位置时,即找到了最小值,返回 nums[left] 即可。
阅读全文