《六月集训》第九日——二分查找

《六月集训》第九日——二分查找,第1张

前言

这是六月集训的第九日,今日的训练内容是 二分查找

解题报告 1.力扣981 原题链接

981. 基于时间的键值存储

题目概述

设计一个基于时间的键值数据结构,该结构可以在不同时间戳存储对应同一个键的多个值,并针对特定时间戳检索键对应的值。

实现 TimeMap 类:

TimeMap() 初始化数据结构对象
void set(String key, String value, int timestamp) 存储键 key、值 value,以及给定的时间戳 timestamp。
String get(String key, int timestamp)
返回先前调用 set(key, value, timestamp_prev) 所存储的值,其中 timestamp_prev <= timestamp 。
如果有多个这样的值,则返回对应最大的  timestamp_prev 的那个值。
如果没有值,则返回空字符串(“”)。

解题思路

对于类还是感觉到比较陌生,读题上有很大的问题,这个月学完c++的OOP之后回来用c++重刷。

源码剖析

2.力扣400 原题链接

400. 第 N 位数字

题目概述

给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。

解题思路

题意是,在123467891011…这样的数字序列上找到第 n 位的值。

首先排除字符串的写法,填入的数实在是太多了。先来找一下规律,一位数一共有 9 个,二位数一共有 10~99 共计90个,三位数一共有 100~999 共计9000个,也就是说每一个位数的数字都占据 9*10^位数个数,然后再考虑到其占据的位数就是 位数x数字数 。

重新回来思考一下,假如给定了一个数字,那么首先就应当判断一下它所在的位置是什么几位数所在的位置,然后再来具体寻找它是什么数字。

先做记录。

源码剖析

3.力扣1300 原题链接

1300. 转变数组后最接近目标值的数组和

4.力扣1713 原题链接

1713. 得到子序列的最少 *** 作次数

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1330286.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存