【Leet Code】81. Search in Rotated Sorted Array II---Medium
2015-11-17 10:29
363 查看
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.
思路:
相比于题目“Search in Rotated Sorted Array",该题目中允许重复数值的出现。举个例子array:[3, 1, 1], target:3. 如果按照原题的方法查找target值,详细执行具体步骤:
mid= 1:nums[mid]<nums[end]不成立,进入else,此时按照原题目的分析应该满足数组左边一定是有序的,但是由于重复元素的存在,左边不满足一定有序的条件。所以会出错。所以要对nums[mid]==nums[end]相等的情况进行判断。
代码实现:
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.
思路:
相比于题目“Search in Rotated Sorted Array",该题目中允许重复数值的出现。举个例子array:[3, 1, 1], target:3. 如果按照原题的方法查找target值,详细执行具体步骤:
mid= 1:nums[mid]<nums[end]不成立,进入else,此时按照原题目的分析应该满足数组左边一定是有序的,但是由于重复元素的存在,左边不满足一定有序的条件。所以会出错。所以要对nums[mid]==nums[end]相等的情况进行判断。
代码实现:
class Solution { public: bool search(vector<int>& nums, int target) { if(nums.size() < 1) return false; int beg = 0, end = nums.size() - 1; while(beg <= end) { int mid = (beg + end) / 2; if(target == nums[mid]) return true; if(nums[mid] < nums[end]) { if(target > nums[mid] && target <= nums[end]) beg = mid + 1; else end = mid - 1; } else if(nums[mid] > nums[end]) { if(target < nums[mid] && target >= nums[beg]) end = mid - 1; else beg = mid + 1; } else --end; } return false; } };
相关文章推荐
- asterisk 队列策略
- 虚拟机win7 自动休眠
- jms--activemq知识点总结
- powerdesigner mysql odbc驱动
- 程序员面试中应该向企业提的五大问题
- python自动化框架nose
- 【Java并发编程】之二十:并发新特性—Lock锁和条件变量(含代码)
- 11月14日全球域名商保有量及市场份额排行榜TOP16
- ArcGIS中文件共享锁定数据溢出
- 《iOS7 by Tutorials》系列:iOS7的设计精髓(下)
- (三)洞悉linux下的Netfilter&iptables:内核中的rule,match和target
- 移动端报表如何获取当前地理位置
- 详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()
- 程序中内存从哪里来
- 加载动画
- Android adjustResize 在5.0与4.0上结果不同解决办法
- ViewPager添加圆点indicator,及ViewPager的循环滚动、自动滚动
- Xshell生成密钥key(用于Linux 免密码登录)
- 系统原理分析架构-六-负载均衡(定义及介绍及LVS/Nginx/Haproxy比较)
- Cocos2D:塔防游戏制作之旅(十七)