leetcode 第 302 场算法比赛 排名 144/6914

作者: | 更新日期:

20分钟做完四道题,排名一百多名。

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

零、背景

手速还是不够快,犹豫一下,排名就到一百名之外了。

一、数组能形成多少数对

题意:给一个数组,每次可以删除一对相等的数字,问删除次数与最后剩余的数字个数。

思路:排序并统计每个数字出现次数即可求出答案。

二、数位和相等数对的最大和

题意:给一个数组,数位和相等的两个数字可以形成一组匹配,求数字和最大的一个匹配。

思路:循环数组,map 记录之前每个数位和中最大的数字,求和更新答案即可。

三、裁剪数字后查询第 K 小的数字

题意:给一个等长的数字字符串数组,然后给若干询问。
每个询问有两个数字[k, trim]
trim 代表对字符串的后缀长度。
求后缀按字典序排名为 k 的下标(字符串相等时按下标大小比较)。

思路:储存字符串的下标,每个询问时对下标按题目要求排序,输出第 k 个即可。
复杂度:O(Q * N * log(N) * L)
Q 代表询问个数。
N 代表字符串个数。
L 代表字符串的长度,需要进行字典序比较。

四、使数组可以被整除的最少删除次数

题意:给两个数组,第一个数组可以从小到大删除数字。
问删除多少个数字,才能使得第一个数字的最小值可以整除第二个数组的所有数字。

思路:要整除第二个数组的所有数字,代表这个数字是第二个数组所有数字的公约数。
所以可以先预处理求出第二个数组的最大公约数。
然后对第一个数组排序,从小到大找到第一个可以整除的数字即可。

最大公约数复杂度:O(n log(n))
排序复杂度:O(n log(n))
寻找复杂度:O(n)
综合复杂度:n log(n)

五、最后

这次比赛题目很简单,可能是考察排序吧。

加油,算法人。

《完》

-EOF-

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

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

点击查看评论

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

tiankonguse +
穿越