当前位置: 首页 > news >正文

二分查找例题

题单来自:分享丨【算法题单】二分算法(二分答案/最小化最大值/最大化最小值/第K小) - 讨论 - 力扣(LeetCode)

1.题目1:在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

代码:

class Solution {
public:
int find_value(vector<int>&nums,int target){int left=0;int right=nums.size()-1;while(left<=right){int mid=left+(right-left)/2;if(nums[mid]>=target){right=mid-1;}else{left=mid+1;}}return left;
}vector<int> searchRange(vector<int>& nums, int target) {int start=find_value(nums,target);if(start==nums.size()||nums[start]!=target)return {-1,-1};
//start==nums.size()说明数组里面所有的数都小于target
//nums[start]!=target说明存在元素大于等于target,但这个数不一定就是targetint end=find_value(nums,target+1)-1;return {start,end};}
};

2.题目2:搜索插入位置

35. 搜索插入位置 - 力扣(LeetCode)

代码:

class Solution {
public:
int find_value(vector<int>&nums,int target){int left=0;int right=nums.size()-1;while(left<=right){int mid=left+(right-left)/2;if(nums[mid]>=target){right=mid-1;}else{left=mid+1;}}return left;
}int searchInsert(vector<int>& nums, int target) {int v=find_value(nums,target);return v;}
};

3.题目3:二分查找

704. 二分查找 - 力扣(LeetCode)

代码1:

class Solution {
public:int search(vector<int>& nums, int target) {int left=0;int right=nums.size()-1;while(left<=right){int mid=left+(right-left)/2;if(nums[mid]>target){right=mid-1;}else if(nums[mid]<target){left=mid+1;}else{return mid;}}return -1;}
};

代码2:

class Solution {
public:int search(vector<int>& nums, int target) {int left=0;int right=nums.size()-1;while(left<=right){int mid=left+(right-left)/2;if(nums[mid]>=target){right=mid-1;}else{left=mid+1;}}if(left==nums.size()||nums[left]!=target)return -1;return left;}
};

4.题目4:寻找比目标字母大的最小字母

744. 寻找比目标字母大的最小字母 - 力扣(LeetCode)

代码:

class Solution {
public:char nextGreatestLetter(vector<char>& letters, char target) {int left=0;int right=letters.size()-1;target=target+1;while(left<=right){int mid=left+(right-left)/2;if(letters[mid]>=target){right=mid-1;}else{left=mid+1;}}if(left==letters.size()){return letters[0];}return letters[left];}
};

5.题目5:正整数和负整数的最大计数

2529. 正整数和负整数的最大计数 - 力扣(LeetCode)

6.题目6:咒语和药水的成功对数

2300. 咒语和药水的成功对数 - 力扣(LeetCode)

提示:

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums 为 无重复元素 的 升序 排列数组
  • -104 <= target <= 104

代码:

class Solution {
public:
int find_minvp(vector<int>&potions,int k,long long success){int left=0;int right=potions.size()-1;while(left<=right){int mid=left+(right-left)/2;if(potions[mid]>=(success+k-1)/k){right=mid-1;}else{left=mid+1;}}return left;
}vector<int> successfulPairs(vector<int>& spells, vector<int>& potions, long long success) {sort(potions.begin(),potions.end());vector<int>result;for(int i=0;i<spells.size();i++){int s=find_minvp(potions,spells[i],success);result.push_back(potions.size()-s);}return result;}
};

http://www.dtcms.com/a/336971.html

相关文章:

  • 从基础到架构的六层知识体系
  • 进阶向:人物关系三元组,解锁人物关系网络的钥匙
  • 如何新建一个自己的虚拟环境
  • 有向无环图(Directed Acyclic Graph, DAG)介绍(环检测、DFS法、Kahn算法、)
  • 【Langchain系列三】GraphGPT——LangChain+NebulaGraph+llm构建智能图数据库问答系统
  • 15.三数之和
  • InfluxDB 开发工具链:IDE 插件与调试技巧(二)
  • 01.Linux小技巧
  • 从 UI 角度剖析蔬菜批发小程序的设计之道——仙盟创梦IDE
  • STRIDE威胁模型
  • IDE开发系列(1)基于QT的简易IDE框架设计
  • 【P38 6】OpenCV Python——图片的运算(算术运算、逻辑运算)加法add、subtract减法、乘法multiply、除法divide
  • 实践笔记-VSCode与IDE同步问题解决指南;程序总是进入中断服务程序。
  • 面试 TOP101 二叉树专题题解汇总Java版(BM23 —— BM41)
  • 深入解析StatefulSet与K8s服务管理
  • 集成电路学习:什么是Face Detection人脸检测
  • 多线程初阶-线程安全 (面试和工作的重点!!!)
  • Vue2篇——第六章 Vue 路由(VueRouter)全解析
  • Linux系统网络排查工具总结
  • org.apache.kafka.clients 和 org.springframework.kafka 的区别
  • kafka 发送消息有哪些模式?各自的应用场景是什么?
  • Elasticsearch全文检索中文分词:IK分词器详解与Docker环境集成
  • AI编程工具对决:Kilo vs Augment 开发Flutter俄罗斯方块游戏实战对比
  • 【AI论文】UI-Venus技术报告:借助强化微调(RFT)打造高性能用户界面(UI)代理
  • 手写Spring容器核心原理
  • 加密资产投资的六种策略:稳定币合规后的 Web3 投资和 RWA
  • 杂记 05
  • ARM 架构简明教程学习笔记
  • 微信原生小程序的一次gulp构建
  • DevExtreme Angular UI控件更新:引入全新严格类型配置组件