LeetCode题
文章平均质量分 55
算法题
伍粟
菜鸟码农
展开
-
LeetCode 399. 除法求值(C++) DFS+回溯
解题思路首先得理解题目意思:equations和values:equations中每个一维序列表示一对数进行相除(前 / 后),得到的结果就是values中相应位置的值,以上作为已知条件。queries:包含两个元素,目的是要我们求:第一个元素 / 第二个元素 = ?我们可以将其抽象为一个带权图问题,对于queries中的两个元素 x, y,是否有一条路径可以从 x 到 y ,并求出经过这条路径的消耗是多少。由于两个元素的比值是一个常量,所以如果有多条路径,消耗是一样的,选其中一条就可以。以...原创 2021-02-09 00:15:21 · 203 阅读 · 0 评论 -
LeetCode 94.二叉树的中序遍历(C++) Morris中序遍历
Morris 中序遍历思路:Morris 遍历算法是另一种遍历二叉树的方法,它能将非递归的中序遍历空间复杂度降为 O(1)。Morris 遍历算法整体步骤如下(假设当前遍历到的节点为 x):如果 x 无左孩子,先将 x 的值加入答案数组,再访问 x 的右孩子,即 x=x.right。如果 x 有左孩子,则找到 x 左子树上最右的节点(即左子树中序遍历的最后一个节点,x 在中序遍历中的前驱节点),我们记为 predecessor。根据 predecessor 的右孩子是否为空,进行如下操作。如果 p原创 2021-02-08 17:35:00 · 186 阅读 · 0 评论 -
LeetCode 94.二叉树的中序遍历(C++)迭代
class Solution {public: vector<int> inorderTraversal(TreeNode* root) { vector<int> res; stack<TreeNode*> stk; //根节点非空 或 栈非空时 while (root != nullptr || !stk.empty()) { //根非空 遍历左子树 当最左一个子节点时...原创 2021-01-22 22:23:50 · 87 阅读 · 0 评论 -
LeetCode 155.最小栈(C++)( 一个栈同时保存当前值和栈内最小值)
一个栈同时保存当前值和栈内最小值class MinStack {public: /** initialize your data structure here. */ MinStack() { } void push(int x) { if (st.size() == 0) { st.push({x, x}); } else { st.push({x, min(x, st.top(原创 2021-01-22 19:17:36 · 105 阅读 · 0 评论 -
LeetCode 155.最小栈(C++)(辅助栈方法)
```cppclass MinStack { stack<int> x_stack; stack<int> min_stack;public: MinStack() { //初始化最小栈的值 min_stack.push(INT_MAX); } void push(int x) { //辅助栈 和栈本身同时入栈 x_stack.push(x); min_s...原创 2021-01-22 19:13:11 · 84 阅读 · 0 评论 -
LeetCode 297. 二叉树的序列化与反序列化(C++)
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方原创 2022-06-19 17:26:42 · 170 阅读 · 0 评论 -
LeetCode 46. 全排列(C++) 回溯法
给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]预备知识回溯法:一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试。回溯思路和算法以[1,2,3]为例第一层:i=0原创 2021-03-04 19:41:26 · 424 阅读 · 2 评论 -
LeetCode 416. 分割等和子集(C++) 动态规划+0-1背包
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集.前言作者在这里希望读者认真阅读前言部分。本题是经典的「NP 完全问题」,也就是说,如果你发现了该问题的原创 2021-03-03 22:02:24 · 474 阅读 · 2 评论 -
LeetCode 322. 零钱兑换(C++) 贪心+DFS
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3 解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输入:coins = [1], amount = 0输出:0示例 4:输入:co原创 2021-03-03 20:48:24 · 485 阅读 · 2 评论 -
LeetCode 309. 最佳买卖股票时机含冷冻期(C++) 动态规划
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]一种常用的方法是将「买入」和「卖出」分开进行考虑:「买入」为负收益,而「卖出」为正收益原创 2021-03-03 20:16:35 · 122 阅读 · 4 评论 -
LeetCode 221. 最大正方形(C++) 动态规划
在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。示例 1:输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]输出:4示例 2: 输入:matrix = [["0","1"],["1","0"]]输出:1示例 3:输入:matrix = [["0"]]输出:0提示:m == matr原创 2021-03-03 19:44:58 · 509 阅读 · 1 评论 -
LeetCode 198. 打家劫舍(C++) 动态规划
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2,7,9,3,原创 2021-03-03 19:25:31 · 131 阅读 · 2 评论 -
LeetCode 139. 单词拆分(C++) 动态规划
给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例 2:输入: s = "applepenapple", wordDict = [原创 2021-03-03 19:06:26 · 368 阅读 · 2 评论 -
LeetCode 70. 爬楼梯(C++) 动态规划
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶动态规划思路和算法我们用 f(x) 表示爬到第 x 级台阶的方案数,考虑原创 2021-03-02 10:11:08 · 371 阅读 · 0 评论 -
LeetCode 312. 戳气球(C++) 动态规划
有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。 这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。求所能获得硬币的最大数量。示例 1:输入:nums = [3,1,5,8]输出:167解释:nums原创 2021-03-01 19:25:02 · 615 阅读 · 0 评论 -
LeetCode 240. 搜索二维矩阵 II(C++) 修剪路线
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例 1:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5输出:true示例 2:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6原创 2021-02-27 21:48:45 · 173 阅读 · 0 评论 -
LeetCode 72. 编辑距离(C++) 动态规划
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')示例 2:输入:word1 = "intention原创 2021-02-27 18:11:03 · 426 阅读 · 1 评论 -
LeetCode 10. 正则表达式匹配(C++) 动态规划
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = "aa" p = "a"输出:false解释:"a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa" p = "a*"输出:true解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此原创 2021-02-27 15:35:51 · 222 阅读 · 1 评论 -
LeetCode 32. 最长有效括号(C++) 利用栈
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = "(()"输出:2解释:最长有效括号子串是 "()"示例 2:输入:s = ")()())"输出:4解释:最长有效括号子串是 "()()"示例 3:输入:s = ""输出:0class Solution {public: int longestValidParentheses(string s) { int maxans = 0;原创 2021-02-27 13:30:44 · 154 阅读 · 0 评论 -
LeetCode 22. 括号生成(C++) 回溯+深度搜索
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8深度搜索+回溯 思路:判断回溯很简单,拿到一个问题,你感觉如果不穷举一下就没法知道答案,那就可以开始回溯了。一般回溯的问题有三种:Find a path to success 有没有解原创 2021-02-27 11:45:17 · 249 阅读 · 0 评论 -
LeetCode 647. 回文子串(C++) 中心拓展
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1:输入:"abc"输出:3解释:三个回文子串: "a", "b", "c"示例 2:输入:"aaa"输出:6解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"提示:输入的字符串长度不会超过 1000 。中心拓展思路与算法计算有多少个回文子串的最朴素方法就是枚举出所有的回文子串,而枚举出所有的回文原创 2021-02-27 10:13:47 · 156 阅读 · 0 评论 -
LeetCode 5. 最长回文子串(C++) 动态规划
给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"示例 3:输入:s = "a"输出:"a"**```示例 4:**```bash输入:s = "ac"输出:"a"提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成动态规划class Solution {publ原创 2021-02-26 21:03:47 · 339 阅读 · 0 评论 -
LeetCode 2. 两数相加(C++) 数学加法本质(模拟)
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9], l2原创 2021-02-26 20:32:25 · 144 阅读 · 0 评论 -
LeetCode 55. 跳跃游戏(C++) 贪心算法
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。原创 2021-02-26 18:48:21 · 321 阅读 · 0 评论 -
LeetCode 142. 环形链表 II(C++) 快慢指针
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?示例 1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接原创 2021-02-26 18:37:33 · 187 阅读 · 0 评论 -
LeetCode 160. 相交链表(C++) 双指针法
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,原创 2021-02-26 15:50:15 · 111 阅读 · 0 评论 -
LeetCode 206. 反转链表(C++) 迭代
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* prev = nullptr;//前一个节点 ListNode* cur原创 2021-02-26 08:46:05 · 94 阅读 · 0 评论 -
LeetCode 141. 环形链表(C++) 快慢指针
给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:head = [3,2,0,-4], p原创 2021-02-24 20:30:12 · 246 阅读 · 0 评论 -
LeetCode 21. 合并两个有序链表(C++) 迭代合并
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。迭代思路我们可以用迭代的方法来实现上述算法。当 l1 和 l2 都不是空链表时,判断 l1 和 l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。算法首先,我们设定一个哨兵节点 prehead ,这可以在最后让我们比较容易地返回合并后的链表。我们维护一个 prev 指针,我们需要做的是调整它的 next 指针。然后,我们重复以下原创 2021-02-24 10:05:48 · 117 阅读 · 0 评论 -
LeetCode 136. 只出现一次的数字(C++) 异或运算
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4方法一:位运算如果不考虑时间复杂度和空间复杂度的限制,这道题有很多种解法,可能的解法有如下几种。1、使用集合存储数字。遍历数组中的每个数字,如果集合中没有该数字,则将该数字加入集合,如果集合中已经有该数字,则将该数字从集合原创 2021-02-22 15:30:39 · 109 阅读 · 0 评论 -
LeetCode 560. 和为K的子数组(C++) 哈希表
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。前缀和 + 哈希表优化思路和算法我们可以基于方法一利用数据结构进行进一步的优化,我们知道方法一的瓶颈在于对每个 i,我们需要枚举所有的 j 来判断原创 2021-02-21 17:41:17 · 504 阅读 · 0 评论 -
LeetCode 448. 找到所有数组中消失的数字(C++) 原数组修改
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]原地修改思路及解法我们可以用一个哈希表记录数组 nums 中的数字,由于数字范围均在 [1,n] 中,记录数字后我们再利用哈希表检查原创 2021-02-21 12:14:15 · 152 阅读 · 0 评论 -
LeetCode 287. 寻找重复数(C++) 快慢指针
给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。示例 1:输入:nums = [1,3,4,2,2]输出:2示例 2:输入:nums = [3,1,3,4,2]输出:3示例 3:输入:nums = [1,1]输出:1示例 4:输入:nums = [1,1,2]输出:1题解来源基本上将这里面的题解浏览了一遍,发现快慢指针这种解法原创 2021-02-21 11:09:14 · 328 阅读 · 0 评论 -
LeetCode 283. 移动零(C++) 双指针
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。双指针思路及解法使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。注意到以下性质:左指针左边均为非零数;右指针左边直到左指针处均为零。因此每原创 2021-02-20 21:07:01 · 253 阅读 · 3 评论 -
LeetCode 238. 除自身以外数组的乘积(C++) 左侧乘以右侧
给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组原创 2021-02-20 19:58:14 · 181 阅读 · 0 评论 -
LeetCode 169. 多数元素(C++) Boyer-Moore 算法
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2Boyer-Moore 投票算法思路如果我们把众数记为 +1,把其他数记为 −1,将它们全部加起来,显然和大于 0,从结果本身我们可以看出众数比其他数多。算法Boyer-Moore 算法的本质和方法四中的分治十分类似。我们首先原创 2021-02-20 17:42:06 · 181 阅读 · 0 评论 -
LeetCode 152. 乘积最大子数组(C++) 动态规划
给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。动态规划思路和算法不难给出这样的实现:class Solution {public: int maxProduct(vector<int>原创 2021-02-20 16:12:20 · 211 阅读 · 0 评论 -
LeetCode 121. 买卖股票的最佳时机(C++) 动态规划
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能原创 2021-02-20 15:26:03 · 156 阅读 · 0 评论 -
LeetCode 79. 单词搜索(C++) 回溯
给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = "ABCCED", 返回 true给定 word = "SEE", 返回 true给定 word = "ABCB", 返回 f原创 2021-02-20 12:55:52 · 100 阅读 · 0 评论 -
LeetCode 64.最小路径和(C++)动态规划
动态规划class Solution {public: int minPathSum(vector<vector<int>>& grid) { if (grid.size() == 0 || grid[0].size() == 0) { //方格不存在时 直接返回零 return 0; } //获取行列大小 int rows = grid.size(), ..原创 2021-02-17 12:17:54 · 184 阅读 · 0 评论