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

     1 """
     2 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
     3 (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).
     4 You are given a target value to search. If found in the array return its index, otherwise return -1.
     5 You may assume no duplicate exists in the array.
     6 Your algorithm's runtime complexity must be in the order of O(log n).
     7 Example 1:
     8 Input: nums = [4,5,6,7,0,1,2], target = 0
     9 Output: 4
    10 Example 2:
    11 Input: nums = [4,5,6,7,0,1,2], target = 3
    12 Output: -1
    13 """
    14 """
    15 题目要求时间复杂度为O(log n)
    16 先不管这个要求。AC混一下
    17 得到解法一
    18 """
    19 class Solution1:
    20     def search(self, nums, target):
    21         if target not in nums:
    22             return -1
    23         for i in range(len(nums)):
    24             if nums[i] == target:
    25                 return i
    26 
    27 """
    28 真正的解法是二分法
    29 主要分两种情况:
    30     若nums[left]<=nums[mid],这说明前半部分是排序的
    31     若nums[left]<=target<=nums[mid],在前半部分搜索,反之在后半部分搜索
    32     若nums[left]>nums[mid],这说明后半部分是排序的
    33     若nums[mid]<=target<=nums[right],在后半部分搜索,反之在前半部分搜索
    34     一直搜索,直到left>=right
    35 传送门:https://www.jianshu.com/p/7295418b260f
    36 """
    37 class Solution2:
    38     def search(self, nums, target):
    39         n = len(nums)
    40         left, right = 0, n-1
    41         while left < right:
    42             mid = (left+right)//2
    43             if nums[mid] == target:
    44                 return mid
    45             if nums[left] <= nums[mid]: #前办部分有序
    46                 if nums[left] <= target <= nums[mid]:
    47                     right = mid
    48                 else:
    49                     left = mid + 1
    50             else:#后半部分有序
    51                 if nums[mid] <= target <= nums[right]:
    52                     left = mid + 1
    53                 else:
    54                     right = mid
    55         return left if nums and nums[left] == target else -1
  • 相关阅读:
    RoIPooling、RoIAlign笔记
    ROI Align 的基本原理和实现细节
    ROI Align详解
    GIT总结
    java-变量,函数 下
    linux设置静态ip地址
    技术参考网站-网址
    python
    python
    python
  • 原文地址:https://www.cnblogs.com/yawenw/p/12301405.html
Copyright © 2011-2022 走看看