当前位置:网站首页>【剑指offer】面试题53-Ⅰ:在排序数组中查找数字1 —— 二分查找的三个模版
【剑指offer】面试题53-Ⅰ:在排序数组中查找数字1 —— 二分查找的三个模版
2022-07-27 14:24:00 【Jocelin47】

方法一:二分查找左右边界
参考labuladong的二分查找的三个模版,进行查找target的左右边界。
也可以找到最左边,然后线性找后面相同的数字,但是后面是O(n)的复杂度,如果后面都是相同的元素,就没有O(logn)快。
参考链接:
https://mp.weixin.qq.com/s/M1KfTfNlu4OCK8i9PSAmug
左闭右开以及左闭右闭的代码:
class Solution {
public:
int search(vector<int>& nums, int target) {
// int l =0,r=nums.size();
// while(l<r){
// int mid=(l+r)>>1;
// if(nums[mid]<target)l=mid+1;
// else r=mid;
// }
// if(l==nums.size()||nums[l]!=target) return 0;
// int left=l;
// l=0;
// r=nums.size();
// while(l<r){
// int mid=(l+r)>>1;
// if(nums[mid]>target) r=mid;
// else l=mid+1;
// }
// return l-1-left+1;
int left = getFirstTarget( 0, nums.size() - 1 , target, nums);
if( left == -1 )
return 0;
int right = getLastTarget( 0, nums.size() - 1 , target, nums);
return right - left + 1;
}
int getFirstTarget( int left, int right, int target, vector<int>& nums )
{
while(left <= right)
{
int mid = left + ( right - left ) / 2;
if( nums[mid] == target )
right = mid - 1;
else if( nums[mid] > target )
right = mid - 1;
else if( nums[mid] < target )
left = mid + 1;
}
if( left >= nums.size() || nums[left] != target )
return -1;
return left;
}
int getLastTarget( int left, int right,int target, vector<int>& nums )
{
while( left <= right )
{
int mid = ( left + right ) / 2;
if( nums[mid] == target )
left = mid + 1;
else if( nums[mid] > target )
right = mid - 1;
else if( nums[mid] < target )
left = mid + 1;
}
if( right < 0 || nums[right] != target )
return -1;
return right;
}
};
边栏推荐
- Basic usage of kotlin
- "Sword finger offer" linked list inversion
- $router.back(-1)
- 华云数据打造完善的信创人才培养体系 助力信创产业高质量发展
- 华为鸿蒙模拟器去除顶部导航栏方法
- Unity mouse controls the first person camera perspective
- JMeter recording interface automation
- Network equipment hard core technology insider router Chapter 4 Jia Baoyu sleepwalking in Taixu Fantasy (Part 2)
- 3.3-5v转换
- USB interface electromagnetic compatibility (EMC) solution
猜你喜欢

EMC design scheme of CAN bus

Leetcode-1737-满足三条件之一需改变的最少字符数

TL431-2.5v基准电压芯片几种基本用法

Leetcode 190. reverse binary bit operation /easy

3.3-5v转换

Digital storage oscilloscope based on FIFO idt7202-12

光电隔离电路设计方案(六款基于光耦、AD210AN的光电隔离电路图)

Unity performance optimization ----- occlusion culling of rendering optimization (GPU)

Method of removing top navigation bar in Huawei Hongmeng simulator

Selenium 报错:session not created: This version of ChromeDriver only supports Chrome version 81
随机推荐
《剑指Offer》两个链表的第一个公共结点
Spark RPC
《剑指Offer》 链表反转
STM32F10x_硬件I2C读写EEPROM(标准外设库版本)
Leetcode 341. flattened nested list iterator DFS, stack / medium
STL value string learning
Network equipment hard core technology insider router Chapter 14 from deer by device to router (middle)
Network equipment hard core technology insider router 19 dpdk (IV)
DevEco Studio2.1运行项目报错
3.3-5v conversion
后台返回来的是这种数据,是什么格式啊
STM32 can communication filter setting problem
光电隔离电路设计方案(六款基于光耦、AD210AN的光电隔离电路图)
Leetcode 244 week competition - post competition supplementary question solution [broccoli players]
Spark lazy list files 的实现
STM32之CAN ---CAN ID过滤器分析
Unity 鼠标控制第一人称摄像机视角
Network equipment hard core technology insider router Chapter 16 dpdk and its prequel (I)
谷粒商城配置CorsWebFilter后,报错:Resource sharing error:MultipleAllowOriginValues
Sword finger offer cut rope