zoukankan      html  css  js  c++  java
  • Find Minimum in Rotated Sorted Array

    Question: https://leetcode.com/submissions/detail/49732268/

    题目:

    Suppose a sorted array is rotated at some pivot unknown to you beforehand.

    (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

    Find the minimum element.

    You may assume no duplicate exists in the array.

    Attention:

    Rotated Sorted Array 有一点特性, nums[start] > nums[end],否则就是 UnRotated Sorted Array 了。思路如下

    • If nums[start] < nums[end], ==> UnRotated ==> return nums[start]
    • Else 取 disorder 的一半,踢掉大值,进行下一次找寻。 

    这里的 start, mid, end 加减一进行下一步 method call,踢掉大值,也可以防止死循环。

    下面的代码,使用了 while(start < end) {} 代替 原 Recursion 实现。其时间复杂度都是 O(logn).

     1 public int findMin(int[] nums) {
     2     if(nums == null || nums.length == 0) {
     3         return 0;
     4     }
     5     
     6     int start = 0;
     7     int end = nums.length - 1;
     8     int res = nums[start];
     9     
    10     while(start < end) {
    11         int mid = (start + end)/2;
    12         if(nums[start] < nums[end]) {
    13             return nums[start];
    14         } else if(nums[start] > nums[mid]) {
    15             start++;
    16             end = mid;
    17             res = Math.min(res, nums[mid]);
    18         } else if(nums[end] < nums[mid]) {
    19             start = mid + 1;
    20             res = Math.min(res, nums[end]);
    21         }
    22     }
    23     
    24     return res;
    25 }
  • 相关阅读:
    42-蓄水池
    11-盛水最多的容器
    老虎-删除排序链表中的重复节点
    72-编辑距离
    53-3-数组中数值和下标相等的元素
    53-2-0~n-1中缺失的数字
    53-1-在排序数组中查找数字
    52-两个链表的第一个公共节点
    51-数组中的逆序对
    I/O相关
  • 原文地址:https://www.cnblogs.com/Phoenix-Fearless/p/5101247.html
Copyright © 2011-2022 走看看