剑指-48 最长不含重复字符的子字符串
思路滑动窗口,设置left边界和最大值max,通过map来查询每个字符的下标每当遍历到新的字符,分两步骤进行处理map获取字符下标,如果没有存,则代表是非重复字符串,添加map并更新max值max = Math.max(right - left + 1, max)如果map已存在,更新窗口left
思路滑动窗口,设置left边界和最大值max,通过map来查询每个字符的下标每当遍历到新的字符,分两步骤进行处理map获取字符下标,如果没有存,则代表是非重复字符串,添加map并更新max值max = Math.max(right - left + 1, max)如果map已存在,更新窗口left
题目地址思路把数据变成字符数组处理(这里也可以做取余操作处理)核心思路近似斐波那契数列,当前字符c下标设为k的组合情况,取决于之前k-1,k-2的字符组合情况。这里和一般的斐波那契的不同在于f(n-2)是否可以和f(n-1)组成10~25之间的数,如果可以那么f(n)=f(n-1)+f(n-2)否则
题目链接思路思路同剑指42题总结的那样,当前元素节点的值取决于之前的情况选择。这道题可以根据动归思路来做首先考虑当前节点的最大价值如何决定。根据分析,当前节点的元素最大值取决于两种情况。设当前元素在i,j位置, 即 grid[i][j],价值矩阵为valueMatrix[][],这里保存每个格子的最
题目地址先小结一下该类型的题目思考方向。该种类型题目都是当前情况的选择取决于之前的之前的情况(这种说法就很递归)。通常这个时候可以考虑一下之前的选择可能会有几种,属于是逆推思想。可以看下面的思路解析思路1使用滑动窗口的思想解决在遍历到元素k的时候,之前的窗口值 value 会存在两种情况(1)窗口值
思路第一动态规划...画格子,当到第n天时,n-1天的利润最大值,然后判断第n天是否会有利润提升,如果有的话就更新利润最大值因为觉得动态规划有点麻烦,更简单类似于滑动窗口的解法,最小利润为0,窗口内的股价最低值为min,右窗口不断遍历更新最大利润值以及窗口内股价最低值,这样遍历到最后就可以取得整个数
以前看这道题感觉都不会(没看过题解),现在遇到直接就会解了,看来写写题目还是有用的: )思路正向的想法是根据只有1个台阶/2个台阶/3个台阶来递推...但是这样会很麻烦逆向的思维是考虑如果现在已经是n阶台阶了,那么上一步只有两种可能,n-1阶或者n-2阶(因为青蛙只能跳1阶或者2阶),因此把这两种可
思路根据出名的斐波那契公式实现 F(n) = F(n-1) + F(n-2)递归调用该题会超时,使用map存储计算结果会浪费空间class Solution { public int fib(int n) { if (n < 2) return n;// 使用三个变量记录f
思路对称的定义,根节点相等,左右子树对称,因此可以使用递归遍历递归截止条件1)根节点值相等3)使用两个指针,一个左子树遍历,一个右子树遍历,如果这两个指针始终相等,则表示左右子树是对称的/** * Definition for a binary tree node. * public class T
思路递归翻转左右子树,则可以获取翻转树递归终止条件1)输入的节点为null2)左右子树交换结束/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left;
题目地址思路判断子结构,也就是说可能存三种情况完全和树相同和树的右子树相同和树的左子树相同递归判断/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left