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

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

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

全部评论

相关推荐

运营你豪哥:简历改改吧-非本、求职意向技术岗、无实习经历、内容空洞 如果简历不爆改的话,应该是会持续崩溃了 1.把你教育经历放最下面去 2.蓝底照片很奇怪哈,感觉还在高中时代,建议白底重新拍一下 3.校园经历没啥必要,收集和反馈同学们对产品的意见,解决学生和老师之间的沟通,企业招聘不看这些哈 好好思考一下简历的设计和你要表达的重点,再去投简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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