
LeetCode
文章平均质量分 66
想当程序媛的秀妍
这个作者很懒,什么都没留下…
展开
-
LeetCode--(动态规划)0-1背包问题
问题分析有一个容量为N的背包,要用这个背包装下物品的价值最大,这些物品有两个属性:体积w和价值v。定义一个二维数组dp存储最大价值,其中dp[i][j]表示前i件物品体积不超过j的情况下能达到的最大价值。设第i个物品体积为w,价值为v,根据第i件物品是否添加到背包中,可以分两种情况讨论:第i件物品没添加到背包中,总体积不超过j的前i件物品的最大价值就是总体积不超过j的前i-1件物品的最大价值,dp[i][j]=dp[i-1][j]。第i件物品添加到背包中,dp[i][j]=dp[i-1][j-w]+原创 2021-04-19 15:18:58 · 256 阅读 · 0 评论 -
LeetCode--(动态规划)数组区间问题
文章目录303.区域和检索--数组不可变题目大意解题思路代码实现413. 等差数列划分题目大意解题思路代码实现303.区域和检索–数组不可变题目大意给定一个整数数组 nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。实现 NumArray 类:NumArray(int[] nums) 使用数组 nums 初始化对象int sumRange(int i, int j) 返回数组 nums 从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点(原创 2021-04-19 11:16:07 · 384 阅读 · 0 评论 -
LeetCode--(动态规划)矩阵路径问题
题目大意给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。解题思路题目要求,只能向下走或者向右走,所以对于当前单元格(i,j),他不是从左侧单元格(i-1,j)移动而来就是在上侧单元格(i-1,j)走来,所以可以建立转移方程:dp[i][j]=Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j]但是要特殊处理几个特殊位置:当上边是矩阵边界的时候,只能从左侧走原创 2021-04-19 09:57:11 · 566 阅读 · 0 评论 -
LeetCode--(动态规划)母牛生产
题目大意假设农场中成熟的母牛每年都会生 1 头小母牛,并且永远不会死。第一年有 1 只小母牛,从第二年开始,母牛开始生小母牛。每只小母牛 3 年之后成熟又可以生小母牛。给定整数 N,求 N 年后牛的数量。解题思路该题利用动态规划来解。建立动态方程第i年的母牛数等于第i-1年的母牛数加上三年前的母牛数,因为三年前的小牛今年都会生产一头小牛,每年生一个。所以动态方程为:dp[i]=dp[i-1]+dp[i-3]代码实现public int cowNums(int n){ int []dp原创 2021-04-19 09:34:00 · 1337 阅读 · 1 评论 -
LeetCode--(动态规划)信件排错
题目大意NowCoder每天要给很多人发邮件。有一天他发现发错了邮件,把发给A的邮件发给了B,把发给B的邮件发给了A。于是他就思考,要给n个人发邮件,在每个人仅收到1封邮件的情况下,有多少种情况是所有人都收到了错误的邮件? 即没有人收到属于自己的邮件。解题思路定义一个数组dp表示存储错误方式数量,dp[i]表示i个邮件和人的错误发送数量。把第n个元素放在一个位置,比如位置k,一共有n-1种方法。放编号为k的元素,这时有两种情况:(1)把它放到位置n,那么剩下的n-1个元素,由于第k个元素放到原创 2021-04-13 14:14:35 · 517 阅读 · 0 评论 -
2021-04-08 LeetCode动态规划--斐波那契数列
文章目录动态规划算法算法核心动态规划的两种形式动态规划的原理动态规划的经典模型题目70.爬楼梯题目大意解题思路代码实现198. 打家劫舍题目大意解题思路代码实现213. 打家劫舍 II题目大意解题思路代码实现动态规划算法算法核心Those who cnnot remrember the past are condemned to repeat it.动态规划算法的核心就是记住已经解决过的子问题的解。动态规划的两种形式自顶向下的备忘录法以斐波那契数列为例子,备忘录方法的思想就是创建一个n+1大原创 2021-04-13 10:58:26 · 249 阅读 · 0 评论 -
LeetCode257--(dfs)二叉树的所有路径
题目大意给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。解题思路使用深度优先搜索,dfs遍历二叉树时,需要考虑当前的节点以及它的孩子节点。如果当前节点不是叶子节点,则在当前的路径末尾添加该节点,并继续递归遍历该节点的每一个孩子节点。如果当前节点是叶子节点,则在当前路径末尾添加该节点之后就得到一条从根节点到叶子结点的路径,将该路径加入最终的结果中即可。注意:StringBuilder的使用。代码实现class Solution { pub原创 2021-04-13 10:45:24 · 107 阅读 · 0 评论 -
LeetCode79--(dfs)单词搜索
题目大意给定一个m x n二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。解题思路对每个位置的元素进行深搜遍历,看与字符串对应位置的元素是否一致,如果不一致就立即返回false,需要注意的一点就是,访问过的元素还可以再访问,所以需要进行回溯处理。代码实现class Solu原创 2021-04-13 10:10:17 · 130 阅读 · 0 评论 -
LeetCode93--(trackback)复制IP地址
文章目录题目大意解题思路代码实现(明天再写一遍)题目大意给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 I原创 2021-04-13 08:58:20 · 288 阅读 · 0 评论 -
LeetCode17--电话号码字母组合(回溯)
算法思想Backtracking(回溯)属于DFS。普通DFS主要用在可达性问题,这种问题只需要执行到特定点的位置然后返回即可Backtracking(回溯)主要用于解决排列组合问题,这种问题在执行到特定的位置返回之后还会继续执行求解过程。因为 Backtracking(回溯)不是立即返回,而要继续求解,因此在程序实现时,需要注意对元素的标记问题:在访问一个新元素进入新的递归调用时,需要将新元素标记为已经访问,这样才能在继续递归调用时不用重新访问该元素。在递归返回时,需要将元素标记为未访问原创 2021-04-12 14:30:07 · 172 阅读 · 0 评论 -
LeetCode--(DFS)省份数量
题目大意有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而isConnected[i][j] = 0表示二者不直接相连。返回矩阵中 省份 的数量。解题思路遍历每一个城市,如果该城市没原创 2021-04-12 10:52:02 · 161 阅读 · 0 评论 -
LeetCode--(DFS)岛屿数量
题目大意给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。解题思路利用深度搜索(DFS)来解决,注意计数时的条件。代码实现class Solution { private int[][] direction={{-1,0},{0,1},{1,0},{0,-1}}; int m,n; public int numI原创 2021-04-12 10:31:17 · 87 阅读 · 0 评论 -
LeetCode--(DFS)岛屿的最大面积
算法思想广度优先搜索是一层一层的遍历,每一层得到所有的新节点;要用队列存储起来以备下一层遍历的时候再遍历。而深度优先搜索在得到一个新节点时立即对新节点进行遍历。从一个节点出发,使用DFS对一个图进行遍历时,能够遍历到的节点都是从初始节点可达的,DFS常用来求解这种可达性问题。在程序实现DFS时需要考虑以下问题:栈:用栈来保存当前节点信息,当遍历新节点返回时能够继续遍历当前的节点。可以使用递归栈。标记:和BFS一样同样需要对已经遍历过的节点进行标记。695. 岛屿的最大面积题目大意给定一个原创 2021-04-12 10:10:15 · 199 阅读 · 0 评论 -
LeetCode--分治算法
文章目录分治算法算法定义基本思想算法使用场景算法基本步骤题目241. 为运算表达式设计优先级题目大意解题思路代码实现95. 不同的二叉搜索树 II题目大意解题思路代码实现分治算法算法定义分而治之,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。基本思想设计思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分为治之。分治策略:对于一个规模为n的问题,若该问题可以容易的解决原创 2021-04-11 11:48:27 · 465 阅读 · 0 评论 -
2021-04-06 LeetCode--哈希表
文章目录哈希表1.两数之和题目大意解题思路代码实现217.存在重复元素题目大意解题思路代码实现594.最长和谐子序列题目大意解题思路代码实现128. 最长连续序列题目大意解题思路代码实现哈希表哈希表使用O(N)的空间复杂度存储数据,并且以O(1)时间复杂度求解问题。Java中的HashSet用于存储一个集合,可以查找元素是否在集合中。Java中的HashMap主要用于映射关系,从而把两个元素联系起来。1.两数之和题目大意给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中原创 2021-04-06 15:28:13 · 126 阅读 · 0 评论 -
2021-04-06 LeetCode--栈和队列
文章目录232.用栈实现队列题目大意解题思路代码实现225.用队列实现栈题目大意解题思路代码实现155.最小栈题目大意解题思路代码实现20.有效的括号题目大意解题思路代码实现739.每日温度题目大意解题思路代码实现503.下一个更大元素 II题目大意解题思路代码实现232.用栈实现队列题目大意请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int原创 2021-04-06 13:21:00 · 119 阅读 · 0 评论 -
LeetCode--字符串
文章目录242. 有效的字母异位词题目大意解题思路代码实现409.最长回文串题目大意解题思路代码实现205.同构字符串题目大意解题思路代码实现647.回文子串题目大意解题思路代码实现9.回文数题目大意解题思路代码实现696. 计数二进制子串题目大意解题思路代码实现242. 有效的字母异位词题目大意解题思路(一)HashMap(二) 数组(三)数组改进(四)排序代码实现(一)HashMapclass Solution { public boolean isAnagram(Strin原创 2021-03-27 15:58:07 · 298 阅读 · 0 评论 -
LeetCode---链表
文章目录160.相交链表题目大意解题思路代码实现206.反转链表题目大意解题思路代码实现21.合并两个有序链表题目大意解题思路代码实现83.删除排序链表中的重复元素题目大意解题思路代码实现19.删除题目大意解题思路代码实现160.相交链表题目大意解题思路第一轮指针p走完ListNode A之后指向ListNode B的头,去走ListNode B的路,同理,指针q走完ListNode B之后指向ListNode A的头,去走ListNode A的路。第一轮走完之后,他们之间相差的刚好是两条链表的长度原创 2021-03-27 15:08:43 · 150 阅读 · 0 评论 -
LeetCode---Trie
文章目录Trie树的介绍Trie的节点结构Trie树的两个常见操作向Trie树中插入键在Trie树中查找键查找Trie树中的键前缀Trie树的优势Trie树的介绍Trie称为前缀树或者是字典树,用于判断字符串是否存在或者是否具有某种字符串的前缀。是一棵非典型的多叉树模型,经常用来快速检索。前缀树里面存储的是具有相同前缀的字符串。Trie的节点结构Trie是一个有根的树,其节点具有以下字段:最多R个指向子节点的链接,其中每个链接对应字母表数据集中的一个字母。布尔字段:来指定节点是对应键的结尾还原创 2021-03-27 12:39:58 · 109 阅读 · 0 评论 -
LeetCode---BST
669.修剪二叉搜索树题目描述解题思路如果根节点的值比给定的右边界还大,由二叉搜索树的性质可知,右子树的所有值也都是比给定的右边界大的,那么就在左子树中进行修剪即可。同理,如果根节点的值比给定的左边界还小,左子树的所有值也都是比给定的左边界小的值,那么只用在右子树中进行修剪即可。如果根节点的值在给定的左边界和右边界之间,那么就采用递归分别在左右子树中进行修剪作为左右子树。代码实现class Solution { public TreeNode trimBST(TreeNode root原创 2021-03-27 12:10:50 · 207 阅读 · 0 评论