zoukankan      html  css  js  c++  java
  • 153 Find Minimum in Rotated Sorted Array

    Suppose a sorted array 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.

    =========

    解决思路:

    /**
    012 3 4567
    701 2 3456
    670 2345
    567 0 1234
    456 7 0123
    345 6 7012
    234 5 6701
    123 4 5670
    */

    解决方式:利用二分搜索  去掉数组左右两部分中有序的部分。

    mid =( left+right)/2;

    mark表示最小值的下标,初始值为mark =right

    mid将nums分为左右两个部分,因为数组中没有重复元素,

    当nums[mid]<nums[right]时,数组右边部分有序,

      判断数组右边有序部分的最小值,是不是nums[mark]小

      此时数组右边已经搜索过了,应该在数组左边搜索,所以right = mid-1;

    当nums[mid]>nums[right],数组左边部分有序,

      判断数组左边有序部分的最小值,是不是比nums[mark]小,更新mark值[这里在代码里存在异议???和mark]

      此时数组左边以及搜索过了,应该在数组右边搜索,所以left = mid+1;

    int findMin(vector<int>& nums) {
            if(nums.size()==0)return 0;
            int left = 0;
            int right = nums.size()-1;
            int mark = right;
            while(left<=right){
                if(left+1==right){
                    mark = nums[left]<nums[mark]?left:mark;
                    mark = nums[right]<nums[mark]?right:mark;
                    break;
                }
                int mid = (left+right)/2;
                if(nums[mid]<nums[right]){
                    if(nums[mid]<nums[mark])
                        mark = mid;
                    right = mid-1;
                }else{
                    if(nums[left]<nums[mark])
                        mark = mid;
                    left = mid+1;
                }
            }///while
            return nums[mark];
        }
  • 相关阅读:
    springboot中使用swagger
    springboot中使用druid数据库连接池
    springboot连接mysql时出现的错误
    请求路径springmvc中支持ant风格
    mybatis中的<where>和<set>
    spring中Bean装配有关的注解
    spring在web项目中ApplicationContext容器的实例化
    mybatis中resultMap的作用
    mybatis中的别名
    mysql利用LAST_INSERT_ID实现id生成器
  • 原文地址:https://www.cnblogs.com/li-daphne/p/5566778.html
Copyright © 2011-2022 走看看