恢复旋转排序数组JAVA
时间: 2024-09-19 11:18:13 浏览: 32
恢复旋转排序数组是指给定一个已部分有序的、可能是旋转了整个数组的升序序列,需要找到这个数组的最小元素。例如,对于数组 [4,5,6,7,0,1,2] 或 [0,1,2,4,5,6,7],我们需要找到其中的最小值。
在 Java 中,你可以通过线性扫描算法解决这个问题。首先,检查数组的第一个元素是否是最小的,如果不是,那么最小值应该在前半部分数组(即未旋转的部分)中。从头开始遍历前半部分,如果遇到比当前最小值大的元素,就说明找到了边界,然后只需遍历剩余部分就可以找到最小值。以下是简单的步骤:
```java
public int findMin(int[] nums) {
if (nums == null || nums.length <= 1) return nums[0]; // 空数组或单元素情况
int left = 0, right = nums.length - 1; // 定义左右指针
while (left < right) { // 当左指针小于右指针
int mid = left + (right - left) / 2;
// 如果中间元素大于左边第一个元素,说明最小值在右半部分
if (mid > 0 && nums[mid] >= nums[left]) {
left = mid + 1;
} else { // 否则,最小值在左半部分或等于第一个元素
right = mid;
}
}
// 最终结果是左指针指向的元素
return nums[left];
}
```
阅读全文