zoukankan      html  css  js  c++  java
  • 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.

    思路:二分缩小范围,直到找到。

    注意: after rotating at pivot, cases may be (0 1 2 3) (3 2 1 0) (2 3 0 1) 

    so think twice when you code !

    class Solution {
    public:
        int findMin(vector<int> &num) {
            int n = num.size();
            return find(num,0,n-1);
        }
        int find(vector<int> &num, int a, int b){
            int k = (a+b)/2;
            if(num[k]>num[b]) return find(num,k+1,b);
            else if(num[k]<num[a]) return find(num,a,k);
            else return num[a];
        }
    };

    另一种解法如下,单丝while(a<=b)就会出错。这是为何??待我想想

    class Solution {
    public:
        int findMin(vector<int> &num) {
            int a=0;
            int b=num.size()-1;
            int k=0;
            while(a<b){
              k = (a+b)/2;
              if(num[k]>num[b]) a=k+1;
              else b=k;
          }
          return num[a];
        }
        
    };

    PS:sort by pivot 的方法是 插入排序。具体方法~~~

  • 相关阅读:
    筛选法求素数
    C/C++经典面试题目
    操作系统笔试面试基本内容
    Win32/MFC的基本概念
    STL采用的标准模板库
    数据结构基本概念
    SQL基础语句
    C/C++基础概念
    计算机网络基础概念
    流水作业 批作业调度
  • 原文地址:https://www.cnblogs.com/renrenbinbin/p/4331652.html
Copyright © 2011-2022 走看看