题解 | #在旋转过的有序数组中寻找目标值#

在旋转过的有序数组中寻找目标值

https://www.nowcoder.com/practice/87c0e7abcbda41e7963660fa7d020995

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param nums int整型一维数组 
# @param target int整型 
# @return int整型
#
class Solution:
    def search(self , nums: List[int], target: int) -> int:
        # write code here
        def binary_search(nums,target):
            if len(nums)==0:return -1
            if len(nums)==1 and target!=nums[0]:return -1
            left,right = 0,len(nums)-1
            while(left<right):
                print(left,right)
                mid = int((left+right)/2)
                if nums[mid]==target:return mid
                elif target<nums[mid]:right = mid
                else:left = mid+1
            return left if nums[left]==target else -1

        i = 1
        n = len(nums)
        if n==0:return -1
        elif n==1 and nums[0]!=target:return -1
        while(i<n):
            if nums[i]<nums[i-1]:break
            i+=1
        nums1,nums2 = nums[:i],nums[i:]
        idx1,idx2 = binary_search(nums1,target),binary_search(nums2,target)
        if idx1==-1 and idx2==-1:return -1
        elif idx1>=0:return idx1
        else: return idx2+i

因为这是在AI面试上碰到的题目,所以我没有用任何库函数,尽可能还原面试的真实场景,这个题目的做法是首先找到旋转的位置:这个很简单,就是找破坏递增规则的位置。找到位置之后把数组一分为二,在两个数组中二分查找就可以了,注意边界条件:数组可能是空的和只有1个值的

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务