leetcode刷题总结551-600
551. 学生出勤记录 I
描述:
思路:字符串包含A的个数 和 是否包含“LLL”
552. 学生出勤记录 II
描述:
思路:动态规划。dp[0-n][0-1 A][0-1-2 L]。 状态转移根据题意分情况 添加P时候, 添加A的时候 L的时候。。
553. 最优除法
描述:
思路:题中说全部都是正整数,那么第1个数就是被除数。后面的所有就是除数。(被除数最大,除数最小)。
554. 砖墙
描述:
思路:对于每个间隔进行统计。找到最小的就行。
556. 下一个更大元素 III
描述:
思路:转换为字符串,总后往前,通过单调栈找到突然变小的值,然后在后面找所有大的最小i的大于它的,交换,然后交换那个突然变小的地方的后面。
560. 和为K的子数组
描述:
思路:前缀和。hashmap<sum,count>.当出现某一个前缀和的时候,看这个前缀和-k是否存在。
561. 数组拆分 I
描述:
思路:排序。nums[i]+[i+2]+[i+4]...
564. 寻找最近的回文数
描述:
思路:保留前一半。然后前一半+1;前一半;前一半-1 分别考虑求距离。
565. 数组嵌套
描述:
思路:遍历。遍历的时候需要设定一个visited数组,防止重复时间消耗。
567. 字符串的排列
描述:
思路:滑动窗口+hashset.
575. 分糖果
描述:
思路:去重之后有多少种. 和 数组的长度除以2. 的最小。
581. 最短无序连续子数组
思路:从前往后,维护一个max和r 当当前元素小于max的时候,证明当前元素应该在他前面,那么这个下标就不是他本来的位置,那么r就换成当前的坐标,否则更新max的值保证max一直最大。同理从后往前更新min和l。
583. 两个字符串的删除操作
描述:
思路:两个单词的最长子序列。然后len1+len2-2*len(lcs)。 通过动态规划求最长子序列。dp[i][j]当i==j.的时候,它等于dp[i-1][]j-i]+1. 否则就是[i-1][j],[i]j-1的最大值,
592. 分数加减运算
描述:
思路:通分。求分子分母。
593. 有效的正方形
描述:
思路: 计算边长和和对角线是否相等。
594. 最长和谐子序列
描述
思路:hashmap存储。然后对于hashmap中的某个元素看这个元素的+1的个数和自己的个数。
598. 范围求和 II
描述;
思路:找到横坐标和纵坐标最小的,然后返回次数。
599. 两个列表的最小索引总和
描述:
思路:hashmap《string,index》
600. 不含连续1的非负整数
描述:
思路:判断一个数是否连续。将这个数和这个数右移后的树进行 & 运算 看是否为0.