题目:

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相关推荐

  1. leetcode 81 Search in Rotated Sorted Array II ----- java

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  2. [LeetCode] 81. Search in Rotated Sorted Array II

    题目: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. ( ...

  3. 【leetcode】Search in Rotated Sorted Array II(middle)☆

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  4. LeetCode Search in Rotated Sorted Array II

     Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would t ...

  5. [算法题] Search in Rotated Sorted Array ii

    题目内容 题目来源:LeetCode Suppose an array sorted in ascending order is rotated at some pivot unknown to yo ...

  6. LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  7. Search in Rotated Sorted Array II

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  8. 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 ...

  9. leetcode - Search in Rotated Sorted Array II

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

最新文章

  1. Linux普通用户启动tomcat
  2. 2021年值得关注的人工智能与机器学习的五大趋势
  3. 【TensorFlow系列】【五】利用inception v3 pb模型文件做预测
  4. 微软亚研提出VL-BERT:通用的视觉-语言预训练模型
  5. 同步锁ReentrantLock
  6. halcon中面到面的距离_halcon学习笔记——(8)由标定板得到测量平面位姿-阿里云开发者社区...
  7. mysql源码目录在哪_Mysql源码学习——源码目录结构
  8. 查看nginx进程_nginx的进程模型与配置
  9. c语言输入一串数字存入数组_在Excel中快速输入,竟是输入一串数字?
  10. MongoDB复制集搭建主服务器模拟切换
  11. Linux 防火墙配置
  12. java 链表插入排序,insertion Sort List (链表的插入排序) leecode java
  13. 卸载oracle11g全部,完全卸载oracle11g步骤:
  14. 浙大开源lidar_imu_calib源码安装过程
  15. 黑客是怎样入侵你的网站的
  16. 认识CleanMyMac 3破解版的危害
  17. Pyramidal Feature Shrinking for Salient Object Detection
  18. iOS 地图制作讲义
  19. 20221017在线识鸟
  20. Redis--变慢的原因及排查方法--系统方面

热门文章

  1. 线性表之顺序存储结构相关算法学习
  2. 钱币兑换问题 (完全背包)
  3. 小弟带你走进VUE中input最大值设置出现的问题以及黑科技解决方案
  4. Spring配置事务的五种方式
  5. 一种用javascript实现的比较兼容的回到顶部demo + 阻止事件冒泡
  6. android intent 5.1
  7. servlet乱码问题
  8. JavaEE实战班第十天
  9. 神操作:教你用Python识别恶意软件
  10. 干货收藏!一文看懂8个常用Python库从安装到应用