算法 Coding
记录常见算法题的思路
小芒果dd
这个作者很懒,什么都没留下…
展开
-
【LeetCode刷题】常用小技巧
本地调试打印数组内容会比较方便,但直接打印数组的话,控制台显示的是数组对应内存地址的哈希值,所以需要把数组转成list了之后再打印才能看到数组的内容。原创 2024-05-13 07:22:25 · 199 阅读 · 0 评论 -
【LeetCode】热题100 刷题笔记
这道题用两层for循环也能做出来,但我们还是要挑战一下时间复杂度小于On2的解法,不能因为它是第一道 而且还是简单题就不做,题目还是常做常新的,从中挖掘新的学习点也是一个一件很有价值的事情。原创 2024-04-01 07:37:42 · 833 阅读 · 0 评论 -
《代码随想录》刷题思考
语言:Java。原创 2023-06-25 07:35:01 · 203 阅读 · 0 评论 -
【Leetcode 常见报错】
原因:自己提交的代码修改了原有的类名。原创 2023-06-28 06:56:47 · 211 阅读 · 0 评论 -
《代码随想录 刷题顺序》
704. 二分查找27. 移除元素209. 长度最小的子数组59. 螺旋矩阵II203. 移除链表元素707. 设计链表206. 反转链表19. 删除链表的倒数第N个结点242. 有效的字母异位词349. 两个数组的交集1. 两数之和454. 四数相加II15. 三数之和18. 四数之和344. 整数拆分541. 反转字符串II151. 反转字符串中的单词28. 找出字符串中第一个匹配项的下标459. 重复的子字符串232. 用栈实现队列225. 用队列实现栈20. 有效的原创 2023-06-18 21:33:45 · 958 阅读 · 0 评论 -
二叉树 | 判断是否为平衡二叉树
牛客BM 36 判断是否为平衡二叉树题目:给你二叉树的根节点root,判断这个树是否为平衡二叉树。定义:二叉树的左右子树的高度之差的绝对值不超过1;平衡二叉树的子树也是平衡二叉树。思路:递归遍历方式:后序遍历1.分别求左右子树的高度;2. 若左右子树高度差不符合定义,则返回-1;3.若左右子树高度差符合定义,则返回左右子树高度的最大值+1,作为当前结点的高度,递归向上判断;举例:1.以2为根结点的左右子树,均符合平衡二叉树的定义,则以2为根结点的二叉树为平衡二叉树;2.以3为根结点的二叉原创 2022-05-02 16:08:11 · 1159 阅读 · 0 评论 -
二叉树 | 二叉树的镜像(翻转)
牛客BM33 二叉树的镜像(翻转)思路:遍历(此处不能用中序遍历)二叉树的每个结点,分别翻转其左右孩子我习惯用层序遍历代码: public TreeNode Mirror (TreeNode root) {//层序遍历 if(root == null) return null; LinkedBlockingQueue<TreeNode> que = new LinkedBlockingQueue<TreeNode>();原创 2022-05-01 23:53:38 · 816 阅读 · 0 评论 -
二叉树 | 合并二叉树
牛客BM33 合并二叉树思路:递归同时遍历两个树,把树2合并到树1解决结点为空的问题:若某棵树的左/右孩子为空,就返回另一棵树代码: public TreeNode mergeTrees (TreeNode t1, TreeNode t2) { if(t1 == null) return t2; if(t2 == null) return t1; t1.val += t2.val;// t1.left = mergeTrees(t1.l原创 2022-05-01 23:51:48 · 300 阅读 · 0 评论 -
二叉树 | 输出二叉树的右视图
牛客BM41 输出二叉树的右视图题目:给出树的前序、中序序列,输出树的右视图思路:层序遍历这道题刚开始看很懵,什么右视图??看了评论区,其实右视图就是每一层的最后一个结点的集合所以,层序遍历,到了当前层的最后一个结点就记录下就行了但题目没有给完整的树,而是遍历序列,所以其实是BM40 + 层序遍历代码: public int[] solve (int[] xianxu, int[] zhongxu) {//输出右视图 TreeNode root = BuildTree(xi原创 2022-05-01 23:48:52 · 172 阅读 · 0 评论 -
二叉树 | 重建二叉树
牛客BM40 重建二叉树题目:根据中序、前序序列构建二叉树思想:递归在前序序列的第一个元素为root遍历中序序列,找root的位置将前序、中序序列分隔为左右子树的前序、中序序列递归构造代码: public TreeNode reConstructBinaryTree(int [] pre,int [] vin) { if(pre.length == 0 || vin.length == 0) return null; if(pre.length ==原创 2022-05-01 23:45:18 · 108 阅读 · 0 评论 -
二叉树 | 二叉树中和为某一值的路径(一)
牛客BM29 二叉树中和为某一值的路径(一)题目:思路:不需要记录路径/*最后一行与以下3行等价,思路是前序遍历(深度优先)* 每次递归都用sum减掉当前结点的val,直到遍历到叶子;* 如果减掉叶子结点的值后,sum还不为0,那就说明当前路径不符合要求* */代码: public boolean hasPathSum (TreeNode root, int sum) { if(root == null) return false; if(root.le原创 2022-05-01 23:30:51 · 411 阅读 · 0 评论 -
二叉树 | 判断是否为完全二叉树
牛客BM 35 判断是否为完全二叉树定义:完全二叉树可以看做是,满二叉树从最后一个结点开始向前删掉结点;完全二叉树去掉最后一层是一颗满二叉树,最后一层的结点在遇到最后一个结点之前,没有空结点思路:层序遍历若当前结点空则flag标记为true,继续遍历若当前结点不为空且flag为false,这将结点的左右孩子入队;若flag为true,则表明之前遇到过空结点,不符合完全二叉树的定义,返回false代码: public boolean isCompleteTree (TreeNode原创 2022-05-01 23:19:44 · 790 阅读 · 0 评论 -
二叉树 | 遍历的变形题
二叉树遍历的变形题树结点的定义 public static class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }//TreeNode1. 牛客BM27 按之字形打印顺序打印二叉树思路:层序遍历:用list收集当前层的节点,res收集遍原创 2022-05-01 22:50:13 · 269 阅读 · 0 评论 -
二叉树 | 判断二叉树是否对称
判断二叉树是否对称1. 题目牛客BM31:给你二叉树的根节点root,判断该二叉树是否对称2. 思路递归,对比左右子树左子树的左子树 ?= 右子树的右子树左子树的右子树 ?= 右子树的左子树核心步骤:对比两棵子树伪代码令两棵子树的根节点分别为a, b(共4种情况)① 若a, b结点都为空,则两子树相等② 若a, b结点其中一个不为空,则两子树一定不相等③ 若a, b结点都不空,但结点的值不相等,则两子树一定不相等④ 若a, b结点都不为空且两结点的值相等,则向下递归判断原创 2022-05-01 22:05:25 · 479 阅读 · 0 评论 -
二叉树 | 层序遍历
二叉树的层序遍历题目给你二叉树的根节点root,返回二叉树的层序遍历序列。思路:迭代数据结构:队列从根节点开始,先将跟根结点入队依次弹出队列中的结点,将当前结点的左孩子和右孩子分别入队直到遍历到最后一个节点代码 public static List<List<Integer>> levelOrder(TreeNode root) {//层序遍历 List<List<Integer>> res = new LinkedLis原创 2022-04-30 22:07:17 · 269 阅读 · 0 评论 -
二叉树 | 中序遍历
二叉树的中序遍历题目给你二叉树的根节点root,返回改二叉树的后序遍历序列。思路:递归后序:左右根 路径收集对左子树进行前序遍历(递归调用)访问根节点对右子树进行前序遍历(递归调用)代码public class LC_94 { public List<Integer> inorderTraversal(TreeNode root) {//中序遍历:左->根->右 List<Integer> res = new ArrayList&原创 2022-04-30 21:52:57 · 113 阅读 · 0 评论 -
二叉树 | 后序遍历
二叉树的中序遍历题目给你二叉树的根节点 root ,返回它节点值的前序遍历。思路:递归中序:左 -> 根 -> 右对左子树进行中序遍历访问根结点对右子树进行中序遍历代码public class LC_145 { public List<Integer> postorderTraversal(TreeNode root) {//后序遍历:左->右->根 List<Integer> res = new ArrayList&l原创 2022-04-30 21:32:16 · 242 阅读 · 0 评论 -
二叉树 | 前序遍历
二叉树的前序遍历题目给你二叉树的根节点 root ,返回它节点值的前序 遍历。思路:递归法前序:根 -> 左 -> 右 路径收集访问根节点对左子树进行前序遍历(递归调用)对右子树进行前序遍历(递归调用)代码public class LC_144 { public List<Integer> preorderTraversal(TreeNode root) {//前序遍历:根->左->右 List<Integer> r原创 2022-04-30 20:45:27 · 264 阅读 · 0 评论 -
判断某数是否为质数
判断某数是否为质数新思路:借助boolean数组0和1不是质数如果x是质数,那么x的n倍肯定不是质数,即2x, 3x, 4*x…不是质数boolean数组默认true,从i=2开始,对i的倍数从i倍开始,置为falsepublic static boolean isPrimer(int n) { boolean[] countPrime = new boolean[n+1]; Arrays.fill(countPrime, true);//1. 先默认都是质数 countPrime[0]原创 2022-04-22 15:34:33 · 122 阅读 · 0 评论 -
刷题 | 动态规划
动态规划思路:(借鉴自《代码随想录》)dp数组的含义(一维or二维)递推公式初始化遍历顺序手动模拟一、基础题牛客BM62 斐波那契数列 public int Fibonacci(int n) { if(n == 0 || n == 1) return 1; if(n < 0 || n > 40) return -1; int[] dp = new int[n+1]; dp[1] = 1; dp[2] = 1原创 2022-04-22 15:08:27 · 713 阅读 · 0 评论 -
刷题 | 贪心篇
简单题1. LC_455 分发饼干题目:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。import java.util.Arrays;public class LC_455 {/原创 2022-04-08 21:37:16 · 90 阅读 · 0 评论 -
刷题笔记 | 二叉树篇
一、二叉树的遍历方式1. LeetCode 144 二叉树的前序遍历import java.util.ArrayList;import java.util.List;public class LC_144 { public List<Integer> preorderTraversal(TreeNode root) {//前序遍历:根->左->右 List<Integer> res = new ArrayList<Integer>原创 2022-04-08 10:46:51 · 465 阅读 · 0 评论 -
刷题 | 回溯篇
文章目录排列牛客BM55:没有重复项的全排列排列牛客BM55:没有重复项的全排列递归参数终止条件单层循环1)当前操作2)回溯3)终止条件返回后,恢复现场注意:res在收集path时,要重新new一个ArrayList,否则path变化的时候,res里的数据也会变化 static ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); sta原创 2022-04-22 13:49:09 · 50 阅读 · 0 评论 -
华为机试 | 笔记
1、勾股数元组1. 判断质数boolean数组默认true → 0和1不是 → 从i=2开始,对i的倍数从i倍开始,置为falsepublic static boolean isPrimer(int n) { boolean[] countPrime = new boolean[n+1]; Arrays.fill(countPrime, true);//1. 先默认都是质数 countPrime[0] = false; countPrime[1] = false;//2. 0-1不是质数 //原创 2022-04-05 18:24:15 · 3822 阅读 · 0 评论