📜  在旋转排序数组中查找最小值 - Java (1)

📅  最后修改于: 2023-12-03 15:37:43.448000             🧑  作者: Mango

在旋转排序数组中查找最小值 - Java

在有序数组中查找最小值是一个简单的问题。但是,如果数组被旋转了,则可以复杂。在这个问题中,您需要查找旋转排序数组中的最小值。

解法

这里提供两种解法:暴力法和二分查找法。

暴力法

暴力法很简单。我们可以遍历整个数组,找到最小值。但是,这种方法的时间复杂度为O(n),显然不是最优解。

public int findMin(int[] nums) {
    int min = nums[0];
    for (int num : nums) {
        if (num < min) {
            min = num;
        }
    }
    return min;
}
二分查找法

在旋转排序数组中,有两种可能的情况:

  1. 数组未旋转
  2. 数组已旋转

对于未旋转数组,我们可以直接返回第一个元素。对于旋转数组,则需要进行二分查找。我们可以将数组分为两部分,并找到具有最小值的半部分。

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),是最优解。