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

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

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

首先找到旋转位置的索引

根据找到的索引求出旋转的长度,并将数组拼接为原来升序的数组

判断target与数组头尾的大小关系

二分查找target的位置,同时通过之前得到的旋转的长度计算在原始数组中的索引

# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param nums int整型一维数组 
# @param target int整型 
# @return int整型
#
class Solution:
    def search(self , nums: List[int], target: int) -> int:
        # write code here
        idx=-1
        for i in range(len(nums)-1):
            if nums[i+1]<nums[i]:
                idx=i+1
                break

        gap=len(nums)-idx
        if idx!=-1:
            nums=nums[idx:]+nums[:idx]

        if target<nums[0] or target>nums[-1]:
            return -1

        l,r=0,len(nums)-1
        while l<=r:
            mid=(l+r)//2
            if nums[mid]>target:
                r=mid-1
            elif nums[mid]<target:
                l=mid+1
            else:
                if idx!=-1:
                    if mid>=gap:
                        return mid-gap
                    else:
                        return idx+mid
                else:
                    return mid
        return -1
全部评论

相关推荐

07-11 15:12
门头沟学院 Java
别人在上班,我就在工位上看看视频啥的,这正常吗?
程序员小白条:实习就是摸鱼,只是公司指标,把你进来了,可能那时候客户很多,但等你进来的时候,已经是淡季了,根本没多少需求,或者说根本不适合实习生去完成,因此你就每天干坐着就行,可能1,2个月都没需求
实习生的蛐蛐区
点赞 评论 收藏
分享
07-07 14:30
复旦大学 Java
遇到这种人我也不知道说啥了
无能的丈夫:但我觉得这个hr语气没什么问题啊(没有恶意
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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