LeetCode——81. 搜索旋转排序数组 II

    技术2025-02-05  4

    文章目录

    81. 搜索旋转排序数组 II题目思路代码

    81. 搜索旋转排序数组 II

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目

    假设按照升序排序的数组在预先未知的某个点上进行了旋转。

    ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。

    编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。

    示例 1:

    输入: nums = [2,5,6,0,0,1,2], target = 0 输出: true 示例 2:

    输入: nums = [2,5,6,0,0,1,2], target = 3 输出: false 进阶:

    这是 搜索旋转排序数组 的延伸题目,本题中的 nums 可能包含重复元素。 这会影响到程序的时间复杂度吗?会有怎样的影响,为什么?

    思路

    和第33题搜索旋转排序数组思路一致,额外注意点有: 1、需要消除重复元素影响,遇到重复元素先略过继续循环continue 2、返回的是true1和false,不是下标

    代码

    class Solution { public boolean search(int[] nums, int target) { int len = nums.length; if(len == 0){//特殊边界情况 return false; } int left = 0, right = len - 1; while(left <= right){ int mid = left + (right - left) / 2; if(nums[mid] == target){ return true; } if (nums[left] == nums[mid]) {//消除重复元素影响 left++; continue; } if (nums[right] == nums[mid]) {//消除重复元素影响 right--; continue; } if(nums[mid] < nums[len - 1]){//右边有序nums[mid] < target && nums[end] >= target if(nums[mid] < target && nums[len -1] >= target){ left = mid + 1; } else{ right = mid - 1; } } else{//左边有序 if(nums[mid] > target && nums[left] <= target){ right = mid - 1; } else{ left = mid + 1; } } } return false; } }
    Processed: 0.008, SQL: 9