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

图片说明

  • 暴力

    class Solution {
      public int findMin(int[] nums) {
          int min = nums[0];
          for(int i = 1 ; i < nums.length;i++){
              if(min>nums[i])
                  min = nums[i];
          }
          return min;
      }
    }
  • 二分 三种情况

              //一开始是想看看通过断点的位置来发现规律 结果没有找到 分析过程 然后没分析出来 
              // if(nums[mid]>nums[l]&&nums[mid]<nums[r])
              //     r = mid;//该情况已经考虑
              // else if(nums[mid]>nums[r]&&nums[mid]<nums[l])
              //     l = mid;//该情况不存在
              // if(nums[mid]>nums[r]&&nums[mid]>nums[l])
              //     l = mid;
              // else if(nums[mid]<nums[r]&&nums[mid]<nums[l])
              //     r = mid;//没问题
    //深入分析
    class Solution {
      public int findMin(int[] nums) {
          //数组中不存在重复元素。
          int l = 0;
          int r = nums.length-1;
          while(l<r){
              if(nums[l]<nums[r])return nums[l];//二分后会落到某一段递增区间
              int mid = (l+r)/2;
              int temp = mid+1;
              if(nums[temp]>nums[mid]&&nums[mid]>nums[l]){ //二分条件
                  l = mid;
              }
              else if(nums[temp]>nums[mid]&&nums[mid]<nums[l]){//二分条件
                  r = mid;
              }
              else if(nums[temp]<nums[mid]){
                  return nums[temp];
              }
          }     
          return nums[l];
      }
    }
全部评论

相关推荐

09-24 11:06
辽宁大学 市场
深莞高速因为台风都封掉了,华为协商后,特地开通华为通道,凭工卡可以正常通勤......
崔喃喃:“台风您好,19级专家已驳回了您18级台风的OA登陆申请”
投递华为技术有限公司等公司10个岗位
点赞 评论 收藏
分享
码农索隆:1.照片换成证件照。 2.专业技能写的太少了,太单薄了。 3.项目经历描写的太冗余,分成几点。 4.无实习经历,看看能不能包一个。
点赞 评论 收藏
分享
09-24 18:25
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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