python递归计数及结束递归

题目:搜索旋转排序数组
搜索旋转排序数组

class Solution:
    TOTAL = 0
    RUN = True
    def search(self, nums: List[int], target: int) -> int:
        # 将数组一分为二,分别比头尾,尾大于头为有序,剩下的为无序
        i, j = 0, len(nums) - 1
        res = -1
        if nums and self.RUN:
            in_middle = (j + i) // 2
            list1 = nums[:in_middle + 1]
            list2 = nums[in_middle + 1:]
            if nums[in_middle] >= nums[i]:
                res = self.binarySearch(list1, target)
                if res == -1:
                    self.TOTAL += in_middle + 1
                    self.search(list2, target)
                else:
                    self.TOTAL += res
            else:
                res = self.binarySearch(list2, target)
                if res == -1:
                    self.search(list1, target)
                else:
                    self.TOTAL += in_middle + 1 + res

        if not self.RUN:
            return self.TOTAL
        return res


    def binarySearch(self, nums, target):
        """ 二分查找 """
        i, j = 0, len(nums) - 1
        while i <= j:
            in_middle = (j + i) // 2
            if nums[in_middle] == target:
                # print(nums, TOTAL)
                self.RUN = False
                return in_middle
            elif nums[in_middle] < target:
                i = in_middle + 1
            else:
                j = in_middle - 1

        return -1

猜你喜欢

转载自blog.csdn.net/weixin_41845533/article/details/89117831
今日推荐