二分猜答案

二分

前后缀分解

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小的目标)。

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

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

相关文章

嵌入式工程师面试宝典:常见算法题与底层驱动问题解析

文章目录摘要1. 开发环境配置1.1 硬件与工具链1.2 环境搭建步骤2. 算法题实战解析2.1 链表操作2.2 树结构应用3. 底层驱动开发实战3.1 GPIO控制LED3.2 SPI通信协议4. 综合案例&#xff1a;智能传感器系统架构设计低功耗优化关键代码5. 调试与问题处理常见问题解决方案&#xff…

基于Django的在线课程学习平台-计算机毕业设计源码+LW文档

摘要 在信息技术飞速发展的当下&#xff0c;教育领域正经历着深刻的变革。传统的线下教学模式逐渐无法满足人们日益多样化和个性化的学习需求&#xff0c;在线课程学习平台应运而生。它打破了时间和空间的限制&#xff0c;为学生、教师提供了更加便捷、高效的学习和教学环境。越…

rust学习-探讨为什么需要标注生命周期

rust学习-探讨为什么需要标注生命周期生命周期标注到底在做什么&#xff1f;原始代码&#xff08;没有标注&#xff09;添加标注后关键&#xff1a;标注是契约&#xff0c;不是控制例子1&#xff1a;标注如何帮助编译器验证更直观的比喻&#xff1a;租房合同生命周期标注的实际…

Docker 之mysql从头开始——Docker下mysql安装、启动、配置、进入容器执行(查询)sql

一、Docker 之mysql安装配置 步骤一&#xff1a;拉取镜像 1. 查看是否包含已安装的mysql。 docker images | grep mysql 2. 如上图所示&#xff0c;我们有mysql镜像&#xff0c;所以不必对mysql镜像进行拉取&#xff0c;如若没有上图中的惊喜&#xff0c;使用如下命令进行拉取…

DeepSeek R1 简易指南:架构、本地部署和硬件要求

DeepSeek 团队近期发布的DeepSeek-R1技术论文展示了其在增强大语言模型推理能力方面的创新实践。该研究突破性地采用强化学习&#xff08;Reinforcement Learning&#xff09;作为核心训练范式&#xff0c;在不依赖大规模监督微调的前提下显著提升了模型的复杂问题求解能力。 技…

深入解析DDR内存原理、测试方法及在嵌入式系统中的应用

文章目录摘要1. DDR内存核心技术解析1.1 物理架构与存储原理1.2 关键时序参数2. DDR测试方法与工具链2.1 测试环境搭建2.2 MemTest86测试流程3. 嵌入式系统集成实践3.1 ARM Cortex-A内存控制器配置4. 完整测试代码实现5. 常见问题解决5.1 信号完整性问题6. 成果展示技术图谱摘要…

基于Python的智能房价分析与预测系统设计-计算机毕业设计源码+LW文档

摘 要 房地产市场一直在发展&#xff0c;房价问题引起社会广泛关注。分析房价很重要&#xff0c;购房者需要这些信息&#xff0c;投资者需要这些数据&#xff0c;房地产企业也需要参考这些结果。传统房价分析方法存在不足&#xff0c;主要依靠个人经验&#xff0c;使用数据量较…

CVE-2024-38819:Spring 框架路径遍历 PoC 漏洞复现

操作&#xff1a; 根据CVE-2024-38819&#xff1a;Spring 框架路径遍历 PoC 漏洞搭建复现的靶场环境 拿到环境的源码使用docker搭建 cd vuln创建容器并启动 docker build -t cve-2024-38819-poc .docker run -d -p 8080:8080 --name cve-2024-38819-poc cve-2024-38819-poc注…

基于Python爬虫的网络小说热度分析django-计算机毕业设计源码+LW文档

摘 要 在数字化信息飞速发展的当下&#xff0c;网络文学市场规模不断扩大&#xff0c;网络小说热度分析对于了解读者喜好、优化平台运营具有重要意义。随着互联网技术的持续演进&#xff0c;海量的网络小说数据蕴含着丰富的读者行为和偏好信息&#xff0c;如何从中挖掘有价值的…

com.microsoft.sqlserversqljdbc4jar4.0 was not found产生原因及解决步骤

文章目录 问题 sqlserver 包找不到 报错原因分析 主要原因 解决方案 步骤 1&#xff1a;检查 pom.xml 中的依赖声明步骤 2&#xff1a;配置 Microsoft 的 Maven 仓库步骤 3&#xff1a;强制更新 Maven 依赖步骤 4&#xff1a;清理本地仓库缓存步骤 5&#xff1a;手动下载并安装…

2026年最新爆火!7款AI论文写作神器限时实测,一键生成文献综述与真实交叉引用

引言&#xff1a;DDL前24小时的绝望&#xff1f;这篇急救指南能救你 凌晨3点&#xff0c;电脑屏幕亮着未完成的论文初稿&#xff0c;文献综述还缺30篇引用&#xff0c;导师的修改意见堆了3页——这是不是你赶论文时的真实写照&#xff1f; 2026年学术圈已经卷到“用AI抢时间”…

com.mysql.cj.jdbc.exceptions.CommunicationsException Communications link failure 问题解决

前言: 一般这个报错大多是网络原因导致的&#xff0c;确保你不是网络问题再往下看 问题 在一个方法上&#xff08;该方法非常复杂执行时间长&#xff09;加了 Transactional(rollbackFor Exception.class)后出现了如下图所示的错误解决&#xff1a; 经过排查并非网络问题。复现…

【NLP】Hugging Face使用指南

文章目录一、Hugging Face介绍二、加载并使用预训练模型2.1 查找预训练模型2.2 实际案例2.2.1 调取预训练模型2.2.2 如何在具体的推理任务中使用预训练模型&#xff1f;2.3 如何在训练前就判定好哪些模型适用于实际任务&#xff1f;三、词嵌入工具与词嵌入模型3.1 调用分词器&a…

Git合并时忽略文件的6种技巧

有几种方法可以在 git merge 时忽略特定文件的合并&#xff1a;方法一&#xff1a;使用 .gitattributes 文件&#xff08;推荐&#xff09;在项目根目录创建或编辑 .gitattributes 文件&#xff1a;infostation.js mergeours *.js mergeours # 如果需要忽略所有js文件的合并然…

在 Ubuntu 下载 Typora

1.下载 Typora 安装包 鱼香ROS_Typora 安装地址https://fishros.org.cn/forum/topic/23/%E5%AE%89%E8%A3%85typora%E6%9C%80%E5%90%8E%E7%9A%84%E5%85%8D%E8%B4%B9%E7%89%88 2.不解压&#xff0c;下载 Typora 首先找到压缩包下载地址&#xff0c;右键空白处选择在终端中打开&…

RK3588+kylin V10安装docker

检查内核是否支持docker 方法&#xff1a;工具分享&#xff1a;检测内核配置是否支持Docker等容器 (1)检查卸载老版本Docker sudo apt-get remove docker docker-engine docker.io containerd runc (2)安装Docker依赖 sudo apt-get install ca-certificates curl gnupg lsb…

ATL80.dll文件丢失找不到 打不开问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

atl110.dll文件丢失找不到 打不开问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

最新爆火6款免费AI论文神器!PaperTan一站式搞定选题降重

紧急预警&#xff1a;论文截止只剩72小时&#xff1f;这些AI工具能救你命&#xff01; 凌晨3点的图书馆、满屏的文献标红、导师催改的第12条消息——如果你正在经历这些&#xff0c;现在就是你最后的急救机会&#xff01;2024年最新爆火的6款免费AI论文工具&#xff0c;能帮你…