旋转有序数组的最小值

旋转有序数组的最小值

问题

这个题目说的是,给你一个不为空的旋转有序数组,数组中不包含重复数字,你要找到这个数组中的最小值并返回它。旋转有序数组是由一个原来有序的数组通过左旋或右旋部分数字到另一端形成的。注意,这里我们讨论的有序默认都指递增排序。

比如说,原来的有序数组是 0, 1, 2, 4, 8,把 0, 1 旋转到数组右边,得到的数组 a 是:

2, 4, 8, 0, 1

在这个数组中,最小值是 0,因此你要返回 0。

代码

public class AlgoCasts {

  // Time: O(log(n)), Space: O(1)
  public int findMin(int[] nums) {
    int low = 0, high = nums.length - 1;
    while (low < high) {
      int mid = low + (high - low) / 2;
      if (nums[mid] > nums[high]) low = mid + 1;
      else high = mid;
    }
    return nums[low];
  }

  // Time: O(log(n)), Space: O(1)
  public int findMinEarlyReturn(int[] nums) {
    int low = 0, high = nums.length - 1;
    while (low < high) {
      if (nums[low] < nums[high]) return nums[low];
      int mid = low + (high - low) / 2;
      if (nums[mid] > nums[high]) low = mid + 1;
      else high = mid;
    }
    return nums[low];
  }

}

 上一篇
小岛数量 小岛数量
小岛数量问题 这个题目说的是,给你一个包含 0/1 字符的二维数组,字符 1 构成的连通区域表示小岛,字符 0 表示海水,你要计算二维数组中有多少个小岛。在这个题目中,元素相邻只考虑上/下/左/右 4 个元素,斜方向的元素认为是不相邻的。
2019-03-16
下一篇 
最长递增子序列的长度 最长递增子序列的长度
最长递增子序列的长度问题 这个题目说的是,给你一个整数数组,你要计算数组里最长递增子序列的长度。其中,子序列不要求连续。 比如说,给你的数组 a 是: 1, 8, 2, 6, 4, 5 在这个数组里,最长的递增子序列是: 1, 2,
2019-03-16
  目录