
数据结构与算法
文章平均质量分 96
Leon_Chenl
一个爱运动的boy,专注于嵌入式领域,希望能和志同道合的小伙伴一起学习进步。
展开
-
LeetCode题解图论篇(TS版)
在深度优先搜索中,我们会访问当前’1’所连接的所有’1’,并将它们标记为已访问(例如,可以将它们标记为’2’或者使用另一个同样大小的二维数组来跟踪访问状态)。:对于当前’1’,我们将查看它上下左右四个方向的邻居,并递归地对每一个未访问过的’1’邻居进行深度优先搜索。:对于每个未访问过的’1’邻居,将其坐标添加到队列中,并将其标记为已访问(可以通过将其值改为’2’来实现)。:遍历整个二维网格,一旦找到一个’1’,就从那里开始执行深度优先搜索,并将岛屿数量加1。此时,一个岛屿的所有部分都已被访问。原创 2024-05-27 09:04:10 · 901 阅读 · 0 评论 -
LeetCode题解单调栈篇(TS版)
我们可以定义两个DP数组。原创 2024-05-27 09:01:46 · 1071 阅读 · 0 评论 -
LeetCode题解动态规划篇(TS版)
文章目录解题技巧509.斐波那契数递归动态规划一动态规划二70.爬楼梯动态规划动态规划-完全背包-滚动数组746.使用最小花费爬楼梯动态规划62.不同路径动态规划63.不同路径Ⅱ动态规划343.整数拆分动态规划96.不同的二叉搜索树动态规划背包问题416.分割等和子集动态规划-01背包-二维数组动态规划-01背包-滚动数组1049.最后一块石头的重量Ⅱ动态规划-01背包-滚动数组494.目标和动态规划-二维数组-01背包动态规划-滚动数组-01背包474.一和零动态规划-01背包518.零钱兑换Ⅱ动态规划-原创 2024-05-27 08:59:20 · 319 阅读 · 0 评论 -
LeetCode题解贪心篇(TS版)
思路:在遍历数组时,维护两个变量up和down,分别记录到当前位置为止,以上升和以下降结尾的最长摇摆子序列长度。在贪心算法中,每一步都选择当前看起来最优的选择,而不考虑该选择对以后的步骤的影响。情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5(贪心,先消耗10和5,不行再消耗3个5)如果左或右子节点未被覆盖(状态0),那么在当前节点安装摄像头,使其变为状态1,并增加摄像头计数。对于根节点,如果其状态为0(未被覆盖),则在根节点上安装摄像头,并增加摄像头计数。,这个孩子会得到满足。原创 2024-05-27 08:53:01 · 376 阅读 · 0 评论 -
LeetCode题解回溯篇(TS版)
这是因为:即使把 5 选上,后面的数只有 6 和 7,一共就 3 个候选数,凑不出 4 个数的组合。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。如果至少一个数字的被选数量不同,则两种组合是不同的。的字符串,返回所有它能表示的字母组合。,用以表示一个 IP 地址,返回所有可能的。原创 2024-05-27 08:50:23 · 331 阅读 · 0 评论 -
LeetCode题解二叉树篇(TS版)
文章目录144.二叉树的前序遍历递归迭代Morris遍历颜色标记法94.二叉树的中序遍历递归迭代颜色标记法145.二叉树的后序遍历递归颜色标记法102.二叉树的层序遍历BFS226.翻转二叉树BFS-迭代DFS-递归100.相同的树DFS101.对称二叉树递归迭代104.二叉树的最大深度DFS-递归BFS-迭代111.二叉树的最小深度DFS-递归BFS-迭代222.完全二叉树的节点个数满二叉树+递归110.平衡二叉树自底向上递归257.二叉树的所有路径DFS-前序遍历-递归-回溯404.左叶子之和DFS-递原创 2024-05-27 08:46:11 · 385 阅读 · 0 评论 -
LeetCode题解栈与队列篇(TS版)
优先级队列是一种抽象数据类型,它类似于一个常规的队列或栈数据结构,但每个元素都有一定的关联优先级。在堆的实现中,元素可以在O(1)时间内获取(查看)最大/最小元素,而删除最大元素和插入新元素则需要O(log n)的时间。其中,n是队列中的元素数量。输入: [“10”, “6”, “9”, “3”, “+”, “-11”, " * ", “/”, " * ", “17”, “+”, “5”, “+”]给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。原创 2024-05-27 08:44:20 · 523 阅读 · 0 评论 -
LeetCode题解字符串篇(TS版)
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。它的主要思想是当出现字符比较不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息使得下一步的搜索更加快捷。给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”,“H”]输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]原创 2024-05-27 08:42:52 · 1020 阅读 · 0 评论 -
LeetCode题解哈希表篇(TS版)
示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]使用哈希表记录两数之和的频率,也提高了查找的效率。使用两个集合分别存储两个数组中的元素,然后遍历较小的集合,判断其中的每个元素是否在另一个集合中,如果元素也在另一个集合中,则将该元素添加到返回值。满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]原创 2024-05-27 08:41:00 · 624 阅读 · 0 评论 -
LeetCode题解链表篇(TS版)
时间复杂度:初始化O(1),get消耗O(index),addAtHead消耗O(1),addAtTail消耗O(1),addAtIndex消耗O(index)。空间复杂度:所有函数单词调用的空间复杂度均为O(1),总体空间复杂度O(n),其中n为addAtHead,addAtTail和addAtIndex的调用次数之和。示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。原创 2024-05-27 08:39:10 · 810 阅读 · 0 评论 -
LeetCode题解数组篇(TS版)
示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。原创 2024-05-26 22:46:14 · 610 阅读 · 0 评论