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 };
  • 相关阅读:
    python 安装与pip安装
    使用通配符来解决数据1和11、12/13/14的问题
    数据库中一行变多行,拆分数据
    15-哈希表 HashTable
    13-自平衡二分搜索树 AVLTree
    12-并查集 UnionFind
    11-字典树 Trie
    10-线段树 Segment Tree
    09-堆 Heap(最大堆)
    08-映射 Map
  • 原文地址:https://www.cnblogs.com/sword-/p/7987250.html
Copyright © 2011-2022 走看看