前言
这是六月集训的第九日,今日的训练内容是 二分查找
解题报告
1.力扣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
原题链接
题目概述
给你一个整数 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数字数 。
重新回来思考一下,假如给定了一个数字,那么首先就应当判断一下它所在的位置是什么几位数所在的位置,然后再来具体寻找它是什么数字。
先做记录。
源码剖析