博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
No.221 - LeetCode[81] Search in Rotated Sorted Array II - 有重复元素单调数组截断后的二分
阅读量:4057 次
发布时间:2019-05-25

本文共 1277 字,大约阅读时间需要 4 分钟。

核心思想:

1,首先判断是否为截断数组,因为区间划分上有很大不同。
2,判断mid元素是否贡献价值,比如严格大于L,或严格小于R
3,以上条件都不满足,则抛给下一层递归。

/* * @lc app=leetcode id=81 lang=cpp * * [81] Search in Rotated Sorted Array II */// @lc code=startclass Solution {
public: bool search(vector
& nums, int target) {
int N = nums.size(); if(N == 0) return false; return bisearch(nums,0,N,target); } bool bisearch(vector
& nums, int L, int R, int target){
if(L+1 >= R){
if(nums[L] == target) return true; return false; } int mid = (L+R)/2; if(nums[mid] == target) return true; // 单调 if(nums[L] < nums[R-1]){
if(nums[mid] <= target) return bisearch(nums,mid,R,target); return bisearch(nums,L,mid,target); } // 有截断 if(nums[mid] > nums[L]){
if(target >= nums[mid] || target <= nums[R-1]) return bisearch(nums,mid,R,target); return bisearch(nums,L,mid,target); } if(nums[mid] < nums[R-1]){
if(target < nums[mid] || target >= nums[L]) return bisearch(nums,L,mid,target); return bisearch(nums,mid,R,target); } return bisearch(nums,L,mid,target) || bisearch(nums,mid,R,target); }};// @lc code=end

转载地址:http://oagci.baihongyu.com/

你可能感兴趣的文章
来给毕设加点鸡汤
查看>>
第22课:Greenplum 的执行计划
查看>>
第21课:聚集与分组的执行说明
查看>>
第20课:连接路径的执行说明
查看>>
第19课:扫描计划路径的执行
查看>>
第18课:连接代价和 Non-SPJ 代价
查看>>
第17课:扫描代价计算
查看>>
第16课:选择最优执行计划
查看>>
第15课:参数化路径
查看>>
第14课:选择率
查看>>
第13课:表达式提取
查看>>
第12课:统计信息
查看>>
第11课:逻辑优化汇总
查看>>
第10课:表达式的规范化
查看>>
第09课:等价推理
查看>>
第08课:消除外连接
查看>>
第07课:子查询提升
查看>>
第06课:子连接提升
查看>>
第05课:连接顺序交换规则
查看>>
第04课:谓词下推
查看>>