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

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

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
全部评论

相关推荐

Twilight_m...:经典我朋友XXXX起手,这是那种经典的不知道目前行情搁那儿胡编乱造瞎指导的中年人,不用理这种**
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
昨天 11:27
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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