zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    ChinaUnionPay、Visa和MasterCard信用卡号验证
    使用Aspose.Cells 过程中用过的知识(转)
    在网页中回车默认按钮
    求素数算法
    通过jQuery的attr修改onclick(转)
    子页面js代码改变父页面iframe的大小(转)
    考虑线程安全但效率不高的单例C++代码
    Linux信号量摧毁/销毁
    WCF、WPF、Silverlight和区别(转)
    不考虑线程安全的初级单例C++代码
  • 原文地址:https://www.cnblogs.com/zhuozige/p/12725680.html
Copyright © 2011-2022 走看看