154. 寻找旋转排序数组中的最小值 II
转跳点:--\(˙<>˙)/--
原本打算大年三十十一起写完的,结果这篇拖到了年初一……
这道题比刚刚那道,麻烦一点,因为有重复,所以我们需要考虑重复的情况,就是刚刚的两种情况变成了三种:
- mid < right:left = mid+1
- mid > right:right = left;
- mid = right:left++;
为什么是++?题目说了升序,如果相等那么说明只有两种可能
- 整个数组都是一个数
- 旋转点极有可能就是这个数(貌似和解题无关)
所以无论如何那种情况,题设想要的最小值一定得往后判断,全数组一样也得往后,因为输入的代码需要通用性。如果非要 -- 也可以,不过得从right--,并且left = mid。
代码如下:
int findMin(int* nums, int numsSize){
    int low = 0, high = numsSize-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 if (nums[mid] < nums[high])
        {
            high = mid;
        }
        else
        {
            low++;
        }
    }
    return nums[low];
}算法不易,诸君共勉!
相关推荐
  lixiaotao    2020-10-07  
   美丽的泡沫    2020-09-08  
   nongfusanquan0    2020-08-18  
   hang0    2020-08-16  
   earthhouge    2020-08-15  
   算法改变人生    2020-07-28  
   troysps    2020-07-19  
   Broadview    2020-07-19  
   chenfei0    2020-07-18  
   风吹夏天    2020-07-07  
   yangjingdong00    2020-07-05  
   数据与算法之美    2020-07-05  
   shawsun    2020-07-04  
   数据与算法之美    2020-07-04  
 要知道时间复杂度只是描述一个增长趋势,复杂度为O的排序算法执行时间不一定比复杂度为O长,因为在计算O时省略了系数、常数、低阶。实际上,在对小规模数据进行排序时,n2的值实际比 knlogn+c还要小。
  Evankaka    2020-07-04  
   田有朋    2020-06-28  
 