zoukankan      html  css  js  c++  java
  • 【LeetCode】33. Search in Rotated Sorted Array

    Suppose an array sorted in ascending order 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).

    You are given a target value to search. If found in the array return its index, otherwise return -1.

    You may assume no duplicate exists in the array.

    题意:在旋转的已排序数组中找出特定值的索引

    思路:1.用二分法找出数组中最小值的索引

      2.用最小值把数组分为两部分,确定特定值在哪个部分,然后对单独的一个部分利用二分法

    (感觉这个思路比《剑指OFFER》上面的那个思路容易理解)

     1 int search(int* nums, int numsSize, int target) {
     2     int lo=0,hi=numsSize-1,mid;
     3     while(lo<hi){
     4         mid=(lo+hi)/2;
     5         if(nums[mid]>nums[hi])
     6             lo=mid+1;
     7         else
     8             hi=mid;
     9     }
    10     if(nums[numsSize-1]>=target)
    11         hi=numsSize-1;
    12     else{
    13         hi=lo-1;
    14         lo=0;
    15     }
    16     while(lo<=hi){
    17         mid=(lo+hi)/2;
    18         if(target>nums[mid]) lo=mid+1;
    19         else if(target<nums[mid]) hi=mid-1;
    20         else return mid;
    21     }
    22     return -1;
    23 }

     另外,讨论区的另外两种做法让人佩服死了。。。膜拜一下

  • 相关阅读:
    团队与领导力健康检查 | 体检表
    如何改变组织文化
    如何在各种文化背景下成功敏捷
    OKR痛点与误区 | 敏捷家分享007
    Scrum培训感想
    如何讲好故事
    Lc70_爬楼梯
    Lc641_设计循环双端队列
    Lc32_最长有效括号
    Lc239_滑动窗口最大值
  • 原文地址:https://www.cnblogs.com/fcyworld/p/6292059.html
Copyright © 2011-2022 走看看