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

前言

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

解题报告

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. 得到子序列的最少操作次数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值