Leetcode刷题笔记
alpaca_ll
这个作者很懒,什么都没留下…
展开
-
LeetCode算法练习——树(三)
LeetCode501. 二叉搜索树中的众数给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。class Solution{public: vector<int> findMode(TreeNode *root){ vector<int> res; // 要返回的结果 // max_count: 结果元素的出现次数 // cur_count: 当前元素的出现次数原创 2020-08-07 15:23:05 · 301 阅读 · 0 评论 -
LeetCode算法练习——树(二)
树的学习先从一些比较简单的入门题开始,考察的还是对于树的递归形式的理解。LeetCode面试题 04.04. 检查平衡性 && 剑指 Offer 55 - II. 平衡二叉树实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1(此题本人的解法也包含了求二叉树的最大深度)。class Solution {public: bool res = true; int maxDepth(TreeNode* root原创 2020-08-07 09:04:20 · 266 阅读 · 0 评论 -
LeetCode算法练习——回溯&&深搜(三)
LeetCode51. N皇后n皇后问题研究的是如何将 n个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。示例:输入: 4输出: [ [".Q..", // 解法 1 "...Q", "Q...", "..Q."], ["..Q.", // 解法 2 "Q...", "....原创 2020-07-15 21:44:55 · 153 阅读 · 0 评论 -
LeetCode算法练习——回溯&&深搜(二)
下面整理一下排列搜索类的回溯算法,该类题目数组中的元素需要重复访问,但访问结果构成的集合又不能重复,因此需要用visited数组标记该元素有没有被访问过,这样在下一次搜索时会避开。LeetCode46. 全排列 && LeetCode47. 全排列 IILeetCode46给定一个 没有重复 数字的序列,LeetCode47(剑指 Offer 38. 字符串的排列也与之类似,只不过变换成了字符形式)则要求给出可重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,原创 2020-07-15 17:28:10 · 185 阅读 · 0 评论 -
LeetCode算法练习——回溯&&深搜(一)
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯在迷宫搜索中使用很常见,就是这条路走不通,然后返回前一个路口,继续下一条路。回溯算法说白了就是穷举法。不过回溯算法使用剪枝函数,剪去一些不可能到达 最终状态(即答案状态)的节点,从而减少状态空间树节点的生成。回溯法是一个既带有系统性又带有跳跃性的的搜索算法。它在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,原创 2020-07-15 14:54:03 · 434 阅读 · 0 评论 -
LeetCode算法练习——动态规划提高(五)
LeetCode309. 最佳买卖股票时机含冷冻期给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]定义状态:...原创 2020-07-03 11:30:57 · 216 阅读 · 0 评论 -
LeetCode算法练习——动态规划提高(四)
LeetCode139. 单词拆分给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定s 是否可以被空格拆分为一个或多个在字典中出现的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例 2:输入: s = "applepenapple", wordDict = ["apple", "pen.原创 2020-06-27 13:24:22 · 226 阅读 · 0 评论 -
LeetCode算法练习——树(一)
树的定义,想必大家都不陌生,在树正式进入前,我们需要回顾一下二叉树的几种遍历方法,尤其很多题目都是围绕树的递归遍历进行考察。树的递归遍历struct Node{ int val; Node * left; Node * right; Node(int x) :val(x), left(nullptr), right(nullptr){};}; void creatBinaryTree(Node * &root){ //树的创建 int x; cin >原创 2020-06-24 22:20:31 · 295 阅读 · 1 评论 -
LeetCode算法练习——链表(二)
LeetCode23. 合并K个排序链表合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6思路:将多条链表中的每个节点值压入同一个容器; 对这些容器内的元素进行排序; 最后将容器内的元素串联成链表。class Solution {public: L..原创 2020-06-24 21:38:32 · 149 阅读 · 0 评论 -
LeetCode算法练习——链表(一)
LeetCode206. 反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL该题虽然为链表的基础操作,但是听说面试很常考,逻辑也很容易出错。我们需要两个指针,一个作为游标,一个作为反转链表的头节点,操作示意图如下:class Solution {public: ListNode* reverseList(ListNode* head) {原创 2020-06-24 20:37:32 · 268 阅读 · 0 评论 -
LeetCode算法练习——动态规划提高(三)
LeetCode剑指 Offer 46. 把数字翻译成字符串给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"此题最关键的是将数值转换成字符串,然后判定连续原创 2020-06-24 17:04:42 · 235 阅读 · 0 评论 -
LeetCode算法练习——动态规划提高(二)
这一部分,对已经做过的技术类型的dp问题进行总结。LeetCode62. 不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向右 -> 向下2. 向右 -> 向下 -&原创 2020-06-23 23:00:53 · 384 阅读 · 0 评论 -
LeetCode算法练习——动态规划提高(一)
LeetCode5. 最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"对于一个子串而言,如果它是回文串,并且长度大于 2,那么将它首尾的两个字母去除之后,它仍然是个回文串。例如对于字符串 “ababa”,如果我们已经知道 “bab”是回文串,那么 “ababa” 一定是回文串,这是因为它的首尾.原创 2020-06-23 21:48:36 · 239 阅读 · 0 评论 -
LeetCode算法练习——动态规划入门(三)
LeetCode198. 打家劫舍 && LeetCode 面试题 17.16. 按摩师打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,原创 2020-06-19 15:39:17 · 251 阅读 · 0 评论 -
LeetCode算法练习——动态规划入门(二)
LeetCode746. 使用最小花费爬楼梯数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例 1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。 示例 2:原创 2020-06-19 14:52:35 · 252 阅读 · 0 评论 -
LeetCode算法练习——动态规划入门(一)
动态规划动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。动态规划往往用于优化递归问题,例如斐波那契数列,如果运用递归的方式来求解会重复原创 2020-06-19 13:13:31 · 341 阅读 · 0 评论 -
LeetCode算法练习——字典树(一)
字典树 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。字典树的性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符 从根节点到某一个节点,路径上经过的字符连接起来,就是该节点对应的字符串 每个节点的所有子节点包含的字符都不相同。LeetCode20...原创 2020-06-18 20:30:40 · 478 阅读 · 0 评论 -
Leetcode10 正则表达式匹配
本题为Leetcode上的困难题,给出了别人相应的题解,供自己和相关爱好者参考学习。题目描述请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整转载 2020-06-14 16:45:45 · 458 阅读 · 0 评论