zoukankan      html  css  js  c++  java
  • Leetcode题库——33.搜索旋转排序数组


    @author: ZZQ
    @software: PyCharm
    @file: search.py
    @time: 2018/11/12 18:12
    要求:假设按照升序排序的数组在预先未知的某个点上进行了旋转。
    ( 例如,数组 [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 __init__(self):
            pass
    
        def search_index(self, target, nums, start, end):
            left = start
            right = end-1
            while left <= right:
                middle = (left + right) / 2
                if nums[middle] == target:
                    return middle - start + 1
                elif nums[middle] < target:
                    left = middle + 1
                else:
                    right = middle - 1
    
            return -1
    
        def search(self, nums, target):
            """
            :type nums: List[int]
            :type target: int
            :rtype: int
            """
            nums_len = len(nums)
            reverse_index = -1
            if nums_len == 0:
                return -1
            if nums_len == 1:
                if nums[0] == target:
                    return 0
                else:
                    return -1
            for i in range(nums_len-1):
                if nums[i] > nums[i+1]:
                    reverse_index = i+1
            # 在旋转后的子数组里面
            if reverse_index != -1:
                if target < nums[0]:
                    sub_index = self.search_index(target, nums, reverse_index, nums_len)
                    if sub_index != -1:
                        index = reverse_index-1 + sub_index
                    else:
                        index = -1
                else:
                    sub_index = self.search_index(target, nums, 0, reverse_index+1)
                    if sub_index != -1:
                        index = sub_index -1
                    else:
                        index = -1
            else:
                sub_index = self.search_index(target, nums, 0, nums_len)
                if sub_index != -1:
                    index = sub_index - 1
                else:
                    index = -1
            return index
    
  • 相关阅读:
    reids 入门
    关于字典的那些事儿.
    更新阿里源repo出的问题
    关于-编码进阶
    *** 数据类型之间的转化
    关于列表那些事:12.24
    while else 结构体(自测)
    关于切片的步长为正负值 的问题(自测)
    if 嵌套if 的先后顺序的区别 (自测)
    二: python基础数据类型(int,
  • 原文地址:https://www.cnblogs.com/zzq-123456/p/9965429.html
Copyright © 2011-2022 走看看