leetcode 第 381 场算法比赛,排名45

作者: | 更新日期:

只有两道题。

本文首发于公众号:天空的代码世界,微信号:tiankonguse

零、背景

leetcode 是越来越聪明了,现在只出两道题,相同题目,一道数据范围小,一道数据范围大。

A+C: 贪心,出现次数最多的字母放在最前面。
B+D: 构造,分环前、环中、环后三种情况统计步长的个数,区间求和。

PS:这次比赛的时候,电脑开机失败,折腾了好久,比赛开始十几分钟才开机成功。

一、输入单词需要的最少按键次数 I

题目:以前的老式手机是物理按键,按键上有多个字母,根据字母的位置,通过按多次可以按出字母。
问如何重新排列字母,从而使得输入一个字符串按键次数最少。

思路:贪心。

统计每个字母出现的次数,显然次数越多的字母需要尽量排在最前面。

2到9共8个按键。
频次最高的8个字母分别排在第一位。
频次排名处于9到16的字母,分别排在第二位。
依次递推即可。

二、按距离统计房屋对数目 I

题目:街道上有一排房屋,相邻的房屋之间有条街道。
现在某两个房屋之间建了一个街道,某两个房屋的最少街道个数称为距离。
问距离为1~n的房屋对分别有多少个。

思路:构造体。

可以发现,某个点出发,到达非环上点的距离是连续递增的,环上的点有两条路,也是依次递增的。

只看一个直线,直线上随意一点可以分别向两端走,距离分别是 1 到尽头。
只看一个环,环上任意一点可以朝两个方向走,距离也是从1到相遇,所以环上的距离是环大小除2,奇数有一个多走一步。

这些距离可以使用区间加一的数据结构来维护,例如树状数组或者线段树。
当然,由于不需要求区间和,更简单的做法是维护一个加一减一标记。

由此,我们可以枚举每个顶点为起点,分环前、环中、环后三种情况统计,求区间分别加一即可。

三、输入单词需要的最少按键次数 II

与第一题一样。

四、按距离统计房屋对数目 II

与第二题一样。

五、最后

这次比赛只有两道题,由于比赛电脑开机失败,浪费十几分钟,不然有可能进入前10名的。

《完》

-EOF-

本文公众号:天空的代码世界
个人微信号:tiankonguse
公众号ID:tiankonguse-code

本文首发于公众号:天空的代码世界,微信号:tiankonguse
如果你想留言,可以在微信里面关注公众号进行留言。

关注公众号,接收最新消息

tiankonguse +
穿越