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

    假设按照升序排列的数组在事先未知的某个关键点上旋转。(即0 1 2 4 5 6 7可能变成4 5 6 7 0 1 2)。给你一个目标值来搜索。如果在数组中发现它返回其索引,否则返回-1。你可能会认为数组中没有重复。

    (1)思想1:直接遍历数组,找到索引值,如果未找到,则返回-1

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

    (2)思想2:使用二分法进行查找,二分搜索法的关键在于获得了中间数后,判断下面要搜索左半段还是右半段,通过观察得出规律,如果中间的数小于最右边的数,则右半段是有序的,若中间数大于最右边数,则左半段是有序的,我们只要在有序的半段里用首尾两个数组来判断目标值是否在这一区域内,这样就可以确定保留哪半边了,代码如下:

     1 class Solution {
     2 public:
     3     int search(vector<int>& nums, int target) {
     4         int len=nums.size();
     5         int begin=0;
     6         int end=len-1;
     7         while(begin<=end)
     8         {
     9             int mid=begin+(end-begin)/2;
    10             if(nums[mid]==target)
    11                 return mid;
    12             else if(nums[mid]<nums[end])
    13             {
    14                 if(nums[mid]<target && nums[end]>=target)
    15                     begin=mid+1;
    16                 else
    17                     end=end-1;
    18             }
    19             else
    20             {
    21                 if(nums[mid]>target && nums[begin]<=target)
    22                     end=mid-1;
    23                 else
    24                     begin=begin+1;
    25             }
    26             
    27         }
    28         return -1;
    29     }
    30 };
  • 相关阅读:
    8行代码批量下载GitHub上的图片
    python经典面试算法题1.1:如何实现链表的逆序
    pandas处理excel的常用方法技巧(上)
    numpy---python数据分析
    python、C++经典算法题:打印100以内的素数
    Java中数组、集合、链表、队列的数据结构和优缺点和他们之间的区别
    Hystrix
    Java中的static关键字解析
    Spring Boot
    Springcloud和Dubbo的区别。Eureka和Ribbon和Hystrix和zuul
  • 原文地址:https://www.cnblogs.com/sword-/p/7987250.html
Copyright © 2011-2022 走看看