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);
}
}
};

最新文章

  1. win10 下oracle tns通过IP无法访问的解决办法
  2. Oracle 查看某表 被哪些表外键引用
  3. React(一)基础点
  4. 关于padding与margin的区别
  5. mysql重连,连接丢失:The last packet successfully received from the server--转载
  6. HTML的简单介绍
  7. Python OpenGL学习(1): 环境配置及错误篇
  8. windows和linux在建筑python集成开发环境IDE
  9. java 对象的初始化过程
  10. BLE空中升级 谈(一)
  11. android的Drawable详解
  12. 学习笔记之Problem Solving with Algorithms and Data Structures using Python
  13. QDoubleSpinBox浮点型数字调节框
  14. Android真机测试、乐视手机启用开发者模式
  15. Java 13 - Java 数组
  16. TF30063:没有访问xxx的权限 vs2017
  17. linux:使用apt、dpkg工具安装软件
  18. 安装VS提示系统找不到指定路径
  19. 一个纯净的webpack4+angular5脚手架
  20. Python rest-framework 中类的继承关系(as_view)

热门文章

  1. java reflect反射调用方法invoke
  2. 机器学习进阶-案例实战-答题卡识别判 1.cv2.getPerspectiveTransform(获得投射变化后的H矩阵) 2.cv2.warpPerspective(H获得变化后的图像) 3.cv2.approxPolyDP(近似轮廓) 4.cv2.threshold(二值变化) 7.cv2.countNonezeros(非零像素点个数)6.cv2.bitwise_and(与判断)
  3. vector 内存释放相关
  4. numpy笔记
  5. swarm on ubuntu
  6. Python文件夹与文件的操作(转)
  7. linux下给PHP安装拓展
  8. centOS6.6网络设置
  9. 关于jsp基本语法:第一章节
  10. ceph部署手册