合集-代码随想录算法训练营
摘要:有序数组的平方。常规方法复习冒泡排序,也可以使用双指针。因为有序数组的平方,最大值一定在两侧,最小值在中间。可以两侧往中间收拢。 2024年7月4日笔记:双指针法,两侧往中间逼近一定是从大到小,然后给res数组倒着填即可实现从小到大。 题977. 有序数组的平方 class Solution { p
阅读全文
摘要:2024年7月3日学习笔记。
阅读全文
摘要:删除链表元素,技巧是设置一个虚拟头节点,这样就可以把原始头节点当做普通节点处理了,最后再返回虚拟头结点的next即可。 题203. 移除链表元素 /** * Definition for singly-linked list. * public class ListNode { * int val;
阅读全文
摘要:2024年7月6日 两两交换链表元素 继续用虚拟头节点,多建立几个记录指针。 题24. 两两交换链表中的节点 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next;
阅读全文
摘要:2024年7月8日 内容:哈希表的应用 题242. 有效的字母异位词 字母异位词,简单的思考是用数组或哈希表记录每个字母出现的次数然后用两次循环记录,第一个加1第二个减1,最后如果有不为0的就不是。 更快的题解是先排序,然后直接比较是否相等即可。 题349. 两个数组的交集 用set做。最后用lis
阅读全文
摘要:2024年7月9日 题454. 四数相加II 使用哈希表,分为两块,前两个数组找出各种情况,统计次数,时间复杂度为O($n^2$),后两个数组在找到各种情况的时候直接用哈希表去处前两个数组符合的相应次数即可。 class Solution { public int fourSumCount(int[
阅读全文
摘要:2024年7月10日 题344. 翻转字符数组 记得用双指针,时间复杂度最低。 题541. 反转字符串II 首先自己实现一个String的reverse函数方便后面用,记得字符数组和字符串的互转方式。 然后计算有多少组2k,分组处理即可。 class Solution { public String
阅读全文
摘要:2024年7月12日 易错: split(" ")要小心字符串有多个空格连在一起,这样会得到一些空字符串""在数组中 暂时都用substring()快速解决。 KMP暂时放一下,后面复习, 字符串右旋转: import java.util.*; public class Main{ public s
阅读全文
摘要:2024年7月12日 题232. 用栈实现队列 两边倒即可,要出队列就倒到右边去,然后再回来。 class MyQueue { Stack<Integer> s1; Stack<Integer> s2; int size; public MyQueue() { s1 = new Stack<>();
阅读全文
摘要:2024年7月13日 逆波兰表达式 记住遇到数字就入栈,遇到符号就取出栈顶的两个数字运算再入栈即可。 注意除法和减法是后出栈的作为被运算数,先出栈的作为运算数。 例如,5在下面,3在上面,那么遇到减法就是5-3而不是3-5。 class Solution { public int evalRPN(S
阅读全文
摘要:2024年7月15日 二叉树 前序遍历,前就是指根在前,递归要注意判断节点为空。 如果不用递归,就用一个栈来保存节点。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode l
阅读全文
摘要:2024年7月16日 题226. 翻转二叉树 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {
阅读全文
摘要:2024年7月17日 平衡二叉树 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * Tr
阅读全文
摘要:2024年7月18日 用层序遍历巧解 题513. 找树左下角的值 层序遍历的板子一定要熟背。 class Solution { public int findBottomLeftValue(TreeNode root) { List<List<Integer>> res = new ArrayLis
阅读全文
摘要:2024年7月19日 题654. 最大二叉树 熟练运用递归即可 class Solution { public TreeNode constructMaximumBinaryTree(int[] nums) { int maxNum = Integer.MIN_VALUE; int flag=-1;
阅读全文
摘要:2024年7月20日 题530. 二叉搜索树的最小绝对差 使用递归获取中序遍历,然后遍历一遍vector即可得到结果。 import java.util.*; class Solution { Vector<Integer> vec; public int getMinimumDifference(
阅读全文
摘要:2024年7月22日 题235. 二叉搜索树的最近公共祖先 普通解法还是和普通的祖先一样求即可,再依据搜索树特性进行剪枝即可加速。 import java.util.*; class Solution { Vector<TreeNode> vec1; Vector<TreeNode> vec2; i
阅读全文
摘要:2024年7月23日 题669. 修剪二叉搜索树 暴力做法是找出所有不符合的节点再一一删除。 import java.util.*; class Solution { ArrayList<Integer> list; public TreeNode trimBST(TreeNode root, in
阅读全文
摘要:2024年7月24日 回溯入门 用for来遍历每个元素,然后进入递归。 题77. 组合 给出n和k,可选元素1到n,k是组合个数。 易错:添加进外层list时要new一个,否则后续修改会影响已经添加的内层list class Solution { List<List<Integer>> list1;
阅读全文
摘要:2024年7月25日 题39. 组合总和 由于每个元素可以用多次,要想到在每次递归里还要循环即可。 代码首先给各个候选排序,从小到大依次提高门槛,每次回溯就提高index。 class Solution { List<List<Integer>> res; List<Integer> path; i
阅读全文