LeetCode刷题笔记(800-899)

LeetCode刷题笔记(800-899)

【804】唯一摩尔斯密码词

解题记录

用数组保存摩尔斯密码,通过ASCII码取到对应的摩尔斯密码,计算出单词的摩尔斯密码后保存到哈希表,最后返回哈希表中键值对的个数即为所求。

相关标签

字符串

【806】写字符串需要的行数

解题记录

使用一个变量记录行数,一个变量记录宽度,读取到字符通过ASCII码取到对应的宽度,如果当前宽度加上当前字符的宽度不超过100就继续加,超过了就另起一行,很简单的逻辑。

相关标签

数组

【811】子域名访问计数

解题记录

遍历给定的域名,首先将访问次数与域名分离开,再将域名以英文句号为标志,分割为子域名,从子域名中取出子域名,与次数一起作为键值对保存到哈希表,不断取出新的子域名,拼接得到更长的子域名。以 100 www.baidu.com 为例,分割后得到 [www, baidu. com] 这个子域名数组和100这个次数,首先取出 com ,将 com: 100 作为键值对保存,然后取出 baidu ,拼接得到 baidu.com ,将 baidu.com: 100 作为键值对保存,以此类推。当每一个域名都处理完毕后,再遍历哈希表中的键值对,按照题目的格式进行输出即可。

相关标签

哈希表

【812】最大三角形面积

解题记录

这题想了半天想不出来,看了题解挺失望的,最优的方案竟然就是暴力循环,既然没有什么巧妙的题解,为什么还要将这题放到题库里呢?暴力方式很简单,从点集中遍历任意三个点的所有可能组合,根据三个点的坐标计算三角形面积,最后返回最大值即可。

相关标签

数学

【819】最常见的单词

解题记录

首先遍历字符串,将字符串中的每个单词保存到哈希表中,得到单词出现的次数。然后遍历哈希表,找到最大的不在禁用单词列表中的单词。

相关标签

字符串

【824】山羊拉丁文

解题记录

分割字符串得到每个单词,根据单词的位置以及开头字母进行相应的处理然后存入结果中即可。

相关标签

字符串

【830】较大分组的位置

解题记录

双指针遍历字符串,双指针指向相同字符时一个指针向后移动,得到每一段相同字符的长度,如果长度不小于3,将双指针作为边界位置添加到结果数组中,注意双指针的边界条件即可。

相关标签

数组

【832】翻转图像

解题记录

要完成两个操作,反转数组和0-1互换,两个操作其实可以在一次遍历中完成,遍历的时候原数组从后往前遍历,将遍历元素0-1反转后添加到结果中即可。

相关标签

数组

【836】矩形重叠

解题记录

一开始没想明白,写了很复杂的判断语句也有遗漏的情况,另两个矩形分别叫a、b,两个矩形不重叠其实只需要满足:

a的最左侧比b的最右侧还要靠右
a的最右侧比b的最左侧还要靠左
a的底部比b的顶部还靠上
a的顶部比b的底部还靠下

四个条件满足任意一个即可,通过每个矩形左下角和右上角的坐标很容易就能判断。

相关标签

数学

【840】矩阵中的幻方

解题记录

又是一个只能暴力循环求解的题目,遍历矩阵中每一个点,判断以该点为左上角的3X3矩阵是否是幻方,判断幻方首先判断矩阵中是否出现了1-9以外的元素,出现就一票否决,然后判断矩阵中是否有9个元素,不是的话也一票否决,然后开始正式判断,先计算第一行之和,作为标准和,然后计算剩余的每一行和每一列和对角线,与标准和进行比较,判断是否满足每一行每一列与两条对角线都相等的条件,不满足也一票否决,最后没有被否决的结果可以作为一个幻方,计数器自增。这题更简洁的做法是将3阶幻方的8种可能保存到集合中,这样只需要将每个矩阵进行判断是否在集合中即可。

相关标签

数组

【844】比较含退格的字符串

解题记录

这题我使用了栈,如果读取到退格符号就弹出栈顶元素,否则将读取到的元素压入栈,最后栈中剩下的就是字符串结果,然后比较两个字符串即可。如果要实现常数级的空间复杂度,需要从后向前扫描字符串,扫描到退格符号就将符号前的第一个不是退格字符的字符删除,最后剩下的也是字符串结果。

相关标签

栈、双指针

【849】到最近的人的最大距离

解题记录

每次找到新的座位,就将新的座位与上一个座位的位置进行比较,找到两个座位最中间的座位,就是当前两个座位可以找到的最大距离空座位。

相关标签

数组

【852】山脉数组的峰顶索引

解题记录

这题在二分查找的基础上略微进行修改,常规的二分查找命中条件是中位下标对应的数就是要找的数,这题命中条件是中位下标对应的数左右两侧均比它小。

相关标签

二分查找

【859】亲密字符串

解题记录

对于一组亲密字符串,有两种可能,一种是两个字符串完全相等,通过交换两个相同的字符实现题意,另一种就是字符串中有且只有两个地方不一样。对于两种情况分别处理,第一种情况对字符串进行计数,检查是否有某一个字符出现2次以上,出现2次以上意味着可以交换该字符。对于第二种情况,使用双指针指向两个字符串的起点,遍历字符串,第一次发现两个字符不一样时,记录下此时的两个字符,如果再出现两个字符不一样,判断两个字符与第一次记录的两个字符是否满足逆序关系,如果不是就可以直接返回false。每次出现不一样的字符时维护一个计数器,最后观察计数器是否为2即可得到答案。

相关标签

字符串

【860】柠檬水找零

解题记录

由于题目限定了只会收到5、10、20三种面值的钱,所以对于这三种面值分别处理即可。对于5,不需要找钱,只需要将持有的5块钱的数量加一即可;对于10,如果没有持有5块钱,就无法找零,返回false,否则可以找零,持有的10块加一,5块减一;对于15比较复杂,找零要么为3张5元,要么为1张5元1张10元,要分别判断受伤的纸币是否满足这些条件。这题如果纸币面值更多样就不能用分类讨论的思想解题了。

相关标签

贪心算法

【867】转置矩阵

解题记录

这题很简单,遍历每一个数组中的元素,将其映射到行、列坐标互换的位置即可。

相关标签

数组


LeetCode刷题笔记(800-899)
https://wenchanyuan.com/leetcode_notebook(800-899)/
作者
蟾圆
发布于
2020年5月23日
许可协议