leetcode 81. Search in Rotated Sorted Array II-旋转数组|二分查找

来源:互联网 发布:java 日志监控框架 编辑:程序博客网 时间:2024/05/16 14:47

原题链接:81. Search in Rotated Sorted Array II

【思路-Java、Python】 二分查找实现

本题采用二分法实现,但是比较挠头的是边界问题,而且元素有重复,相比纯粹递增的数组难度要大得多,要解决这个问题,首先要对所有可能情况进行分类,然后对每种可能的类别进行相应的处理,本题的类别可以表示为下面的趋势图


暂且不考虑nums[mid] = nums[left]的情况,本题大致可以简化为上图两种情况,可能的情况划分出来,那么解决本题就比较容易了:

当 nums[mid] = nums[left] 时,这时由于很难判断 target 会落在哪,那么只能采取 left++

当 nums[mid] > nums[left] 时,这时可以分为两种情况,判断左半部比较简单

当 nums[mid] < nums[left] 时,这时可以分为两种情况,判断右半部比较简单

public class Solution {    public boolean search(int[] nums, int target) {        int left = 0, right = nums.length - 1;        while (left <= right) {            int mid = (left + right) / 2;            if (target == nums[mid]) return true;            if (nums[mid] == nums[left]) left++;            else if (nums[mid] > nums[left]) {                if (nums[left] <= target && nums[mid] > target) right = mid - 1;                else left = mid + 1;            } else {                if (nums[mid] < target && target <= nums[right]) left = mid + 1;                else right = mid - 1;            }        }        return false;    }}
271 / 271 test cases passed. Runtime: 1 ms  Your runtime beats 23.71% of javasubmissions.

class Solution(object):    def search(self, nums, target):        """        :type nums: List[int]        :type target: int        :rtype: bool        """        left, right = 0, len(nums) - 1        while left <= right :            mid = (left+right) / 2            if nums[mid] == target : return True            if nums[mid] == nums[left] : left += 1            elif nums[mid] > nums[left] :                if nums[mid] > target and nums[left] <= target :                    right = mid - 1                else : left = mid + 1            else :                if nums[mid] < target and nums[right] >= target :                    left = mid + 1                else : right = mid - 1        return False
271 / 271 test cases passed. Runtime: 56 ms  Your runtime beats 57.35% of pythonsubmissions.


1 0
原创粉丝点击