81. Search in Rotated Sorted Array II (JAVA)
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., [0,0,1,2,2,5,6] might become [2,5,6,0,0,1,2]).
You are given a target value to search. If found in the array return true, otherwise return false.
Example 1:
Input: nums = [2,5,6,0,0,1,2], target = 0
Output: true
Example 2:
Input: nums = [2,5,6,0,0,1,2], target = 3
Output: false
Follow up:
- This is a follow up problem to Search in Rotated Sorted Array, where
numsmay contain duplicates. - Would this affect the run-time complexity? How and why?
思路:因为有重复元素,所以不能通过之前的方式判断rotate的地方,需要单独考虑nums[mid] == nums[start]以及nums[mid] == nums[end]的情况,这两种情况分别通过start+1和end-1跳过重复元素。
时间复杂度:在重复元素不多的情况下,并不很影响时间复杂度;担当每次都走的nums[mid] == nums[start]以及nums[mid] == nums[end],那么时间复杂度从O(logn)增至O(n)
class Solution {
public boolean search(int[] nums, int target) {
return binarySearch(nums,target,0,nums.length-1);
}
public boolean binarySearch(int[] nums, int target, int start, int end){
if(start > end) return false;
int mid = start + ((end-start)>>1);
if(nums[mid] == target) return true;
if(nums[mid] < nums[start]){ //rotate in the left part
if(target >= nums[start] || target < nums[mid]) return binarySearch(nums, target, start, mid-1);
else return binarySearch(nums, target, mid+1, end);
}
else if(nums[mid] > nums[end]){ //rotate in the right part
if(target > nums[mid] || target <= nums[end]) return binarySearch(nums, target, mid+1, end);
else return binarySearch(nums, target, start, mid-1);
}
else if(nums[mid] == nums[start]){
return binarySearch(nums, target, start+1, end);
}
else if(nums[mid] == nums[end]){
return binarySearch(nums, target, start, end-1);
}
else{
if(target > nums[mid]) return binarySearch(nums, target, mid+1, end);
else return binarySearch(nums, target, start, mid-1);
}
}
}
81. Search in Rotated Sorted Array II (JAVA)的更多相关文章
- LeetCode 81 Search in Rotated Sorted Array II [binary search] <c++>
LeetCode 81 Search in Rotated Sorted Array II [binary search] <c++> 给出排序好的一维有重复元素的数组,随机取一个位置断开 ...
- leetcode 153. Find Minimum in Rotated Sorted Array 、154. Find Minimum in Rotated Sorted Array II 、33. Search in Rotated Sorted Array 、81. Search in Rotated Sorted Array II 、704. Binary Search
这4个题都是针对旋转的排序数组.其中153.154是在旋转的排序数组中找最小值,33.81是在旋转的排序数组中找一个固定的值.且153和33都是没有重复数值的数组,154.81都是针对各自问题的版本1 ...
- 33. Search in Rotated Sorted Array & 81. Search in Rotated Sorted Array II
33. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated at some piv ...
- 【LeetCode】81. Search in Rotated Sorted Array II (2 solutions)
Search in Rotated Sorted Array II Follow up for "Search in Rotated Sorted Array":What if d ...
- LeetCode 81. Search in Rotated Sorted Array II(在旋转有序序列中搜索之二)
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...
- [LeetCode] 81. Search in Rotated Sorted Array II 在旋转有序数组中搜索之二
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
- [LeetCode] 81. Search in Rotated Sorted Array II 在旋转有序数组中搜索 II
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...
- 81 Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...
- 【一天一道LeetCode】#81. Search in Rotated Sorted Array II
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Follow ...
随机推荐
- Tracer使用
1.选择event List可以迅速完成操作,而选择simulation就会一步一步地执行操作,但是如果都点了下方的Delete删了记录的话,所有的机器都是该整个流程执行完毕的结果.
- winform Timer控件的使用
private void button1_Click(object sender, EventArgs e){ Timer timer1 = new Timer(); timer1.Interval ...
- [Java]使用正则表达式实现分词
手工分词稍嫌麻烦,不好维护,而利用正则表达式就利索多了.Java提供了java.util.regex.Matcher,java.util.regex.Pattern类来帮助我们实现此功能. 例一:以下 ...
- DAY 3模拟赛
DAY3 钟皓曦来了! T1 网址压缩 [问题描述] 你是能看到第一题的 friends 呢. ——hja 众所周知,小葱同学擅长计算,尤其擅长计算组合数,但这个题和组合数没什么关 ...
- C++ TODO __fastcall
C++ TODO __fastcall int __fastcall init_keys2(char *a1, char *a2) { char *v2; // r6 char *v3; // r5 ...
- 微信小程序中的不同场景,不同的判断,请求的时机
本来5月1之前就想写一下一篇关于小程序不同场景下发送ajax请求的问题,但是放假的前一天,出了个大bug,就是因为我修改不同的场景下执行不同的逻辑造成的 1.首先,在小程序里,微信做了很多的缓存,我们 ...
- ControlTemplate in WPF —— ListBox
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...
- 关于Toad的Cannot load OCI DLL问题
昨天重新安装了新版本的JDK,突然发现Toad连接的时候报Cannot load OCI DLL....问题,网上查找了多种方法均不见效. 后调整系统环境变量配置,还原了之前安装的JDK版本,问题修复 ...
- docker rm & docker rmi & docker prune 的差异
docker rm & docker rmi & docker prune 的差异 docker rm : 删除一个或多个 容器 docker rmi : 删除一个或多个 镜像 do ...
- arguments对象的callee属性详解
在函数内部,有两个特殊的对象:arguments和this. argument对象有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数.请看下面这个非常经典的阶乘函 ...