📅  最后修改于: 2023-12-03 15:37:43.448000             🧑  作者: Mango
在有序数组中查找最小值是一个简单的问题。但是,如果数组被旋转了,则可以复杂。在这个问题中,您需要查找旋转排序数组中的最小值。
这里提供两种解法:暴力法和二分查找法。
暴力法很简单。我们可以遍历整个数组,找到最小值。但是,这种方法的时间复杂度为O(n),显然不是最优解。
public int findMin(int[] nums) {
int min = nums[0];
for (int num : nums) {
if (num < min) {
min = num;
}
}
return min;
}
在旋转排序数组中,有两种可能的情况:
对于未旋转数组,我们可以直接返回第一个元素。对于旋转数组,则需要进行二分查找。我们可以将数组分为两部分,并找到具有最小值的半部分。
public int findMin(int[] nums) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] > nums[right]) {
left = mid + 1;
} else {
right = mid;
}
}
return nums[left];
}
在旋转排序数组中查找最小值是一个相对简单的问题,有两种解法:暴力法和二分查找法。二分查找法的时间复杂度为O(log n),是最优解。