LeetCode刷题【Array】 Search in Rotated Sorted Array II
2017-03-20 15:47
281 查看
题目:
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.,
Write a function to determine if a given target is in the array.
The array may contain duplicates.
解决方法一:主要是考虑到重复数情况 如[1,1,1,1,2,1]
public class Solution {
public boolean search(int[] nums, int target) {
int mid =0;
int start =0;
int end = nums.length-1;
boolean ret = false;
while(start<=end){
mid =(start+end)/2;
if(target==nums[mid]){
ret = true;
break;
}
if(start==end) break;
if(nums[mid]>nums[end]){
end = target>=nums[start]&&target<nums[mid]? mid-1:end;
start = target>=nums[start]&&target<nums[mid]?start:mid+1;
}
else if(nums[mid]<nums[start]){
start = target<=nums[end]&&target>nums[mid]? mid+1:start;
end = target<=nums[end]&&target>nums[mid]?end:mid-1;
}else if(nums[mid]==nums[end]&&nums[mid]==nums[start]){
start++;
end--;
} else{
start = target<=nums[mid]? start:mid+1;
end = target<=nums[mid]? mid-1:end;
}
}
return ret;
}
}
参考:
【1】https://leetcode.com/
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.
解决方法一:主要是考虑到重复数情况 如[1,1,1,1,2,1]
public class Solution {
public boolean search(int[] nums, int target) {
int mid =0;
int start =0;
int end = nums.length-1;
boolean ret = false;
while(start<=end){
mid =(start+end)/2;
if(target==nums[mid]){
ret = true;
break;
}
if(start==end) break;
if(nums[mid]>nums[end]){
end = target>=nums[start]&&target<nums[mid]? mid-1:end;
start = target>=nums[start]&&target<nums[mid]?start:mid+1;
}
else if(nums[mid]<nums[start]){
start = target<=nums[end]&&target>nums[mid]? mid+1:start;
end = target<=nums[end]&&target>nums[mid]?end:mid-1;
}else if(nums[mid]==nums[end]&&nums[mid]==nums[start]){
start++;
end--;
} else{
start = target<=nums[mid]? start:mid+1;
end = target<=nums[mid]? mid-1:end;
}
}
return ret;
}
}
参考:
【1】https://leetcode.com/
相关文章推荐
- [LeetCode] Search in Rotated Sorted Array II
- 【Leetcode】Search in Rotated Sorted Array II
- leetcode_Search in Rotated Sorted Array II
- [leetcode] Search in Rotated Sorted Array II
- Search in Rotated Sorted Array II [LeetCode]
- LeetCode-Search in Rotated Sorted Array II
- leetcode 98: Search in Rotated Sorted Array II
- LeetCode Online Judge 题目C# 练习 - Search in Rotated Sorted Array II
- 【leetcode】Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array II 解题报告
- [Leetcode] Search in Rotated Sorted Array II
- LeetCode-Search in Rotated Sorted Array II
- leetcode Search in Rotated Sorted Array II
- LeetCode Search in Rotated Sorted Array II
- LeetCode - Search in Rotated Sorted Array II
- LeetCode : Search in Rotated Sorted Array II
- 【Leetcode】Search in Rotated Sorted Array II
- leetcode - Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array II
- [LeetCode]Search in Rotated Sorted Array II