33. Search in Rotated Sorted Array&81. Search in Rotated Sorted Array II
来源:互联网 发布:宁夏网络干部培训 编辑:程序博客网 时间:2024/05/21 02:34
Suppose a sorted array 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
).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
二分检索,但是判断条件多了很多= =
class Solution {public: int search(vector<int>& nums, int target) { int left=0,right=nums.size()-1,mid; while(left<=right){ mid=(left+right)/2;//原来在这里每次都要int mid=(left+right)/2,事实证明这样很慢,还是在外面定义好拿进来用比较快 if(nums[mid]==target) return mid; if(nums[mid]>nums[right]){//mid在左半部分,即mid左边是有序的 if(target>=nums[left]&&target<nums[mid]) right=mid-1;//若target在左边则向左边找 else left=mid+1; } //不太明白的是每一次left=mid+1和right=mid-1,没有+1,-1不可以吗? else if(nums[mid]<nums[left]){//mid在右半部分,即mid右边是有序的 if(target>nums[mid]&&target<=nums[right]) left=mid+1;//若target在右边则向左边找 else right=mid-1; } else {//没有rotate if(target>nums[mid]) left=mid+1; else right=mid-1; } } return -1; }};
81就是加上duplicates的情况
在上一题的基础上加上判断nums[left]==nums[mid]==nums[right]的条件即可。
因为有duplictaes的情况只会影响到当nums[left]==nums[mid]时,前半部分不是有序的,(i.e. 3123333)而出现这种情况时,我们可以得到保证nums[mid]==nums[right]
因此判断nums[left]==nums[mid]&&nums[right]==nums[mid],直到left和right更新到不符合条件就可以了。
class Solution {public: bool search(vector<int>& nums, int target) { int left=0,right=nums.size()-1,mid; while(left<=right){ mid=(left+right)/2; if(nums[mid]==target) return true; if(nums[left]==nums[mid]&&nums[right]==nums[mid]) {left++;right--;} else if(nums[mid]>nums[right]){ if(target>=nums[left]&&target<nums[mid]) right=mid-1; else left=mid+1; } else if(nums[mid]<nums[left]){ if(target>nums[mid]&&target<=nums[right]) left=mid+1; else right=mid-1; } else { if(target>nums[mid]) left=mid+1; else right=mid-1; } } return false; }};
0 0
- 81.Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- hibernate对象的三种状态
- Android 关于线程 杀不死 的 开机启动 浮动框
- 如何实现多行文字垂直居中
- 第十四周项目2-二叉树排序树中查找的路径
- C语言非递归实现二叉树的先序、中序、后序、层序遍历
- 33. Search in Rotated Sorted Array&81. Search in Rotated Sorted Array II
- java微信 客服接口-发消息 中文乱码
- PopupWindow和AlertDialog区别
- 第十四周项目2-二叉树排序树中查找的路径
- HTML5清除默认格式代码
- hashset实现原理
- 十一周项目一 验证算法二查数算法的验证
- 解决Spring AOP 事务 配置 失效原因--业务类里抛出的异常不满足事务拦截器里定义的异常
- 第5章 Spring Boot基础