33. Search in Rotated Sorted Array

这道题一开始看半天没有弄明白
后来恍然大悟
直接看注释
基于常规二分查找算法
重点在于 我们确定lr边界变化的时候需要考虑mid所在不同分段存在不同情况

class Solution(object):
    def search(self, nums, target):
        left, right = 0, len(nums) - 1
        while left <= right:
            mid = (left + right) // 2
            if target == nums[mid]:
                return mid
            if nums[mid] < nums[-1]: # mid 位于右段
                if nums[mid] <= target <= nums[-1]: # 为什么选择这个判断条件? 是因为这一段容易判断 二分时 我们需要根据target所在mid的左半部分还是右半部分进行lr边界的变换 我们可以发现右半段的判断更加简单 左半部分包含两种情况 比较复杂
                    left = mid + 1
                else:
                    right = mid - 1
            else: # mid 位于左段
                if nums[0] <= target <= nums[mid]: # 同理 实测 等号随便取
                    right = mid - 1
                else:
                    left = mid + 1
        return -1

还有一种解法

  • 找到反转的index
  • 运用数组的反转的二分查找
class Solution:
    def search(self, nums, target):
        left, right = 0, len(nums) - 1
        while left < right:
            mid = (left + right) // 2
            if nums[mid] > nums[right]:
                left = mid + 1
            else:
                right = mid

        index = left
        # print(index)

        # The usual binary search and accounting for rotation. 旋转数组的二分查找 需要知道旋转的多少
        left, right = 0, len(nums) - 1
        while left <= right:
            mid = (left + right) // 2
            realmid = (mid + index) % len(nums)
            if nums[realmid] == target:
                return realmid
            if nums[realmid] < target:
                left = mid + 1
            else:
                right = mid - 1
        return -1
全部评论

相关推荐

点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
07-03 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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