Search in rotated array two
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 7 might 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.
Thoughts:
1.按照写rotated sorteg array时的思路,我写这个问题的时候,在重新设置low和high的时候,跳过了和middle一样的重复部分。另外要注意的一个点就是当nums[low]和nums[high]相等的时候我们要重新设置low和high
public boolean search(int[] nums, int target){
int low = 0;
int high = nums.length-1;
if(nums[high] == nums[low]&&nums.length>2){
for(int i = high-1;i>=low;i--){
if(nums[i] == nums[high]){
high--;
}
}
}
while(low <= high){
int middle = (low+high)/2;
if(nums[middle] == target){
return true;
}else if(nums[middle] >=nums[low]){
if(target>=nums[low] && target<nums[middle]){
for(int i = middle-1;i>=low;i--){
if(nums[i] == nums[middle]){
middle--;
}else{
break;
}
}
high = middle -1;
}else{
for(int i = middle+1;i<=high;i++){
if(nums[i] == nums[middle]){
middle++;
}else{
break;
}
}
low = middle + 1;
}
}else{
if(target>nums[middle]&&target<=nums[high]){
for(int i =middle+1;i<=high;i++){
if(nums[i] == nums[middle]){
middle++;
}else{
break;
}
}
low = middle +1;
}else{
for(int i = middle-1;i>=low;i--){
if(nums[i] == nums[middle]){
middle--;
}else{
break;
}
}
high = middle - 1;
}
}
}
return false;
}
2.前面的解法,思路是清晰的过程是麻烦的,需要加很多的判断条件,为了避免这个问题,我们不讲middle和low进行比较,而是让它和high进行比较,这样就能够避免之前的nums[low]和nums[high]相等的情况,所带来的麻烦。
public boolean search2(int[] nums, int target){
if(nums.length == 0){
return false;
}
int low = 0;
int high = nums.length - 1;
while(low < high){
int middle = (low +high)/2;
if(nums[middle] == target){
return true;
}else{
if(nums[middle] < nums[high]){
if(target > nums[middle] && target <= nums[high]){
low = middle + 1;
}else{
high = middle - 1;
}
}else if(nums[middle] > nums[high]){
if(target >= nums[low] & target < nums[middle]){
high = middle -1;
}else{
low = middle +1;
}
}else{
high--;
}
}
}
return nums[low]==target;
}
Search in rotated array two的更多相关文章
- [LeetCode] Search in Rotated Array II
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...
- LeetCode(81) Search in Rotated Array II
题目 Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would t ...
- [LeetCode] Search in Rotated Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...
- 【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 I II
LeetCode:Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to y ...
- [LeetCode] 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 在旋转有序数组中搜索
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...
- 【leetcode】Search in Rotated Sorted Array II
Search in Rotated Sorted Array II Follow up for "Search in Rotated Sorted Array":What if d ...
- 【leetcode】Search in Rotated Sorted Array
Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...
随机推荐
- 强力推荐各位攻城狮查看,收藏IT职业技能图谱(全套13张)
汇集整理泛 IT 技术领域(云计算,大数据,运维,安全,开发语言,智能硬件等)学习技能图谱,帮助程序员梳理知识框架结构,并尝试提供路径指导和精华资源,方便技术人学习成长. 运维工程师必备技能 程序开发 ...
- input驱动12种事件类型Event types的含义
linux2.6 input subsystem中部分相关结构体的分析 最近在做linux2.6的键盘驱动程序的工作,接触到了input subsystem这一概念,现把我对其中相关结构体的理解写出 ...
- PLSQL_R12 MOAC多组织的四个应用(案例)
一.摘要 R12 Form 或者其他二次开发时,很多情况下会涉及R12 MOAC多组织开发,以下介绍了4个常见的应用,如有遗漏还请学友继续补充 1. 开发时打开Form自动弹出组织选择实现方式(增加C ...
- 安卓笔记-- popupwindow back键不消失的问题
// 可能是一个bug ,如果不设置背景,触摸焦点外和back键都不会消失,需如下设置,并不会影响你的背景 popupWindow.setBackgroundDrawable(new ...
- Orientation Auto Rotation旋转屏幕crash问题(Unity3D开发之十四)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/44133127 ...
- Gathering Initial Troubleshooting Information for Analysis of ORA-4031 Errors on the Shared Pool
In this Document Purpose Troubleshooting Steps References APPLIES TO: Oracle Database - Enterp ...
- Glog 和 Log4cxx 的对比
转自:http://monkeycn.iteye.com/blog/1021703 #1 Log4cxx有比较完整的配置文档方式,xml和java配置档:GLog只能通过启动程序的时候的输入参数来配置 ...
- 应邀ITGeGe在线教育社区嵌入式基础开发讲师
最近,被一家IT在线公司邀请去做嵌入式基础课程的讲师,我感觉非常荣幸,虽然我还是菜鸟一个,难得有这样的企业会看得起我,这也是对我的一个磨练吧,可以培养我继续不断学习技术的动力,同时还能将技术通过自身的 ...
- 配置SharePoint环境加域提示网络名不可用[已解决]
今天去客户给机器做备机,带着装好SharePoint07的机器跑过去了,先做个LAN,然后连上机器开始工作:首先当然是改ip地址,然后都改好了开始加域,加了好几次,发现都不行,提示"指定的网 ...
- linux下64位汇编的系统调用(2)
知道了syscall调用号之后还不算完,还要搞清楚2件事: 1 每种调用号需要传递哪些参数: 2 调用如何传递参数以及结果如何返回: 第一个问题的答案是: 在linux系统中某个程序执行时进行的系统调 ...