Leetcode 81 Search in Rotated Sorted Array II
2018-01-26 16:57
337 查看
Leetcode 81 Search in Rotated Sorted Array II
题目来源:https://leetcode.com/problems/search-in-rotated-sorted-array-ii/description/Follow up for “Search in Rotated Sorted Array”:
What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e.,
0 1 2 4 5 6 7might become
4 5 6 7 0 1 2).
Write a function to determine if a given target is in the array.
The array may contain duplicates.
题目分析:本题与 Search in Rotated Sorted Array唯一的区别是数组中元素可以重复,但是因为这个条件,会出现一些比较复杂的情况,影响算法的时间复杂度,原来我们依靠中间元素和边缘元素的大小关系,来判断哪些部分仍然是有序的,现在因为重复的出现,如果我们遇到中间和边缘相等的情况,我们就丢失了哪边有序的信息,因为哪边都有可能是有序的结果,不知道往哪边走。解决的办法只能是对边缘移动一步,直到边缘和中间不在相等或者相遇.
举例:假如原数组为1111115,翻转后
1151111.left=0,mid=3,target=5,A[left] == A[mid]为true,有两种可能性:
(1)A[left]到A[right]之间全部都是1
(2)A[left]到A[right]之间存在不同的数字,可能包括target,无法确定属于那种情况。
若翻后数组为11111111...115.,或者为全1,有最坏的时间复杂度O(n);
public boolean search(int[] nums, int target) { int len=nums.length; int left=0; int right=len-1; while(left<=right){ int mid=(left+right)/2; if(nums[mid]==target) return true; if(nums[mid]<nums[left]){ if(nums[mid]<target&&nums[right]>=target){ left=mid+1; } else{ right=mid-1; } } else if(nums[mid]>nums[left]){ if(nums[mid]>target&&nums[left]<=target) right=mid-1; else{ left=mid+1; } } else{ left++; } } return false; }
相关文章推荐
- 【LeetCode】81. Search in Rotated Sorted Array II (2 solutions)
- Leetcode 81. Search in Rotated Sorted Array II
- LeetCode(33)(81) Search in Rotated Sorted Array I II
- [leetcode] 81. Search in Rotated Sorted Array II
- Leetcode: 81. Search in Rotated Sorted Array II
- LeetCode81 Search in Rotated Sorted Array II
- leetcode 81. Search in Rotated Sorted Array II
- LeetCode --- 81. Search in Rotated Sorted Array II
- leetcode || 81、Search in Rotated Sorted Array II
- 【Leetcode】81. Search in Rotated Sorted Array II
- leetcode 81 : Search in Rotated Sorted Array II
- [Leetcode]33(81). Search in Rotated Sorted Array I, II
- [LeetCode] 81. Search in Rotated Sorted Array II
- 【leetcode】81. Search in Rotated Sorted Array II【java】
- [leetcode]81. Search in Rotated Sorted Array II(Java)
- Leetcode 81. Search in Rotated Sorted Array II
- Leetcode 81. Search in Rotated Sorted Array II 旋转数组查询2 解题报告
- LeetCode 81. Search in Rotated Sorted Array II
- [leetcode]@python 81. Search in Rotated Sorted Array II
- LeetCode 81. Search in Rotated Sorted Array II