二分查找 经典例题

// 返回都是 r// 区间划分为[l,mid] 和 [mid+1,r],选择此模板
int bsec1(int l, int r)
{while (l < r){int mid = (l + r)/2;//此处不加下面加if (check(mid)) r = mid;else l = mid + 1;}return r;
}// 区间划分为[l,mid-1] 和 [mid,r],选择此模板
int bsec2(int l, int r)
{while (l < r){int mid = ( l + (r + 1) ) /2;//此处加了,下面-if (check(mid)) l = mid;else r = mid - 1;}return r;
}

162 寻找峰值

class Solution {
public:int findPeakElement(vector<int>& nums) {/*模板 1*/int l = 0, r = nums.size() - 1;while (l < r) {int mid = (l + r) >> 1;if (nums[mid] > nums[mid + 1]) r = mid;else l = mid + 1;}return r;}
};

704 二分查找

模板1,注意判断找不到的情况

class Solution {
public:int search(vector<int>& nums, int target) {// 套哪个模板?// 当 nums[mid] >= target 时,r = mid// 所以第一个模板int l = 0, r = nums.size() - 1;while (l < r) {int mid  = (l + r) / 2;if (nums[mid] >= target) r = mid;else l = mid + 1;}return nums[r] != target ? -1 : r;}
};

69 x 的平方根

class Solution {
public:
// 小于等于目标值的最大值
// 假设... l = mid ==> 第二个模板int mySqrt(int x) {int l = 0, r = x;while (l < r) {long mid = ((l - r + 1) >> 1) + r;if ((long)mid * mid <= x) {l = mid;}else{r = mid - 1;}}return r;}
};

35 搜索插入位置

class Solution {
public:int searchInsert(vector<int>& nums, int target) {// >= target 的最小值// 第一个模板int n = nums.size();int l = 0;int r = n;while(l < r) {int mid = (l + r) >> 1;if (nums[mid] >= target) r = mid;else l = mid + 1;}return r;}
};

278 第一个错误版本

// The API isBadVersion is defined for you.
// bool isBadVersion(int version);class Solution {
public:int firstBadVersion(int n) {int l = 0, r = n;// if => r = mid ==> 第一个模板while (l < r) {int mid = r + ((l - r) >> 1);if (isBadVersion(mid)) r = mid;else l = mid + 1;}return r;}
};

875 爱吃香蕉 模板1

class Solution {
public:// 在某个最大值区间内最小 --> 第一个模板int minEatingSpeed(vector<int>& piles, int h) {int l = 1, r = (int)1e9;while (l < r) {int mid = ((l - r) >> 1) + r;// 可以在这个时间段内吃完if (check(mid, piles, h)) r = mid;else l = mid + 1;}return r;}// 速度设置为 x 能否在 h 小时内吃完bool check(int x, vector<int>& piles, int h) {int cnt = 0;for (auto pile : piles) {// 比如 11/5 = 2 .. 1cnt += pile / x;if (pile % x != 0) cnt++;}return cnt <= h;}
};

367 有效的完全平方数

class Solution {
public:bool isPerfectSquare(int num) {long long l = 0, r = num;while (l < r) {long long mid = r + ((l - r) >> 1);long long square = mid * mid;if (square >= num) r = mid;else l = mid + 1;}return r * r == num;}
};

744 寻找比目标字母大的最小字母

class Solution {
public:char nextGreatestLetter(vector<char>& letters, char target) {// 大于等于 最小 模板1int l = 0, r = letters.size() - 1;while (l < r) {int mid = (l + r) >> 1;if (letters[mid] > target) {r = mid;} else {l = mid + 1;}}if (letters[r] > target) return letters[r];else return letters[0];}
};

** 34 排序数组第一个和最后一个元素

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {int l = 0, r = nums.size() - 1;// 大于等于最小值模板1while (l < r) {int mid = ((l - r) >> 1) + r;if (nums[mid] >= target) r = mid;else l = mid + 1;}if (nums.empty() || nums[r] != target) return {-1, -1};int r1 = r;l = 0, r = nums.size() - 1;// 小于等于最大值模板2while (l < r) {int mid = ((l - r + 1) >> 1) + r;if (nums[mid] <= target) l = mid;else r = mid - 1;}return {r1, r};}
};

410 分割数组的最大值

class Solution {
public:int splitArray(vector<int>& nums, int k) {// 最大值最小 模板1int l = 0, r = (int)1e9;while (l < r) {int mid = (l + r) >> 1;if (check(mid, nums, k)) r = mid;else l = mid + 1;}return r;}bool check(int mid, vector<int>& nums, int k) {// 这个分法是否可分 k 份int curs = 1, cur = 0;// 初始为 1 份for (auto num : nums) {if ((cur + num) <= mid) cur += num;else {if (num > mid) return false;curs++;cur = num;}}return curs <= k;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/590178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java常见面试题:什么是抽象类?什么是接口?它们之间的区别是什么?

抽象类和接口是Java中的两种抽象类型&#xff0c;它们都可以用来定义抽象方法和属性&#xff0c;但它们之间存在一些重要的区别。 抽象类&#xff08;Abstract Class&#xff09;&#xff1a; 抽象类是一种特殊的类&#xff0c;它不能被实例化。抽象类可以包含普通属性和方法…

使用spring boot实现异常的统一返回

在这个前后端分离的时代&#xff0c;一个 统一的数据格式非常重要。本次我们实现用spring boot实现一下返回给前端数据的统一格式&#xff0c;不再出现服务器500的错误。 新建一个spring boot项目&#xff0c;并导入knife4j的依赖。 写一个controller控制器&#xff0c;用来是…

数据结构:队列(链表和数组模拟实现)

目录 1.何为队列 2.链表模拟实现 2.1 节点和队列创建 2.2 初始化队列 2.3 入队操作 2.4 出队操作 2.5 遍历队列 2.6 获取队首和队尾元素 2.7 判断队列是否为空 2.8 完整实现 3. 数组模拟实现 3.1 创建队列 3.2 入队和出队操作 3.3 遍历队列 3.4 获取队首和队尾元…

数据转换的三剑客:Pandas 中 apply、map 和 applymap 方法的应用指南

数据转换的三剑客&#xff1a;Pandas 中 apply、map 和 applymap 方法的应用指南 ​ 在 Pandas 中&#xff0c;apply、map 和 applymap 是常用的数据转换和处理方法&#xff0c;它们为数据分析和数据处理提供了灵活的功能。这些方法可以根据具体的需求选择合适的方法进行操作。…

2023结婚成家,2024借势起飞

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

今晚咱们一起来场特别的技术跨年!!

▼最近直播超级多&#xff0c;预约保你有收获 今晚跨年直播&#xff1a;《LLM在电商推荐系统的应用案例实战》 —1— 今晚咱们来场技术跨年&#xff01; LLM 大模型无疑是2023年最重磅的技术&#xff0c;逐渐在各行各业产生了越来越重要的实质影响&#xff0c;2024年的钟声今晚…

剑指offer题解合集——Week2day4

文章目录 剑指offerWeek2周四&#xff1a;数值的整数次方AC代码思路&#xff1a;部分模拟 周四&#xff1a;在O(1)时间删除链表结点AC代码思路&#xff1a;部分模拟 剑指offerWeek2 周四&#xff1a;数值的整数次方 题目链接&#xff1a;数值的整数次方 实现函数double Pow…

uni-app引入vant表单(附源码)

新建项目 下载安装vant npm i vant main.js引入 import { Form } from vant; import { Field } from vant;Vue.use(Form); Vue.use(Field);代码引入 <van-form submit"onSubmit"><van-fieldclass"rePwd"v-model"username"name"请…

我的512天创作者纪念日总结:高效、高现

文章目录 512天创作者纪念日&#xff1a;2023年的12月31日CSDN的512天消息提醒第一篇文章&#xff0c;最后一篇文章总计847篇文章&#xff0c;每月发文分布512天&#xff0c;各专栏文章统计512天&#xff0c;互动总成绩 512天创作者纪念日&#xff1a;2023年的12月31日 2023年…

LabVIEW开发滚动轴承故障诊断系统

LabVIEW开发滚动轴承故障诊断系统 在工业自动化和机械维护领域&#xff0c;滚动轴承的故障诊断是至关重要的。开发了一个基于LabVIEW的振动信号分析系统。这一系统集成了先进的信号处理技术&#xff0c;如经验模式分解&#xff08;EMD&#xff09;、Morlet小波滤波器和隐Marko…

c语言-数据类型详细介绍

目录 前言一、数据类型介绍1.1 基本内置类型1.2 类型的基本分类1.2.1 整型家族 总结 前言 本篇文章对c语言中数据类型进行详细介绍。 一、数据类型介绍 1.1 基本内置类型 类型大小char1字节short2字节int4字节long4字节long long8字节float4字节double8字节 注意&#xff1…

【LMM 004】LLaVA-RLHF:用事实增强的 RLHF 对齐大型多模态模型

论文标题&#xff1a;Aligning Large Multimodal Models with Factually Augmented RLHF 论文作者&#xff1a;Zhiqing Sun, Sheng Shen, Shengcao Cao, Haotian Liu, Chunyuan Li, Yikang Shen, Chuang Gan, Liang-Yan Gui, Yu-Xiong Wang, Yiming Yang, Kurt Keutzer, Trevor…

【Redis技术专区】「原理分析」探讨Redis6.0为何需要启用多线程

探讨Redis 6.0为何需要启用多线程 背景介绍开启多线程多线程的CPU核心配置IO多线程模式单线程处理方式多线程处理方式 为什么要开启多线程&#xff1f;充分利用多核CPU提高网络I/O效率响应现代应用需求 多线程实现启用多线程 最后总结 背景介绍 在Redis 6.0版本中&#xff0c;…

6.6 会话与输入事件(三)

三,Pointer会话 3.1 Pointer会话及其属性 指针输入会话使用SCREEN_EVENT_POINTER类型创建,通常用于控制光标的形状和位置。 指针会话的SCREEN_PROPERTY_MODE属性未使用。但是,可以使用下面的会话属性配置指针会话: SCREEN_PROPERTY_ACCELERATION表示一组六个整数,表示x…

计算机网络(6):应用层

每个应用层协议都是为了解决某一类应用问题&#xff0c;而问题的解决又往往是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。 应用层的具体内容就是规定应用进程在通信时所遵循的协议。 应用层的许多协议都是基于客户服务器方式。即使是对等通信方式&#x…

【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数

文章目录 &#x1f680;前言&#x1f680;C有何过C之处&#xff1f;&#x1f680;C中的关键字&#x1f680;命名空间✈️为什么要引入命名空间&#xff1f;✈️命名空间的定义✈️如何使用命名空间中的内容呢&#xff1f; &#x1f680;C中的输入和输出✈️C标准库的命名空间✈…

实战入门 K8s剩下三个模块

1.Label Label是kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识&#xff0c;用来对它们进行区分和选择。 Label的特点&#xff1a; 一个Label会以key/value键值对的形式附加到各种对象上&#xff0c;如Node、Pod、Service等等 一个资源对象可以定义任意数量…

圆梦、取舍、成长—独孤风的2023年回顾

大家好&#xff0c;我是独孤风&#xff0c;一位曾经的港口煤炭工人&#xff0c;目前在某国企任大数据负责人&#xff0c;公众号大数据流动的作者。 2023年马上就要过去了&#xff0c;这一年我们结束了三年核酸检测的生活。一切回归到正常的轨迹。回望这一年可能更多的时候会觉得…

计算机操作系统(OS)——P5设备管理

1、I/O设备的概念和分类 什么是I/O设备 I/O就是输入/输出&#xff08;Input/Output&#xff09;。 I/O设备就是可以将数据输入到计算机&#xff0c;或者可以接收计算机输出数据的外部设备&#xff0c;属于计算机中的硬件部件。 UNIX系统将外部设备抽象为一种特殊的文件&#x…

190. Reverse Bits

190. Reverse Bits class Solution:def reverseBits(self, n: int) -> int:out0for i in range(32):# print(i,n&1)out(out<<1)^(n&1)n>>1return out 位操作