zoukankan      html  css  js  c++  java
  • 剑指offer -11题

    剑指offer-11

    旋转数组最小的数字

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
    例如数组 {3, 4, 5, 1, 2} 为 {1, 2, 3, 4, 5} 的一个旋转,该数组的最小值为 1。

    解题思路:

    在一个有序数组中查找元素我们一般使用二分查找(折半查找),时间复杂度O(logN),但是本题还有一个问题,就是遇到重复元素无法定位区间,此时需要切换到顺序查找.例如对于数组 {1,1,1,0,1},l、m 和 h 指向的数都为 1,此时无法知道最小数字 0 在哪个区间。

    //折半查找
    public int minNumberInRotateArray(int[]  nums){
    	if(nums.length == 0)
      	return 0;
      
      int low=0, high=nums.length - 1;  //define low and high
      while(low < high ){
        int mid = low + (high - low) / 2; //
        if(nums[low] == nums[mid] && nums[mid] == nums[high]) 
          return minNumber[nums, low ,high];
        else if (nums[mid] <= nums[high])
            high = mid;
        else 
            low = mid + 1;
    	}
      return nums[low];
    }
         
    //顺序查找
    private int minNumber(int []nums , int low ,int high){
          for(int i = low; i < high; i++){
            if(nums[i] > nums[i+1])
              return nums[i+1];
          }
       return nums[low];
    }
    
  • 相关阅读:
    arrayObj.splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])
    运算符 ||
    ajax 本地测试,使用Chrome 浏览器
    js set
    js get 传参 汉字 乱码问题
    删除对象中的key
    html 返回页面顶部
    js 设置回车事件
    盘面,盘口
    ST股
  • 原文地址:https://www.cnblogs.com/fightingcode/p/10802322.html
Copyright © 2011-2022 走看看