zoukankan      html  css  js  c++  java
  • Search in Rotated Sorted Array

    看到题目写的hard,感觉走一边数组就可以了嘛

     1 class Solution {
     2 public:
     3     int search(vector<int>& nums, int target) {
     4         for(int i=0;i<nums.size();i++)
     5         {
     6             if(nums[i]==target) return i;
     7         }
     8          return -1;
     9     }
    10 };

       以上时间是4ms.  

       还是觉得莫名其妙,被leetcode吓怕了,总觉得题目不会这么简单。

      看了下网上的解答,发现大家重点在复杂度上,而上面的复杂度为O(n)。

       下面是复杂度为O(log N)

    序列:0 1 2 3  4 5 6 7 8

    情况一:0在中间点左边

    如:6 7 8 0 1 2 3 4  5       ;1是中间点,此时中间值小于最右边的值

    情况二:0在中间点右边

    如:3 4 5 6 7 8 0 1 2       ;7是中间点,此时中间值大于最右边

    注意:上面的想法是基于序列是升序排列,若是降序,没有旋转的请款包含在情况二中,其它的则要颠倒

     1 class Solution {
     2 public:
     3     int search(vector<int>& nums, int target) {
     4     if(nums.size()<=0) return -1;
     5      int low=0,high=nums.size()-1;
     6      int mid,rot,remid;
     7      while(low<high)
     8      {
     9          mid=(low+high)/2;
    10          if(nums[mid]<nums[high]) high=mid;
    11          else low=mid+1;
    12      }
    13      rot=low;
    14      low=0;high=nums.size()-1;
    15      while(low<=high)
    16      {
    17          mid=(low+high)/2;
    18          remid=(mid+rot)%nums.size();
    19          if(nums[remid]==target) return remid;
    20          else if(nums[remid]<target) low=mid+1;
    21          else high=mid-1;
    22      }
    23      return -1;
    24     }
    25 };
  • 相关阅读:
    Spring面试,IoC和AOP的理解
    WEB打印(jsp版)
    Spring事务管理机制的实现原理-动态代理
    spring面试题
    oracle PLSQL基础学习
    oracle创建表空间
    WM_CONCAT字符超过4000的处理办法
    Oracle 数据泵使用详解
    Oracle 数据泵详解
    linux下启动oracle
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5268295.html
Copyright © 2011-2022 走看看