LeetCode
刷题
LifelongLearningPan
个人学习笔记,不喜勿喷~
展开
-
187. 重复的DNA序列;227. 基本计算器 II;767. 重构字符串
所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来查找目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。示例:输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"输出:["AAAAACCCCC", "CCCCCAAAAA"]class Solution {public: vector.原创 2020-11-30 14:38:19 · 141 阅读 · 0 评论 -
557. 反转字符串中的单词 III;841. 钥匙和房间;486. 预测赢家;71. 简化路径
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例:输入:"Let's take LeetCode contest"输出:"s'teL ekat edoCteeL tsetnoc"提示: 在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。class Solution {public: string reverseWords(string s) { string res; ...原创 2020-09-03 09:18:29 · 123 阅读 · 0 评论 -
332. 重新安排行程;657. 机器人能否返回原点;214. 最短回文串
给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。说明: 如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 ["JFK", "LGA"] 与 ["JFK", "LGB"] 相比就更小,排序更靠前 所有的机场都用三个大写字母表示(机场代码)。 假定所有机票至少存在一种合理的行程。...原创 2020-08-29 10:01:58 · 150 阅读 · 0 评论 -
179. 最大数;201. 数字范围按位与;491. 递增子序列;168. Excel表列名称
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210示例 2:输入: [3,30,34,5,9]输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。class Solution {public: string largestNumber(vector<int>& nums) { if (nums.size() == 0) return "";原创 2020-08-26 08:16:08 · 250 阅读 · 0 评论 -
852. 山脉数组的峰顶索引;162. 寻找峰值;165. 比较版本号;166. 分数到小数;171. Excel表列序号;172. 阶乘后的零
我们把符合下列属性的数组 A 称作山脉: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]给定一个确定为山脉的数组,返回任何满足 A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A....原创 2020-08-22 08:45:58 · 189 阅读 · 1 评论 -
696. 计数二进制子串;134. 加油站(贪心算法);147. 对链表进行插入排序;143. 重排链表;150. 逆波兰表达式求值
给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。重复出现的子串要计算它们出现的次数。示例 1 :输入: "00110011"输出: 6解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。请注意,一些重复出现的子串要计算它们出现的次数。另外,“00110011”不是有效的子串,因为所有的0(和1)没有组合在一起。示例 2 :输入: "原创 2020-08-21 16:45:43 · 151 阅读 · 0 评论 -
字典树/Trie/前缀树-LeetCode总结:720词典中最长的单词;127. 单词接龙;677. 键值映射;面试题 17.17. 多次搜索;648. 单词替换
MyTrie结构体和相关操作函数typedef struct MyTrie { bool is_word; vector<MyTrie*> next; MyTrie():is_word(false) { next.resize(26,nullptr); }}MT;void insertWord(MT* cur, const string& word) { for (auto &w:word) { .原创 2020-08-19 16:40:22 · 246 阅读 · 0 评论 -
代码风格规范-谷歌
Google C++ 风格指南 头文件 self-contained头文件:头文件本身依赖的其它头文件,需要全部包含。 #define保护:<PROJECT>_<PATH>_<FILE>_H_ #ifndef FOO_BAR_BAZ_H_ #define FOO_BAR_BAZ_H_ ... #endif // FOO_BAR_BAZ_H_ 前置声明:尽可能地避免使用前置声明。使用 #include 包含需要的头文.原创 2020-08-07 10:19:28 · 403 阅读 · 2 评论 -
914. 卡牌分组;999. 可以被一步捕获的棋子数;1143. 最长公共子序列
给定一副牌,每张牌上都写着一个整数。此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌。 组内所有的牌上都写着相同的整数。仅当你可选的 X >= 2 时返回 true。示例 1:输入:[1,2,3,4,4,3,2,1]输出:true解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]示例 2:输入:[1,1,1,2,2,2,3,3]输出:false解释:没有满足要求的分组。...原创 2020-08-07 10:11:15 · 119 阅读 · 0 评论 -
C++多线程/互斥锁/条件变量/信号量思维很重要;设计线程安全队列;1114按序打印;1115交替打印FooBar;1116打印零与奇偶数;1117H2O 生成1195交替打印字符串1226哲学家进餐
注://互斥量:unique_lock类封装,构造函数内加锁,析构函数自动解锁mutex mut;unique_lock<mutex> lock(mut);//范围语句结束才自动释放锁//条件变量:一般配合互斥量使用condition_variable cond;int cond0=1,cond1=0,cond2=0;//类似信号量PV思路P操作:for(...){ unique_lock<mutex> lock(mut); cond.wait(原创 2020-07-26 20:11:09 · 265 阅读 · 0 评论 -
209. 长度最小的子数组;445. 两数相加 II;836. 矩形重叠;892. 三维形体的表面积;289. 生命游戏;392. 判断子序列
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。示例:输入:s = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。进阶: 如果你已经完成了 O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。class Solution {//滑动窗口public: ...原创 2020-07-27 08:30:32 · 199 阅读 · 0 评论 -
面试题 01.01. 判定字符是否唯一;1160. 拼写单词;202. 快乐数;118. 杨辉三角;695. 岛屿的最大面积(并查集);面试题 01.07. 旋转矩阵
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。示例 1:输入: s = "leetcode"输出: false示例 2:输入: s = "abc"输出: true限制: 0 <= len(s) <= 100 如果你不使用额外的数据结构,会很加分。class Solution {public: bool isUnique(string astr){ if(astr.size()<=1)return ...原创 2020-07-24 17:17:38 · 151 阅读 · 0 评论 -
判断两个数是否互质;409. 最长回文串;面试题 01.06. 字符串压缩;面试题 17.16. 按摩师
bool gcd(int a,int b){ if(a==1||b==1)return true; if(b==0)return false; return helper1(b,a%b);}给定N和K,求互不相同的正整数x,y,z使得x+y+z=N,且gcd(x,y)=gcd(x,z)=gcd(y,z)=K。条件:1 ≤N, K≤ 1e18思路:等式两边除K,得到x'+y'+z'=N'=N/K,且x',y',z'两两互素。当N'为偶数,直接构造x'=1, y..原创 2020-07-24 15:50:29 · 346 阅读 · 0 评论 -
C++ lambda;329. 矩阵中的最长递增路径(dfs+记忆化/拓扑排序);图出发是否能返回远点(dfs/拓扑排序);最短路径(Floyd+迪杰斯特拉);785. 判断二分图;
//1 一号节点出发能否遍历回一号节点 无向图 dfs可bfs不可struct Point{ int x,y,weight; };bool Gdfs(int cur,vector<vector<bool>> &GMarix){ for(int i=1;i<GMarix.size();++i) if(GMarix[cur][i]){ if(i==1)return true; GMarix[.原创 2020-07-25 10:25:54 · 321 阅读 · 0 评论 -
210. 课程表 II;1162. 地图分析;380. 常数时间插入、删除和获取随机元素
现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例 1:输入: 2, [[1,0]]输出: [0,1]解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为 [.原创 2020-07-24 08:46:57 · 99 阅读 · 0 评论 -
剑指 Offer 45. 把数组排成最小的数;剑指 Offer 46. 把数字翻译成字符串;剑指 Offer 44. 数字序列中某一位的数字
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: "102"示例 2:输入: [3,30,34,5,9]输出: "3033459"提示: 0 < nums.length <= 100说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数 拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0class Solution {...原创 2020-07-23 09:06:40 · 184 阅读 · 0 评论 -
剑指 Offer 55 - II. 平衡二叉树;剑指 Offer 60. n个骰子的点数;剑指 Offer 61. 扑克牌中的顺子
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \4 ...原创 2020-07-22 08:21:56 · 137 阅读 · 0 评论 -
剑指 Offer 43. 1~n整数中1出现的次数;剑指 Offer 41. 数据流中的中位数;剑指 Offer 56 - I. - II. 数组中数字出现的次数
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。示例 1:输入:n = 12输出:5示例 2:输入:n = 13输出:6限制: 1 <= n < 2^31class Solution {public: int countDigitOne(int n) { int count = 0; fo...原创 2020-07-21 17:43:28 · 103 阅读 · 0 评论 -
30. 串联所有单词的子串;37. 解数独;35. 搜索插入位置;278. 第一个错误的版本
给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。示例 1:输入: s = "barfoothefoobarman", words = ["foo","bar"]输出:[0,9]解释:从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar" 。输出的顺序不重要, [9,0]...原创 2020-07-19 15:42:50 · 140 阅读 · 0 评论 -
51. N皇后;剑指 Offer 51. 数组中的逆序对
示例:输入: 4输出: [[".Q..", // 解法 1 "...Q", "Q...", "..Q."],["..Q.", // 解法 2 "Q...", "...Q", ".Q.."]]解释: 4 皇后问题存在两个不同的解法。提示: 皇后,是国际象棋中的棋子,意味着国王的妻子。皇后只做一件事,那就是“吃子”。当她遇见可以吃的棋子时,就迅速冲上去吃掉棋子。当然,她横、竖、斜都可走一到七步,可进可退。(引用自 百度百科 - 皇后 )...原创 2020-07-15 14:34:22 · 135 阅读 · 0 评论 -
994. 腐烂的橘子;199. 二叉树的右视图
class Solution {/广度搜索-队列public: int orangesRotting(vector<vector<int>>& grid) { int m=grid.size(),n=grid[0].size(); int cnt=0;//鲜橘子个数 queue<pair<int,int>>q; for(int i=0;i<m;++i) ...原创 2020-07-14 17:28:19 · 197 阅读 · 0 评论 -
174. 地下城游戏;剑指 Offer 40. 最小的k个数;378. 有序矩阵中第K小的元素;703. 数据流中的第K大元素
一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健康点数);其他房间要么是空的(房间里的值为 0),要么包含增加骑士健康点数的魔法球(若房间里的值为正整数,则表示骑士将增加健康原创 2020-07-12 20:23:45 · 213 阅读 · 0 评论 -
386. 字典序排数;440. 字典序的第K小数字
给定一个整数 n, 返回从 1 到 n 的字典顺序。例如,给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000。class Solution { vector<int>res;public: vector<int> lexicalOrder(int n) { for(int i=1;i<=9&原创 2020-07-08 16:43:21 · 207 阅读 · 0 评论 -
32. 最长有效括号;海量数据处理
给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"class Solution {//动态规划 二维 超时 O(n^3)public: int longestValidParentheses(string s) { if(s.size()<=1)return原创 2020-07-08 10:21:12 · 200 阅读 · 0 评论 -
718. 最长重复子数组;424. 替换后的最长重复字符
给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例 1:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出: 3解释:长度最长的公共子数组是 [3, 2, 1]。说明: 1 <= len(A), len(B) <= 1000 0 <= A[i], B[i] < 100class Solution {动态二维+无伪头行列public: int findLength(vector&...原创 2020-07-03 10:02:15 · 136 阅读 · 0 评论 -
173. 二叉搜索树迭代器;剑指 Offer 38. 字符串的排列
实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} *原创 2020-06-30 10:44:31 · 156 阅读 · 0 评论 -
889. 根据前序和后序遍历构造二叉树;114. 二叉树展开为链表
返回与给定的前序和后序遍历匹配的任何二叉树。pre 和 post 遍历中的值是不同的正整数。示例:输入:pre = [1,2,4,5,3,6,7], post = [4,5,2,6,7,3,1]输出:[1,2,3,4,5,6,7]提示: 1 <= pre.length == post.length <= 30 pre[] 和 post[] 都是 1, 2, ..., pre.length 的排列 每个输入保证至少有一个答案。如果有多个...原创 2020-06-24 16:05:10 · 159 阅读 · 0 评论 -
133. 克隆图;232. 用栈实现队列;225. 用队列实现栈
给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。class Node { public int val; public List<Node> neighbors;}测试用例格式:简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1(val = 1),第二个节点值为 2(val = 2),以此类推。该图在测试用例中使用邻接列表表示。邻接列...原创 2020-06-20 09:59:28 · 124 阅读 · 0 评论 -
127. 单词接龙;131. 分割回文串
给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则: 每次转换只能改变一个字母。 转换过程中的中间单词必须是字典中的单词。说明: 如果不存在这样的转换序列,返回 0。 所有单词具有相同的长度。 所有单词只由小写字母组成。 字典中不存在重复的单词。 你可以假设 beginWord 和 endWord 是非空的,且二者不相同。示例 1...原创 2020-06-15 09:11:19 · 170 阅读 · 0 评论 -
386. 字典序排数;129. 求根到叶子节点数字之和
给定一个整数 n, 返回从 1 到 n 的字典顺序。例如,给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000。/*思路:i=1:循环i*10+j,其中0<=j<=9i=2:...i=9:*/class Solution { vector<int>res;public: vector<int> l原创 2020-06-08 21:16:12 · 158 阅读 · 0 评论 -
109有序链表转换二叉搜索树;116. 填充每个节点的下一个右侧节点指针;117. 填充每个节点的下一个右侧节点指针 II
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / /-10 5class Solution {//方法一:二分 断开链表 得考虑d...原创 2020-06-01 10:59:52 · 176 阅读 · 0 评论 -
93. 复原IP地址;103. 二叉树的锯齿形层次遍历
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔。示例:输入: "25525511135"输出: ["255.255.11.135", "255.255.111.35"]class Solution {//回溯法 vector<string>res; string sel;public: vector<string>.原创 2020-05-31 22:42:49 · 195 阅读 · 0 评论 -
717. 1比特与2比特字符;89. 格雷编码-镜像反射法-2进制码转格雷码;92反转链表 II
有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10 或 11)来表示。现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。给定的字符串总是由0结束。示例 1:输入:bits = [1, 0, 0]输出: True解释:唯一的编码方式是一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。示例 2:输入:bits = [1, 1, 1, 0]输出: False解释:唯一的编码方式是两比特字符和两比特字符。所以最...原创 2020-05-29 08:56:55 · 405 阅读 · 0 评论 -
82删除排序链表中的重复元素 II;86分隔链表-1-2;90子集 II
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3class Solution {public: ListNode* deleteDuplicates(ListNode* head) { if(!head|原创 2020-05-28 10:42:30 · 181 阅读 · 0 评论 -
60第k个排列(康托);73矩阵置零;74搜索二维矩阵;33搜索旋转排序数组;81搜索旋转排序数组 II
给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" "132" "213" "231" "312" "321"给定 n 和 k,返回第 k 个排列。说明: 给定 n 的范围是 [1, 9]。 给定 k 的范围是[1, n!]。示例 1:输入: n = 3, k = 3输出: "213"示例 2:输入...原创 2020-05-27 08:29:16 · 139 阅读 · 0 评论 -
50Pow(x, n);54螺旋矩阵;59螺旋矩阵 II;61旋转链表
实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明: -100.0 < x < 100.0 n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。class...原创 2020-05-26 10:45:24 · 203 阅读 · 0 评论 -
415字符串相加;43字符串相乘;46全排列;47全排列 II
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包含任何前导零。 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。class Solution {public: string addStrings(string num1, string num2) { ...原创 2020-05-25 10:47:13 · 325 阅读 · 0 评论 -
36有效的数独;41缺失的第一个正数
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 '.' 表示。示例 1:输入:[ ["5","3",".",".","7",".",".",".","."], ["6",".",".","1","9"...原创 2020-05-24 08:18:35 · 243 阅读 · 0 评论 -
LeetCode刷题总结之一
1.*数据结构:字典树/前缀树/Trie树-immutable;红黑树/对称二叉B树;AVL/二叉平衡查找树;二叉查找/排序/搜索树;最大/小堆-优先队列;二叉树;树;2.*基础算法:https://github.com/azl397985856/leetcode/blob/master/thinkings/basic-algorithm.md3.*思路:(1)没有排序则先排序!!!(2)O(n) 时间复杂度& O(1) 空间复杂度||两数和:双指针(滑动窗口)①while(l<r原创 2020-05-20 10:48:52 · 1307 阅读 · 0 评论 -
并查集:721账户的合并;947移除最多的同行或同列石头;959由斜杠划分区域
给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该帐户的邮箱地址。现在,我们想合并这些帐户。如果两个帐户都有一些共同的邮件地址,则两个帐户必定属于同一个人。请注意,即使两个帐户具有相同的名称,它们也可能属于不同的人,因为人们可能具有相同的名称。一个人最初可以拥有任意数量的帐户,但其所有帐户都具有相同的名称。合并帐户后,按以下格式返回帐户:每个帐户的第一个元素是名称,原创 2020-05-19 12:14:25 · 185 阅读 · 0 评论