zoukankan      html  css  js  c++  java
  • LeetCode 33.搜索旋转排序数组

    假设按照升序排序的数组在预先未知的某个点上进行了旋转。
    ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
    搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。
    你可以假设数组中不存在重复的元素。
    你的算法时间复杂度必须是 O(log n) 级别。
    
    示例 1:
    输入: nums = [4,5,6,7,0,1,2], target = 0
    输出: 4
    
    示例 2:
    输入: nums = [4,5,6,7,0,1,2], target = 3
    输出: -1
    
    class Solution:
        def search(self, nums: List[int], target: int) -> int:
            left, right = 0, len(nums) - 1
            while left <= right:
                mid = left + (right - left) // 2
                if nums[mid] == target: # 符合条件
                    return mid
                if nums[mid] > nums[left]:  # mid 在第一段
                    if nums[mid] < target:  # target 在第一段,mid右侧
                        left = mid + 1    
                    elif nums[mid] > target: #  target 在第一段或第二段
                        if target >= nums[left]: # target 在第一段
                            right = mid - 1
                        else:                    # target 在第一段
                            left = mid + 1
                elif nums[mid] < nums[left]: # 右边是有序的
                    if nums[mid] > target:   # target 在第二段,mid左侧
                        right = mid - 1
                    else:
                        if target < nums[left]:
                            left = mid + 1
                        else:
                            right = mid - 1
                else:
                    left += 1
            return -1
    
  • 相关阅读:
    PHP添加Redis模块及连接
    Redis高级应用
    Redis常用命令
    Redis的数据类型及操作
    Redis下载及安装部署
    NoSQL介绍
    8种Nosql数据库系统对比
    JQ插件
    libcurl一般用法
    密钥对加密原理
  • 原文地址:https://www.cnblogs.com/sandy-t/p/13401956.html
Copyright © 2011-2022 走看看