81. Search in Rotated Sorted Array II
题目:
Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
Write a function to determine if a given target is in the array.
链接: http://leetcode.com/problems/search-in-rotated-sorted-array-ii/
题解:
平移过的数组查找数字。依然是使用二分查找,不过有了duplicate所以判断的条件更多更复杂。
Time Complexity - O(n), Space Complexity - O(1)。
public class Solution {public boolean search(int[] nums, int target) {if(nums == null || nums.length == 0)return false;int lo = 0, hi = nums.length - 1;while(lo <= hi) {int mid = lo + (hi - lo) / 2;if(target < nums[mid]) {if(nums[mid] < nums[hi]) { // right half sortedhi = mid - 1;} else if(nums[mid] > nums[hi]) { //left half sorted if(target < nums[lo]) {lo = mid + 1; //target at right half} else {hi = mid - 1; //target at left half }} else { // nums[mid] == nums[hi], cannot tellhi--;}} else if (target > nums[mid]) {if(nums[lo] < nums[mid]) { //left half sortedlo = mid + 1;} else if(nums[lo] > nums[mid]) { // right half sortedif(target > nums[hi])hi = mid - 1; //target at left halfelselo = mid + 1; //target at right half} else { // nums[mid] == nums[hi], cannot telllo++;}} else // nums[mid] == target, foundreturn true;}return false;} }
二刷:
还是使用二分法来完成搜索。这里不同的地方是,假如nums[mid]等于一个端点的时候,假如是左端点,那么我们不能判断出哪一边是排序的,只能lo++。否则,我们可以通过比较判断出左边或者右边是排序的,从而使用二分查找。
Java:
Time Complextiy - O(n), Space Complexity - O(1)
public class Solution {public boolean search(int[] nums, int target) {if (nums == null || nums.length == 0) {return false;}int lo = 0, hi = nums.length - 1;while (lo <= hi) {int mid = lo + (hi - lo) / 2;if (nums[mid] == target) {return true;}if (nums[lo] < nums[mid]) {if (nums[lo] <= target && target < nums[mid]) {hi = mid - 1; } else {lo = mid + 1;}} else if (nums[lo] > nums[mid]) {if (nums[mid] < target && target <= nums[hi]) {lo = mid + 1;} else {hi = mid - 1;}} else {lo++;}}return false;} }
2/6/2016
题外话:
国内今天已经是29号,除夕了。现在我一个人在美帝的家里,中午刚上完课,下午也参加了一个tech talk。依然是平实的一天,就是觉得有点蛋疼, 该春节回家陪陪爸妈的。 我打算明天给自己放假一天,好好看会电视,然后去H-Mart买桶炸鸡吃掉。
三刷:
其实29号那天并没有吃炸鸡。
注意比较的都是nums[lo]和nums[mid]。我们在比较晚nums[lo]和nums[mid]之后, 再假定一边有序,一边无序的情况。假如nums[lo] == nums[lo],我们不能二分,只能增加lo来继续下一次判断。
Java:
public class Solution {public boolean search(int[] nums, int target) {if (nums == null || nums.length == 0) return false;int lo = 0, hi = nums.length - 1;while (lo <= hi) {int mid = lo + (hi - lo) / 2;if (nums[mid] == target) return true;if (nums[lo] < nums[mid]) {if (target >= nums[lo] && target < nums[mid]) hi = mid - 1;else lo = mid + 1;} else if (nums[lo] > nums[mid]) {if (target > nums[mid] && target <= nums[hi]) lo = mid + 1;else hi = mid - 1;} else {lo++;}}return false;} }
Reference:
https://leetcode.com/discuss/223/when-there-are-duplicates-the-worst-case-is-could-we-do-better
81. Search in Rotated Sorted Array II相关推荐
- leetcode 81 Search in Rotated Sorted Array II ----- java
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. ( ...
- 【leetcode】Search in Rotated Sorted Array II(middle)☆
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- LeetCode Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would t ...
- [算法题] Search in Rotated Sorted Array ii
题目内容 题目来源:LeetCode Suppose an array sorted in ascending order is rotated at some pivot unknown to yo ...
- LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- LeetCode Online Judge 题目C# 练习 - Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- leetcode - Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
最新文章
- Linux普通用户启动tomcat
- 2021年值得关注的人工智能与机器学习的五大趋势
- 【TensorFlow系列】【五】利用inception v3 pb模型文件做预测
- 微软亚研提出VL-BERT:通用的视觉-语言预训练模型
- 同步锁ReentrantLock
- halcon中面到面的距离_halcon学习笔记——(8)由标定板得到测量平面位姿-阿里云开发者社区...
- mysql源码目录在哪_Mysql源码学习——源码目录结构
- 查看nginx进程_nginx的进程模型与配置
- c语言输入一串数字存入数组_在Excel中快速输入,竟是输入一串数字?
- MongoDB复制集搭建主服务器模拟切换
- Linux 防火墙配置
- java 链表插入排序,insertion Sort List (链表的插入排序) leecode java
- 卸载oracle11g全部,完全卸载oracle11g步骤:
- 浙大开源lidar_imu_calib源码安装过程
- 黑客是怎样入侵你的网站的
- 认识CleanMyMac 3破解版的危害
- Pyramidal Feature Shrinking for Salient Object Detection
- iOS 地图制作讲义
- 20221017在线识鸟
- Redis--变慢的原因及排查方法--系统方面