news 2026/4/16 16:39:15

二分猜答案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二分猜答案

二分

前后缀分解

lc786

二分查找分数值范围,统计小于等于中间值的分数个数,定位第k小的素数分数并返回

#include <vector>
using namespace std;

class Solution {
private:
vector<int> arr;
int n, a, b;
public:
vector<int> kthSmallestPrimeFraction(vector<int>& _arr, int k) {
arr = _arr;
n = arr.size();
double l = 0, r = 1;
while (true) {
double mid = (l + r) / 2;
int cnt = check(mid);
if (cnt > k) r = mid;
else if (cnt < k) l = mid;
else break;
}
return {a, b};
}
private:
int check(double x) {
int ans = 0;
double large = 0;
for (int i = 0, j = 1; j < n; j++) {
while (arr[i + 1] * 1.0 / arr[j] <= x)
i++;

if (arr[i] * 1.0 / arr[j] <= x) {
ans += i + 1;
if (arr[i] * 1.0 / arr[j] > large) {
a = arr[i];
b = arr[j];
large = arr[i] * 1.0 / arr[j];
}
}
}
return ans;
}
};
核心逻辑:用二分查找定位“第k小的素数分数”,不用暴力枚举所有分数,效率更高

1. 前提:输入数组是从小到大排序的素数,要找的是“两个素数相除(分子在前、分母在后,分子<分母)”中第k小的那个分数(比如数组[2,3,5],分数有2/3、2/5、3/5,第2小是2/5)

2. 二分查找的是什么?

不直接找分数,而是找“分数的数值大小”。因为所有可能的分数都在 0~1 之间(分子<分母),所以在 [0,1] 区间里二分:

- 每次取中间值 mid ,统计“所有小于等于 mid 的分数有多少个”(用 check 函数算)

- 如果统计数 >k:说明第k小的分数比 mid 小,缩小右边界;

- 如果统计数 <k:说明第k小的分数比 mid 大,扩大左边界;

- 统计数 ==k:说明 mid 刚好“卡”在第k小的分数上,找到目标。

3. check函数怎么统计?

用“双指针”高效计数(不用两两枚举,避免超时):

- 固定分母 j ,找最大的分子 i 使得 arr[i]/arr[j] ≤ mid (因为数组有序, i 越大,分数越大);

- 此时, i+1 就是以 arr[j] 为分母、满足条件的分数个数(分子可以是 arr[0]~arr[i] );

- 同时记录这些分数中最大的那个(因为统计数==k时,这个最大分数就是第k小的目标)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 15:36:09

Design Fluid Viscous Dampers in SAP2000 and Peform3D

在 SAP2000 和 Perform3D 中设计粘滞流体阻尼器课程基本信息- 发布时间&#xff1a;2026年 - 格式与规格&#xff1a;MP4 格式 - 语言&#xff1a;英语 - 时长&#xff1a;1小时 - 大小&#xff1a;950 MB - 核心主题&#xff1a;基于 SAP2000 的实用抗震阻尼器建模、非线性分析…

作者头像 李华
网站建设 2026/4/16 14:06:09

@RestController注解

1. 引言 在现代的Java Web开发中&#xff0c;Spring框架因其简洁、高效和强大的功能而受到广泛欢迎。Spring MVC是Spring框架的一个重要组成部分&#xff0c;用于构建Web应用程序。RestController注解是Spring MVC提供的一个关键注解&#xff0c;用于简化RESTful Web服务的开发…

作者头像 李华
网站建设 2026/4/16 15:37:09

5分钟快速搭建一个 SpringBoot3 + MyBatis-Plus 工程项目

环境 idea 2023.3.5 jdk 17 mysql 8 创建SpringBoot工程 创建SpringBoot工程&#xff0c;这里有两种方式可选&#xff0c;一种是使用idea提供的Spring Initializr自动创建&#xff0c;一种是通过Maven Archetype手动创建 自动创建SpringBoot工程 使用Spring Initializr创建&…

作者头像 李华
网站建设 2026/4/16 14:47:29

AFP87432输入/输出端子板

AFP87432 输入/输出端子板是一块用于PLC系统的扩展模块&#xff0c;主要功能是让PLC与现场设备&#xff08;如开关、传感器、继电器、指示灯等&#xff09;进行信号交互。主要功能输入信号接收接入现场数字信号&#xff0c;例如按钮、限位开关或传感器的开关量。常见输入电压为…

作者头像 李华