leetcode No81. Search in Rotated Sorted Array II
2016-08-06 20:59
405 查看
Question:
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.
在旋转数组中找target,与I不同的是,这次存在重复元素
Algorithm:
先找顺序,再找target有三种情况:(至少有一半是顺序的)
1、nums[mid]==target
2、nums[l]<nums[mid](左半是顺序,如果target在范围内,二分,如果不在,则在右半找顺序,即重复1,2,3)
3、nums[l]>nums[mid](右半是顺序,如果target在范围内,二分,如果不在,则在左半找顺序,则重复1,2,3)
4、nums[l]>nums[mid](不确定左边是否为重复,只能往前一步 )
Accepted Code:
class Solution { public: bool search(vector<int>& nums, int target) { int res=-1; int l=0; int r=nums.size()-1; int mid=0; while(l<=r) { int mid=l+(r-l)/2; if(nums[mid]==target) return true; else if(nums[l]<nums[mid]) //mid左边是顺序 { if(nums[l]<=target&&nums[mid-1]>=target) r=mid-1; else l=mid+1; } else if(nums[l]>nums[mid]) //mid右边是顺序 { if(nums[mid+1]<=target&&nums[r]>=target) l=mid+1; else r=mid-1; } else //不确定左边是否为重复,只能往前一步 l++; } if(nums[mid]==target) return true; else return false; } };
相关文章推荐
- Windows平台下Oracle实例启动过程中日志输出
- 不敢死队问题
- 常用的mysql复制参数
- 插件开发之360 DroidPlugin源码分析(三)Binder代理
- 什么是死锁?产生的条件?如何避免?
- C++ Primer 第10章 知识点回顾
- Matrix.preTranslate和 postTranslate
- hdu Keep In Touch
- 插件开发之360 DroidPlugin源码分析(三)Binder代理
- 跟我一起写Makefile(1)--- 概述
- android开发:正确的开发一个Splash页面
- 安装Nvidia k80驱动步骤
- Ubuntu Git安装
- Javascript模块化编程(三):require.js的用法(转)
- ArrayList与TreeList集合统计随机数出现次数
- 单链表中重复元素的删除
- 数据结构实验之栈七:出栈序列判定
- 数据库:Mongodb
- (十)、数组
- linux学习第三篇:yum安装lrzsz