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

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

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个值的

全部评论

相关推荐

06-23 11:43
门头沟学院 Java
allin校招的烤冷...:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
Java抽象带篮子:简历怎么写可以看看我发的帖子,你的第一个是实习经历吗?那怎么写的是你的第一个练手项目呢?简历写的怎么样直接投小厂面试一下就知道了
没有实习经历,还有机会进...
点赞 评论 收藏
分享
07-02 13:50
闽江学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务