081 Search in Rotated Sorted Array II 搜索旋转排序数组 ||
这是 “搜索旋转排序数组”问题的跟进:
如果数组元素允许重复,怎么办?
这会影响到程序的时间复杂度吗?会有怎样的影响,为什么?
假设按照升序排序的数组在预先未知的某个关键点上旋转。
(例如, 0 1 2 4 5 6 7 可能变成 4 5 6 7 0 1 2)。
编写一个函数来判断给定的目标是否在数组中。
该数组可能包含重复项。
详见:https://leetcode.com/problems/search-in-rotated-sorted-array-ii/description/
Java实现:
class Solution { public boolean search(int[] nums, int target) { int n=nums.length; if(n==0||nums==null){ return false; } int left=0; int right=n-1; while(left<=right){ int mid=(left+right)>>1; if(nums[mid]==target){ return true; }else if(nums[left]==nums[mid]&&nums[mid]==nums[right]){ ++left; --right; }else if(nums[left]<=nums[mid]){ if(nums[left]<=target&&target<nums[mid]){ right=mid-1; }else{ left=mid+1; } }else{ if(target>nums[mid]&&target<=nums[right]){ left=mid+1; }else{ right=mid-1; } } } return false; } }