• 二分查找总结及部分Lintcode题目分析 3


    Search in rotated sorted array,题目中也给出了相应的例子,就是在sorted array某个节点发生了翻转(ie.0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2)。所以我们可以把这个sorted array 分成两部分看,一部分是左半部分的上升区间,然后是最小值,一部分是右半部分的上升区间。以及考虑其中的特例就是翻转后仍是原来的array,一个连续的上升区间。

    1. Find Minimum in Rotated Sorted Array

    解题思路:要找到最小值的话,首先要定一个参考的值,即target是什么。我们以数组尾作为target,来进行比较,先锁定是右半部分的上升区间,再在这个上升区间中找最小值。找到比num[end]的值要小的不返回而是进一步缩小范围。

    class Solution:
        # @param num: a rotated sorted array
        # @return: the minimum number in the array
        def findMin(self, num):
            # set the last element as target, and find the second ascending period
            start = 0
            end = len(num) - 1
            while start + 1 < end:
                mid = start + (end - start) / 2
                if num[mid] <= num[end]:
                    end = mid
                else:
                    start = mid
            return min(num[start],num[end])
    

    2. Search in rotated sorted array

    这道题据说是检验你是否真的会二分法的题目~因为target已经给出了,那我们的判断标准就比之前找最小值要多了个判断。以target和end的比较,target和mid的比较,以及这个mid落到了哪个上升区间来比较~

    class Solution:
        """
        @param A : a list of integers
        @param target : an integer to be searched
        @return : an integer
        """
        def search(self, A, target):
            if A is None or len(A) == 0:
                return -1
            start = 0
            end = len(A) - 1
            while (start + 1 < end):
                mid = start + (end - start) / 2
                if A[mid] == target:
                    return mid
                elif A[end] < A[mid]:
                    if A[end] < target and target <= A[mid]:
                        end = mid
                    else:
                        start = mid
                else:
                    if A[mid] <= target and target <= A[end]:
                        start = mid
                    else:
                        end = mid
            if A[end] == target:
                return end                    
            if A[start] == target:
                return start
            
            return -1
    
  • 相关阅读:
    堆栈学习
    需要阅读的书籍
    Rust Book Lang Ch.19 Fully Qualified Syntax, Supertraits, Newtype Pattern, type aliases, never type, dynamic sized type
    Rust Lang Book Ch.19 Placeholder type, Default generic type parameter, operator overloading
    Rust Lang Book Ch.19 Unsafe
    Rust Lang Book Ch.18 Patterns and Matching
    Rust Lang Book Ch.17 OOP
    Rust Lang Book Ch.16 Concurrency
    Rust Lang Book Ch.15 Smart Pointers
    HDU3966-Aragorn's Story-树链剖分-点权
  • 原文地址:https://www.cnblogs.com/chercher/p/5640019.html
Copyright © 2020-2023  润新知