• LC.154. Find Minimum in Rotated Sorted Array II


    https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/
    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.
    注意,我们要找的最小值,只会在右端,所以如果已经在右端,则挪RIGHT
    如果在左(通过和 NUMS[RIGHT] 比较),则挪LEFT 往右端的深沟走
    time: o(logn) worst o(n)
    space: o(1)

     1 public int findMin(int[] nums) {
     2         if (nums ==null || nums.length ==0) return -1 ;
     3         int left = 0, right = nums.length -1 ;
     4         while(left + 1 < right){
     5             int mid = left + (right - left)/2 ;
     6             if (nums[left] == nums[mid]) {
     7                 left++;
     8             }
     9             if (nums[right] == nums[mid]) {
    10                 right--;
    11             }
    12             //the lower part
    13             if (nums[mid]<nums[right]) {
    14                 right = mid;
    15             }
    16             //the upper part
    17             else if(nums[mid]>nums[right]){
    18                 left = mid ;
    19             }
    20         }
    21         //post processing
    22         return Math.min(nums[left], nums[right]);
    23     }

    注意针对 rotated sorted array 去重复的固定套路

    参考 33,81,153, 154

  • 相关阅读:
    环求解点值
    汉诺塔(记录每种路径次数)
    快速排序
    选择排序
    冒泡排序
    桶排序
    异或后最大lowerbit
    计数三角形
    nico和niconiconi
    提高程序设计能力的一般方法
  • 原文地址:https://www.cnblogs.com/davidnyc/p/8587376.html
Copyright © 2020-2023  润新知