81. Search in Rotated Sorted Array II (Array; Divide-and-Conquer)
2024-09-27 06:21:49
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.
思路:此时可能存在nums[start]=nums[end]或者nums[start]=nums[mid]或者nums[mid]=nums[end]。所以无法用原来方法判断是否正序、右侧rotate、或者左侧rotate。解决方法是,当碰到nums[start]=nums[end]的情况时,end-1,寻找不同元素再进行二分法。
class Solution {
public:
bool search(vector<int>& nums, int target) {
return binarySearch(nums,,nums.size()-, target);
} bool binarySearch(vector<int>& nums, int start, int end, int target){
if(start==end){
if(nums[start]==target) return true;
else return false;
} if(nums[start]==nums[end]) return binarySearch(nums,start,end-,target); //ignore duplicate int mid = start+ ((end-start)>>);
//正序
if(nums[mid]>=nums[start] && nums[mid]<nums[end]){ //mid可能=start,所以>=
if(target <= nums[mid]) return binarySearch(nums,start,mid,target); //mid肯定<end,所以至少舍弃了一个
else return binarySearch(nums,mid+,end,target); //mid+1,至少舍弃了一个
} //右侧rotate
else if(nums[mid]>=nums[start] && nums[mid]>=nums[end]){
if(target>=nums[start] && target<=nums[mid]) return binarySearch(nums,start,mid,target);
else return binarySearch(nums,mid+,end,target);
} //左侧rotate
else{
if(target>=nums[start] || target<=nums[mid]) return binarySearch(nums,start,mid,target);
else return binarySearch(nums,mid+,end,target);
}
}
};
最新文章
- win10 下oracle tns通过IP无法访问的解决办法
- Oracle 查看某表 被哪些表外键引用
- React(一)基础点
- 关于padding与margin的区别
- mysql重连,连接丢失:The last packet successfully received from the server--转载
- HTML的简单介绍
- Python OpenGL学习(1): 环境配置及错误篇
- windows和linux在建筑python集成开发环境IDE
- java 对象的初始化过程
- BLE空中升级 谈(一)
- android的Drawable详解
- 学习笔记之Problem Solving with Algorithms and Data Structures using Python
- QDoubleSpinBox浮点型数字调节框
- Android真机测试、乐视手机启用开发者模式
- Java 13 - Java 数组
- TF30063:没有访问xxx的权限 vs2017
- linux:使用apt、dpkg工具安装软件
- 安装VS提示系统找不到指定路径
- 一个纯净的webpack4+angular5脚手架
- Python rest-framework 中类的继承关系(as_view)
热门文章
- java reflect反射调用方法invoke
- 机器学习进阶-案例实战-答题卡识别判 1.cv2.getPerspectiveTransform(获得投射变化后的H矩阵) 2.cv2.warpPerspective(H获得变化后的图像) 3.cv2.approxPolyDP(近似轮廓) 4.cv2.threshold(二值变化) 7.cv2.countNonezeros(非零像素点个数)6.cv2.bitwise_and(与判断)
- vector 内存释放相关
- numpy笔记
- swarm on ubuntu
- Python文件夹与文件的操作(转)
- linux下给PHP安装拓展
- centOS6.6网络设置
- 关于jsp基本语法:第一章节
- ceph部署手册