当前位置:网站首页>【剑指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;
}
};
边栏推荐
- Usage of countdownlatch in multithreaded environment
- Pictures to be delivered
- Leetcode 74. search two-dimensional matrix bisection /medium
- Network device hard core technology insider router Chapter 15 from deer by device to router (Part 2)
- Simple mathematical knowledge related to 3D
- Problem solving in magic tower project
- 《剑指Offer》剪绳子
- Network equipment hard core technology insider router Chapter 5 tompkinson roaming the network world (Part 1)
- Comparison of advantages and disadvantages between instrument amplifier and operational amplifier
- Introduction of the connecting circuit between ad7606 and stm32
猜你喜欢

generic paradigm

Digital storage oscilloscope based on FIFO idt7202-12
Principle of MOS tube to prevent reverse connection of power supply

Spark 3.0 DPP实现逻辑

Spark 任务Task调度异常分析

Adaptation verification new occupation is coming! Huayun data participated in the preparation of the national vocational skill standard for information system adaptation verifiers

Unity性能优化------渲染优化(GPU)之LOD(Level of detail)

Four kinds of relay schemes driven by single chip microcomputer

Spark Filter算子在Parquet文件上的下推
仪表放大器和运算放大器优缺点对比
随机推荐
《剑指Offer》剪绳子
What is the breakthrough point of digital transformation in the electronic manufacturing industry? Lean manufacturing is the key
TCC
Selenium reports an error: session not created: this version of chromedriver only supports chrome version 81
《剑指Offer》两个链表的第一个公共结点
Leetcode-1737- minimum number of characters to change if one of the three conditions is met
Spark 任务Task调度异常分析
With just two modifications, apple gave styleganv2 3D generation capabilities
Pictures to be delivered
Leetcode 244 week competition - post competition supplementary question solution [broccoli players]
Unity最简洁的对象池实现
$router.back(-1)
lua学习笔记
STM32F10x_硬件I2C读写EEPROM(标准外设库版本)
HaoChen CAD building 2022 software installation package download and installation tutorial
Leetcode 74. search two-dimensional matrix bisection /medium
Network equipment hard core technology insider router Chapter 4 Jia Baoyu sleepwalking in Taixu Fantasy (Part 2)
《剑指Offer》 链表反转
微信公众平台开发概述
《剑指Offer》数组中的逆序对