
代码随想录
文章平均质量分 75
记录一下算法的解题思路
一个想打拳的程序员
一个想打拳的程序员
展开
-
代码随想录算法训练营Day24 | 122.买卖股票的最佳时期、55.跳跃游戏、45.跳跃游戏||
记录每天的利润值,第一天的为 0 ,第二天的当天的减去前一天的。然后遍历相加为正的利润值。最后得到的结果就是最大利润。:记录每一步的覆盖区域,并随时更新覆盖区域。如果覆盖区域大于等于 nums.length - 1。就说明能跳到末尾去。原创 2024-01-20 19:41:31 · 429 阅读 · 0 评论 -
代码随想录算法训练营Day23 | 455.分发饼干、376.摆动子序列、53.最大子数组和
先记录累加,如果累加和大于之前记录的,就重新记录累加和,如果累加和为负数,直接跳过。然后累加和置为 0 ,从新的正数开始累加。因为累加和如果是负数的话,再怎么加也是往小的,不如直接跳过。:先进行一个元素的去重,去重之后,算出每个元素的差值,然后记录下来。然后根据根据 摆动子序列的要求,找到对应的差值,最后加个 1。:分发饼干的时候,外层循环是胃口,内层是饼干,按照大饼干满足大胃口的思维来投递饼干。需要将 两个数组,一开始就进行排序处理。原创 2024-01-18 16:43:50 · 512 阅读 · 0 评论 -
代码随想录算法训练营Day22 | 491.非递减子序列、46.全排列、47.全排列||
全排列的话收集条件,就是 大小等于 nums.length的时候,需要注意的就是递归取元素的时候,不能取用过的元素。直接用一个全局的 set 集合,进行元素的去重。:什么情况下要搜集结果,可以写一个判断函数,当大小大于2的时候,并且,是非递减的,才能加入结果集中。需要注意的就是树层的一个去重操作。:本题的数组元素有重复元素,所以要进行树层的一个去重操作。原创 2024-01-16 17:04:57 · 482 阅读 · 0 评论 -
代码随想录算法训练营Day21| 93.复原IP地址、78.子集、90.子集||
和组合问题不同的是, 本题没有个数要求,收集的结果集,所以只要遍历到,就要收集。去重操作的话,要在树层去重,树枝上不能去重。:最重要的是想到一个收集结果的条件,也就是终止条件。:本题涉及到一个去重操作。原创 2024-01-15 20:17:42 · 473 阅读 · 0 评论 -
代码随想录算法训练营Day20 | 40.组合总和||、39.组合总和、131.分割回文串
首先找到终止条件,就是 startIndex > s.length(),此时就要开始记录路径的元素。关于判断 s 是否是 回文串的逻辑,放在 for 循环里面判断,如果是就放进去,不是就不放到 path 中,所以在终止条件记录元素的时候,可以直接记录保存。首先是要找到出口,该题的出口就是,sum > target 的时候就要 return,如果等于的时候,就要保存结果。:由于解集中不能包含重复的组合,所以要进行去重的操作。:和上题一样,但是不用进行去重操作。原创 2024-01-10 21:21:52 · 431 阅读 · 1 评论 -
代码随想录算法训练营Day19 | 77.组合、216.组合总和|||、17.电话号码的字母组合
组合问题,利用回溯来解决。回溯就是用来解决纯暴力解决不了的问题。此题,如果通过 for 循环, 也可以解决,但是如果 k 越来越来越大,那么就要写越来越多的 for,不切实际。:本题和上述两题不同,不在同一个集合里面,是不同的集合,所以参数就用 index 了,不用 startIndex 进行去重。:和上题一样,终止条件也是元素个数满足为 k的时候,不过保存结果的时候,要加个判断,和是否等于 n,只有等于才会保存起来。此时就可以利用回溯来解决。原创 2024-01-09 20:05:56 · 409 阅读 · 0 评论 -
代码随想录算法训练营Day18 | 二叉搜索树中的插入操作、二叉搜索树的最近公共祖先、删除二叉搜索树的节点、修剪二叉搜索树、二叉搜索树转换成累加树、将有序数组转换成二叉搜索树
直接将要插入的节点值和根节点进行对比,如果比它小,就往左孩子走,比他大,就往右孩子走。所以我们构造的时候,将树均匀分成两份,取中间节点作为根节点,然后更新左中序树,更新右中序树。判断要删的节点的值和当前节点是否一样,如果一样就删除,不一样,就根据节点值大小,往左或者往右移动。因为二叉搜索树的左树节点值都小于根节点值,右树节点值都大于根节点值。:判断当前节点的值,是否在区间内,如果不在,不能直接删除,因为它的左树或者右数中可能存在符合的节点!:删除二叉搜索树中的节点,和在 二叉搜索中插入节点差不多。原创 2024-01-08 16:36:45 · 924 阅读 · 0 评论 -
代码随想录算法训练营Day17 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236.二叉树的最近公共祖先
然后从第三个元素开始计算,如果发现差值 小于等于 min,就替换 min,遍历结束后,就得到了最小的 min。然后通过一个队列,将出现次数大的放进去,并且相同的放进去。如果遇到更大的,就清空原来的队列,放入新的大元素。然后通过一个 map 集合,将每个数,出现过的次数存起来,Key:值本身,Value:出现的次数。:看到二叉搜索树,我们可以知道,它的中序遍历的有序的。然后我们就可以计算出相隔的两个数之间的差值,然后找到最小的那一个即可。看到搜索树,我们要想到中序遍历的结果,是有序的。原创 2024-01-04 13:42:41 · 363 阅读 · 0 评论 -
代码随想录算法训练营Day16 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
我们可以看到每次其实这个找最大值,然后创建节点的过程就是一个二叉树的前序遍历的过程。所以,我们可以递归来完成它。: 二叉搜索树的中序遍历,是有序单调递增的。所以我的思路是,用中序遍历得到一个列表。然后判断是否是单调递增即可。根据题目的描述,可以得到以下内容。我们用前序遍历来完成。注意:分割数组的时候,要注意区间。左闭右开(自己定义)为了方便对代码的思路有个好的理解。:使用前序遍历,得到目标节点,返回直接返回即可。为了方便理解,画个图来演示下,这个流程。原创 2024-01-02 16:20:29 · 1046 阅读 · 1 评论 -
代码随想录算法训练营Day15 | 513.找树左下角的值、112.路径总和、113.路径总和||、106.中序与后序遍历构造二叉树、105、前序与后序遍历构造二叉树
利用后序遍历可以直到根节点的位置,而根据中序遍历,可以根据在后序遍历数组中的根节点位置,将中序数组分割成 左树和右树。:找到最底层最左边的值,我的想法是,利用层序遍历,分别存储每一层的值,然后取最后一层的第一个元素就是我们想得到值。注意: 在进行数组分割的时候,因为只有分割中序数组之后,才知道左右子树的元素个数,才能分割后序数组。: 和上一题一模一样,只不过我们再判断 sum == targetSum 之后,结果集存的是路径。: 和上题思路一样,只不过分割数组的时候不太一样。注意递归的时候,要回溯!原创 2024-01-01 20:46:29 · 388 阅读 · 0 评论 -
代码随想录算法训练营Day14 | 257. 二叉树的所有路径、110.平衡二叉树、404.左叶子之和
利用前序遍历的思想。原创 2023-12-29 21:58:22 · 426 阅读 · 1 评论 -
代码随想录算法训练营Day13 | 104.二叉树的最大深度、559.N叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数
用后序遍历的思想,先判断出左子树的深度,然后在右子树的深度。最后取大的那一个再加上根节点。注意:左子树为空的情况,或者是 右子树为空的情况!: 和求最大深度,一个思想。原创 2023-12-28 20:56:22 · 546 阅读 · 0 评论 -
代码随想录算法训练营Day12 | 102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树
层序遍历、翻转二叉树、对称二叉树原创 2023-12-28 14:41:47 · 921 阅读 · 0 评论 -
代码随想录算法训练营Day11 | 144.二叉树的前序遍历、145.二叉树的后序遍历、94.二叉树的中序遍历
上一题,我们进栈的顺序是,根 右 左,所以得到最终前序遍历顺序是 根左右,如果我们换一换,将入栈顺序改成 根 左 右, 此时得到的顺序就是 根 右 左。,我们利用一个整体的思维,将一颗树,看成一个根,左树、右树。,我们利用一个整体的思维,将一颗树,看成一个根,左树、右树。,我们利用一个整体的思维,将一颗树,看成一个根,左树、右树。此时我们要遍历的话,先整体遍历根,然后遍历左树,再遍历右树。此时我们要遍历的话,先整体遍历左树,然后遍历右树,再遍历根。:有两种写法,一种是递归写法,一种是迭代的写法。原创 2023-12-27 19:57:07 · 891 阅读 · 0 评论 -
代码随想录算法训练营Day10 | 239.滑动窗口的最大值、347.前K个高频元素
使用小顶堆,需要实现 PriorityQueue 中的 Comparator接口,并重新写 compare 方法,让它进行元素出现次数对比。那么我们应该如何维护这个单调队列呢,此处既然是最大值,那么采用的是单调递减的队列。让队列的出口处是当前窗口的最大值。: 采用单调队列来完成,单调队列就是队列里的元素顺序,是单调递减/递增的情况。是 o1[1] - o2[1] 则是小根堆, 即元素出现的次数小的优先级高。是 o2[1] - o1[1] 则是大根堆, 即元素出现的次数大的优先级高。原创 2023-12-26 18:38:02 · 1065 阅读 · 0 评论 -
代码随想录算法训练营Day9 | 20.有效的括号、1047.删除字符串中的所有相邻重复项、150.逆波兰表达式求值
有效的括号,删除字符串中所有的相邻重复项,逆波兰表达式原创 2023-12-26 12:19:55 · 562 阅读 · 3 评论 -
代码随想录算法训练营Day8 | 233.用栈实现队列、225.用队列实现栈
用栈实现队列,用队列实现栈原创 2023-12-22 13:13:04 · 421 阅读 · 0 评论 -
代码随想录算法训练营Day7 | 344.反转字符串、541.反转字符串||、替换数字、151.反转字符串中的单词、右旋字符串
反转字符串、反转字符串中的单词、右旋字符串、替换数字原创 2023-12-21 20:07:00 · 1001 阅读 · 0 评论 -
代码随想录算法训练营Day6 | 454.四数相加||、383.赎金信、35.三个之和、18.四数之和
四数相加、四数之和、三数之和、赎金信原创 2023-12-20 16:47:42 · 963 阅读 · 0 评论 -
代码随想录算法训练营Day5 | 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1. 两数之和
有效的字母异位词、两个数组的交集、快乐数、两数之和原创 2023-12-18 19:44:32 · 416 阅读 · 0 评论 -
代码随想录算法训练营Day4 | 24.两两交换链表中的节点、19.删除链表的倒数第 N 个节点、面试题. 链表相交、142.环形链表II
两两交换链表中的节点、删除链表的倒数第 N 个节点、链表相交、环形链表||原创 2023-12-17 22:41:37 · 977 阅读 · 0 评论 -
代码随想录算法训练营Day3 | 203.移除链表元素、707.设计链表、59.螺旋矩阵II
设计单链表,移除链表元素,反转链表原创 2023-12-17 00:05:52 · 984 阅读 · 0 评论 -
代码随想录算法训练营Day2 | 977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II
有序数组的平方,长度最小的子数组,螺旋矩阵||原创 2023-12-15 16:49:13 · 993 阅读 · 0 评论 -
代码随想录算法训练营Day1 | 704.二分查找、27.移除元素
二分查找,双指针法原创 2023-12-14 00:33:03 · 987 阅读 · 0 评论