• Leetcode练习(Python):数组类:第33题:假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你


    题目:

    假设按照升序排序的数组在预先未知的某个点上进行了旋转。

    ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

    搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。

    你可以假设数组中不存在重复的元素。

    你的算法时间复杂度必须是 O(log n) 级别。

    思路:时间复杂度为 O(log n) 级别,要考虑使用二分法。

    程序:
    class Solution:
        def search(self, nums: List[int], target: int) -> int:
            length = len(nums)
            if length == 0:
                return -1
            if length == 1:
                if nums[0] == target:
                    return 0
                else:
                    return -1
            head = 0 
            tail = length - 1
            while head < length:
                middle = (head + tail) // 2
                if target == nums[middle]:
                    return middle
                elif nums[head] <= nums[middle]:
                    if target >= nums[head] and target < nums[middle]:
                        tail = middle - 1
                    else:
                        head = middle + 1
                else:
                    if target > nums[middle] and target <= nums[tail]:
                        head = middle + 1
                    else:
                        tail = middle - 1
            return -1
  • 相关阅读:
    04.安全-TLS1.2连接过程
    02.安全-证书和CA
    01.安全-加密
    00.https基本
    00.二叉树基本
    二分查找01.基本二本查找及其变种
    01.数据结构资料,时间复杂度空间复杂度(数据结构算法基本)
    从 CentOS 8 平滑迁移至 CentOS Stream
    identityserver使用记录
    vs2019 使用私钥进行连接时出错 ssh连接报错
  • 原文地址:https://www.cnblogs.com/zhuozige/p/12725680.html
Copyright © 2020-2023  润新知