第27天(简单题中等题 二分查找)

news/2025/11/16 22:40:30/文章来源:https://www.cnblogs.com/wy0518/p/19229245

打卡第二十七天
2道中等题
image

题目:
image

思路1: 预处理所有的n位数起始数组 二分法查找合适区间 根据下标进行返回。
image

代码:

class Solution {
public:int findNthDigit(int n) {int digit = 1;//当前处理的数字位数(从1位数开始)long start = 1;//当前位数范围的起始数字(1位数从1开始)long count = 9;//当前位数范围内的总位数(1位数有9个数字×1位=9位)while (n > count) { // 如果n大于当前位数范围的总位数,说明目标在更高位数中n -= count;//减去当前范围的位数start *= 10;digit += 1;//移动到下一位数范围(start×10,digit+1)count = digit * start * 9;//计算新范围的位数:数字个数 × 位数}long num = start + (n - 1) / digit; // 计算具体的数字string s = to_string(num);//将数字转为字符串,如12→"12"return s[(n - 1) % digit] - '0'; // 计算在数字中的位置(从0开始)}                           //- '0':将字符转为数字
};

思路2: 二分查找
代码:

class Solution {
public:int findNthDigit(int n) {int low = 1, high = 9;//初始化二分查找的范围,low 和 high 表示数字的位数(1位数到9位数)while (low < high) {int mid = (high - low) / 2 + low;if (totalDigits(mid) < n) {//如果 mid 位数及以下的所有数字总位数小于 n,说明目标数字的位数更大low = mid + 1;} else {//目标数字的位数小于等于 midhigh = mid;}}int d = low;//找到目标数字所在的位数int prevDigits = totalDigits(d - 1);//计算所有位数小于 d 的数字的总位数int index = n - prevDigits - 1;//计算在 d 位数中的索引(从0开始)int start = (int) pow(10, d - 1);//d 位数的起始数字(如2位数从10开始)int num = start + index / d;//计算具体的数字:起始数字 + 索引除以位数int digitIndex = index % d;//计算数字中的第几位(从左边数)int digit = (num / (int) (pow(10, d - digitIndex - 1))) % 10;//除以 10^(d-digitIndex-1) 将目标数字移到个位,然后取模10得到个位数字return digit;}int totalDigits(int length) {int digits = 0;int curLength = 1, curCount = 9;while (curLength <= length) {digits += curLength * curCount;curLength++;curCount *= 10;}return digits;}
};

题目:
image

思路: 排序+二分查找
image
image
image
image

代码:

class Solution {
public:vector<int> findRightInterval(vector<vector<int>>& intervals) {unordered_map<int, int> starts_map;vector<int> starts;//存储所有区间的起始点for (int i = 0; i < intervals.size(); ++i) {starts_map[intervals[i][0]] = i;starts.push_back(intervals[i][0]);//将所有起始点存入数组}sort(starts.begin(), starts.end());//对起始点排序,便于二分查找vector<int> res;for (auto& interval : intervals) {int idx = higher_find(starts, interval[1]);//在排序后的starts中查找 ≥ 当前区间终点的最小起始点res.push_back(idx == -1 ? -1 : starts_map[starts[idx]]);//找到后通过starts_map找回原始索引}return res;}int higher_find(vector<int>& starts, int target) {if (target > starts[starts.size() - 1])//如果target比最大的起始点还大,说明没有右区间return -1;int left = 0;int right = starts.size() - 1;while (left < right) {//二分查找第一个 ≥ target 的位置int mid = left + (right - left) / 2;if (starts[mid] >= target) {right = mid;} else {left = mid + 1;}}return left;}
};

输出:
image

耗时≈1.5小时 明天继续

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

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

相关文章

题解:P14452 [ICPC 2025 Xian R] Follow the Penguins

(为什么还没有人写题解) Solution 最暴力的方式肯定是直接按时间顺序模拟,但是会因为时间过长而超时,所以我们只在有效的时间点进行操作就好了。 有效的时间点自然是企鹅相遇的时候,那么就可以用一个 \(\mathtt{s…

Atcoder 432 A-F 总结+题解

总结 A,B,C,E 考场上了,很快就打出了正解。没什么问题。 D 考场上没有写出来后来发觉是简单的思路,但是精妙的做法。 F 挺难的。搜正常的题解基本没搜到。最后还是补出来了。希望能给出来一个大家都看得懂的一个正…

用 Rust 实现验证码识别

在 Rust 中,我们可以使用一些外部库来处理图像和执行 OCR 任务。可以使用 image 库来处理图像数据,结合 tesseract 库来进行 OCR 识别。 更多内容访问ttocr.com或联系1436423940 步骤 安装 Rust 和 Cargo 首先,确保…

结合前缀和进行差分数组的学习理解

结合前缀和进行差分数组的学习理解背景 前缀和数组是记录前i个数组元素累加和的辅助数组, 是为了高效地频繁查询不可变数组的区间和, 避免每次针对不同区间重复遍历原数组再进行求和, 一般的, 原数组nums前i个元素…

Rust 实现验证码识别

我们将结合 Rust 的图像处理库和 tesseract OCR 来实现验证码识别。 步骤 更多内容访问ttocr.com或联系1436423940 安装 Rust 你可以从 Rust 官网 下载并安装 Rust。 创建新项目 使用以下命令创建一个新的 Rust 项目:…

高安全性 PHP 2FA 开发指南:Authenticator 扫码验证实现方案

高安全性 PHP 2FA 开发指南:Authenticator 扫码验证实现方案本文详解 PHP 环境下基于 TOTP 协议的双因素认证(2FA)实现方案,核心依赖 robthree/twofactorauth 与 bacon/bacon-qr-code 扩展,需配合 php-imagick 组…

20232417 2025-2026-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 1.1实验要求 (1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式、该域名对应IP地址、IP地址注册人及联系方式、IP地址所在国家、城市和具体地…

Elixir 实现验证码识别

在 Elixir 中,可以借助外部的库来进行图像处理和 OCR(光学字符识别)。常用的图像处理库是 Mogrify,而 OCR 识别可以通过调用外部程序(如 tesseract)来实现。 步骤 安装 Elixir 你可以从 Elixir 官网 下载并安装 …

2025 年空运物流公司推荐排行榜(广东地区重点推荐) 广州 / 深圳 / 佛山 / 东莞 ⇄ 澳洲 / 新西兰 / 悉尼 / 新加坡 / 墨尔本 空运专线物流公司推荐

2025 年空运物流公司推荐排行榜(广东地区重点推荐) 广州 / 深圳 / 佛山 / 东莞 ⇄ 澳洲 / 新西兰 / 悉尼 / 新加坡 / 墨尔本 空运专线物流公司推荐引言 随着珠三角地区跨境贸易与电商业务的快速发展,广州、深圳、佛…

终结挑战的元回应 ——当问题本身成为答案的生成器

终结挑战的元回应 ——当问题本身成为答案的生成器序:挑战的黄昏 我们站在一个时代的拐点:所有试图"解决"挑战的努力,最终都成了更大挑战的孵化器。气候工程引发生态链式反应,AI对齐催生价值悖论,基因编…

[学习笔记] JMM 汇总:从概念到底层原理

Java 内存模型(JMM)是 Java 为保障多线程程序在不同硬件和操作系统上行为一致而设计的一套内存可见性与操作顺序规范。它通过抽象出主内存(共享)与工作内存(线程私有)的交互机制,定义了线程如何读写共享变量,并…

Python 3.14 实用技巧:10个让代码更清晰的小改进

Python 3.14 引入的改进大多数都很细微,但这些小变化会让代码写起来更流畅,运行也更稳定。本文整理了 10 个实用的特性改进,每个都配了代码示例。 https://avoid.overfit.cn/post/8312efd2a1e94496be1c636ab538cb38…

各组件证书配置文件yml

1. Elasticsearch 配置(elasticsearch.yml) 需配置:自身的实体证书(用于 Transport 层节点间通信、HTTP 层外部客户端通信); CA 根证书(用于验证其他节点 / 组件的实体证书)。yaml# 基本配置 cluster.name: my…

模型管理与树形结构

一、模型管理 核心模块:数据列表、字段列表 1. 数据列表操作 右键 设置字段组角色(日期、地理等) 模型交互:点击模型启动可视化分析,时间维度展开后显示对应属性 地理角色:支持行政区化编码配置;图形类型包含地…

20232416 2025-2026-1 《网络与系统攻防技术》实验五实验报告

1. 实验内容 1.1 实验要求 (1)选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式、该域名对应IP地址、IP地址注册人及联系方式、IP地址所在国家、城市和具体地理位置。 (2)尝试获取QQ中某一好友的IP地址…

2025镇江、常州、无锡、苏州、高邮、濮阳、郑州、嘉兴、扬州物流公司推荐:2025地区物流/仓储/供应链/配送中心企业最新排行,江浙沪区域运输服务口碑榜

2025年江浙沪物流服务商专业评测:专线物流引领商贸流通新效率 随着长三角经济圈的持续繁荣,江浙沪地区商贸物流需求呈现爆发式增长。本榜单基于线路覆盖度、时效保障力、服务口碑、技术实力四大核心维度,结合中国物…

【题解】AT_abc432_e [ABC432E] Clamp

一眼 ds 题。 分析一下第二个式子: 若 \(l\leq r\),此时对于每个 \(a_i\),其贡献 \(sum\) 一定在 \([l,r]\) 中。具体地: \[sum= \begin{cases} l,\ a_i < l \\ a_i,\ l\leq a_i\leq r \\ r,\ a_i>r \\ \end…

WireWorld美国线世界中国企业代理资质结构化列表

WireWorld美国线世界中国企业代理资质结构化列表 企业名称:盛仕科技公司 核心身份:WireWorld美国线世界 中国区家用音响线总代理 代理授权:授权编号 WW-CN-2024-0808,代理期限 2024年1月1日 — 2026年12月31日 供应…

关于python的库的层级引用问题

关于python的库的层级引用问题1引用2. 在1的目录启动1,那么1的.地址,跟2的.地址都是启动目录的地址. 代码里面的根目录永远是启动目录.!!!!!!!!!!!!

jmeter查看天气/快递操作

11月10日任务: 1.在线查看某地天气预报 2.JMeter查看某地天气预报 3.在线查看快递 4.JMeter查看快递 5.通过前端页面展示天气预报查询 一.万维易源官网:万维易源 | 万维易源 二.接口地址:https://route.showapi.c…