154. 寻找旋转排序数组中的最小值 II

图片说明

  • 扫描一遍
    class Solution {
       public int findMin(int[] nums) {
          int n =nums[0] ; 
          for(int i = 1 ; i< nums.length;i++) {
              if(n>nums[i])
                  n = nums[i];
          }
          return n;
      }
    }
  • 扫描方法改进 找出通过旋转的条件可得 旋转点前是小一点数 旋转点后的数是大一点的数
    class Solution {
      public static int findMin(int[] nums) {
          int n = nums.length ; 
          int flag = nums[n-1];
          for(int i = 0 ; i < n ; i++){
              if(nums[i]<flag)
                  return nums[i];
          }
          return flag;
      }
    }
  • 二分 相比于前一道题 增加了多个相同的数
    class Solution {
      public static int findMin(int[] nums) {
          int l = 0;
          int r = nums.length-1 ; 
          while(l<r){
              int mid = (l+r)/2;
              if(nums[l]<nums[r])  
                  return nums[l];
              if(nums[mid]>nums[r])
                  l = mid+1;  //而且mid不是最小值   [3,1,3]  0.5变为0 无法使mid变化  导致一直储在原地
              else if(nums[mid]<nums[l])
                  r = mid;
              else r--;//避免了重复陷入死循环 而且最小值相对储在中间位置
          }
          return nums[l];
      }
    }
    //[3,1,3]
    //[1,1]
    //[1,3,5]
    //[2,2,2,0,1]
    //[2,0,0,0,1,2]
全部评论

相关推荐

gelmanspar...:奖学金删掉,自我评价删掉,简历压缩一下,写一页
如果再来一次,你还会学机...
点赞 评论 收藏
分享
10-21 16:54
门头沟学院 Java
后端转测开第一人:微服务没用 校招都不看微服务的 还有就是后端行情是这样的 找实习纯看运气 秋招更是吃运气和缘分 如果对代码没有极致的追求 可以转测开
应届生简历当中,HR最关...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务