zoukankan      html  css  js  c++  java
  • Python 解LeetCode:33. Search in Rotated Sorted Array

    • 题目描述:在一个旋转数组中查找给定的值,其中旋转数组中不含重复值;

    • 思路:

    1. 第一遍二分遍历,找到数组中最小值的索引;
    2. 第二遍分别对最小值左右两边的数组进行二分查找;
    class Solution(object):
    
        def find_min(self, nums):
            if not nums:
                return -1
            left, right = 0, len(nums) - 1
            while nums[left] > nums[right]:
                if right - left == 1:
                    return right
                mid = (left + right) / 2
                if nums[left] <= nums[mid]:
                    left = mid
                if nums[right] >= nums[mid]:
                    right = mid
            return 0
    
        def search(self, nums, target):
            """
            :type nums: List[int]
            :type target: int
            :rtype: int
            """
            if not nums:
                return -1
            min_index = self.find_min(nums)
            if nums[min_index] == target:
                return min_index
            elif nums[min_index] > target:
                return -1
            else:
                left = self.search_t(nums, 0, min_index, target)
                if left >= 0:
                    return left
                right = self.search_t(nums, min_index, len(nums)-1, target)
                if right >= 0:
                    return right
            return -1
    
        def search_t(self, nums, left, right, target):
            while left <= right:
                mid = (left + right) / 2
                if nums[mid] == target:
                    return mid
                elif nums[mid] < target:
                    left = mid + 1
                else:
                    right = mid - 1
            return -1
    
  • 相关阅读:
    悲悯心洞悉真相
    查看逍遥模拟器端口号
    delphi中Tstringlist分割字符串的用法
    delphi中httpencode使用注意事项
    DELPHI常用类型及定义单元
    左旋转字符串
    链表中倒数第k个节点
    二叉树镜像
    用两个栈实现队列
    从尾到头打印链表
  • 原文地址:https://www.cnblogs.com/qiaojushuang/p/8035656.html
Copyright © 2011-2022 走看看