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

    Suppose an array sorted in ascending order 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.

    Example 1:

    Input: [3,4,5,1,2] 
    Output: 1
    

    Example 2:

    Input: [4,5,6,7,0,1,2]
    Output: 0
    class Solution {
        public int findMin(int[] nums) {
            int res = nums[0];
            for(int i = 0; i < nums.length-1; i++){
                if(nums[i+1] < nums[i]) return nums[i+1];
            }
            return res;
        }
    }

    第一个右<左的时候就是要找的。

    class Solution {
        public int findMin(int[] nums) {
            // int res = nums[0];
            // for(int i = 0; i < nums.length-1; i++){
            //     if(nums[i+1] < nums[i]) return nums[i+1];
            // }
            // return res;
            if(nums.length == 1) return nums[0];
            int left = 0;
            int right = nums.length - 1;
            while (left < right) {
                int mid = left + (right - left) / 2;
                if (nums[mid] < nums[right]) {
                    right = mid;
                } else {
                    left = mid+1;
                }
            }
            return nums[left];
        }
    }

    也可以用二分法,和查找target相反,

    • A[mid] < A[right],则区间[mid,right]一定递增,断层一定在左边
    • A[mid] > A[right],则区间[left,mid]一定递增,断层一定在右边
    • nums[mid] == nums[right],这种情况不可能发生,因为数组是严格单调递增的,不存在重复元素

    二分法中,似乎查找target的时候用的是left <= right, 返回nums[mid], 找最大最小数用的是left < right, 返回nums[left/right].

  • 相关阅读:
    简单的StringBuffer实现
    Java-HashMap、HashSet、hashTable
    JavaScript 引用错误
    使用jconsole分析内存情况-JVM
    Thread 与 Runnable 混合使用测试
    裴波那序列-JAVA实现
    多线程之----------线程池
    winform 控件拖拽和缩放
    C# 使用Process调用外部程序中所遇到的参数问题
    winform textbox 的自动实现功能
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11516045.html
Copyright © 2011-2022 走看看