加油站
1 | class Solution { |
由于总油量足够(已经在全局检查中确认),我们只需要找到一个起点,使得从该点出发后,油量不会在任何站点变为负数。这个起点一定存在,因为我们不需要重新检查之前的站点。
分发糖果
错误尝试
1 | class Solution { |
我的代码在处理评分相等或多个峰值和谷值时容易出错。
两次遍历法:
- 第一次从左到右遍历,确保每个孩子如果评分比左边高,则糖果数比左边多。
- 第二次从右到左遍历,确保每个孩子如果评分比右边高,则糖果数比右边多。
1 | class Solution { |
接雨水
从左右向中间逼近
1 | class Solution { |
罗马数字转整数
最后一个单词的长度
1 | class Solution { |
最长公共前缀
这是两个本题用到的语法。indexOf()用于判断前缀是否匹配,substring()通过减少啊一位来寻找匹配的前缀。
https://www.runoob.com/java/java-string-indexof.html
https://www.runoob.com/java/java-string-substring.html
1 | class Solution { |
反转字符串中的单词
1 | class Solution { |
Z 字形变换
1 | p a h |
找出字符串中第一个匹配项的下标
错误尝试
1 | class Solution { |
没有考虑到needle长度大于haystack的情况。然后遍历到haystack-needle就可以了
1 | class Solution { |
验证回文串
1 | class Solution { |
[^a-zA-Z0-9]
用于匹配所有非字母数字字符。通过 replaceAll
方法,将这些字符从字符串中移除。
判断子序列
1 | class Solution { |
两数之和 II - 输入有序数组
慢速度
1 | class Solution { |
有一个点没注意到就是numbers是从小到大排序的这样就可以这样提高速度
1 | class Solution { |
盛最多水的容器
1 | class Solution { |
从更低的一边去寻找更高的。
三数之和
1 | class Solution { |
长度最小的子数组
1 | class Solution { |
无重复字符的最长子串
1 | class Solution { |
修改后b的新值为j+1既为重复字符下一个,不知道第二层循环条件j<i-b怎么想的,直接小于i才能全部遍历。发现重复就停止重复检测,提高效率。最后确保最后一个窗口被计算。
1 | class Solution { |
串联所有单词的子串
https://www.runoob.com/java/java-hashmap-getordefault.html
https://www.runoob.com/java/java-arraylist.html
https://www.runoob.com/java/java-hashmap-containskey.html
1 | class Solution { |
最小覆盖子串
遍历s,去匹配t,当开始匹配成功后,接下来无需匹配t中已经匹配到的。当重复时,将left改为原来left匹配到的下一个匹配到的。当全部覆盖时,建立一个hashmap存储,left以及长度。最后选择出最短的如果没有就返回””。
1 | import java.util.HashMap; |
有效的数独
非常奇妙的数学。当以宫来确定矩阵中的元素时,如何定位到元素所对应的宫呢?
(i/3)*3+j/3
成功读到数字时就在该元素所在行,列,宫进行查询,如果已经有重复就返回false,如果没有就填入。
1 | class Solution { |
螺旋矩阵
向右向下向左向上为一轮。每进行一轮进行一次计数。
1 | import java.util.ArrayList; |
1 | import java.util.ArrayList; |
这样解决了重叠和溢出问题。
旋转图像
1 | class Solution { |
矩阵置零
生命游戏
创建一个二维数组directions来与遍历得到的位置进行运算后得到周围8个元素的位置。遍历8个位置判断位置是否在存在的范围并且是否有存活细胞来进行计数。
后面进行判断如果符合死亡条件就置为-1,如果复活就置为2。后面根据不同于0与1的数字对整个矩阵进行更新。巧妙的设计。
1 | class Solution { |
赎金信
1 | import java.util.HashMap; |
同构字符串
s中相同的字符的位置在t中也是一样的。
建立一个hashmap,s为key,t为value,先判断有没有s,如果没有就添加映射,如果有就判断是否对应。
1 | class Solution { |
单词规律
和上题差不多吧,把s中的单词单独列出来。新建一个数组然后直接使用split就可以
https://www.runoob.com/java/java-string-split.html
1 |
|
有效的字母异位词
1 | class Solution { |
字母异位词分组
新建一个hashmap,遍历strs,单独的单词进行排序然后进行对比,将同一类都存到同一个key,然后遍历hashmap将同一个key输出为一个数组。
1 | class Solution { |
两数之和
1 | class Solution { |
快乐数
https://zhuanlan.zhihu.com/p/105269431
Floyd判圈算法
1 | class Solution { |
存在重复元素 II
1 | class Solution { |
简化一下代码
1 | import java.util.HashMap; |
最长连续序列
1 | class Solution { |
汇总区间
1 | class Solution { |
合并区间
学到了一个新知识,根据二位数组的子数组的第一个元素进行排序。
1 | Arrays.sort(intervals,Comparator.comparingInt(a -> a[0])); |
1 | import java.util.ArrayList; |
插入区间
先将intervals中子数组最大范围小于newInterval的最小范围先添加进去。然后再将intervals与newIntervals重合的部分合并,最后再把intervals最小范围比newInterval最大范围还大的添加进去。
1 | class Solution { |
用最少数量的箭引爆气球
求交集的,需要解决的问题是如何确定某个point所对应的子区间,而这个子区间会随着遍历而缩小。
1,point是否在确定的区间。但是区间更改会不会把之前在区间的踢出去呢?
2,hashmap存放每个point对应的区间号,list存放区间。最后统计list中的数量即可