力扣经典习题
找工作用
want you tell me why
处于并将长期处于程序员初级阶段
展开
-
前序、中序、后序遍历非递归
1.前序遍历/*struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x):val(x),left(NULL),right(NULL){}}*/vector<int> preorder(TreeNode* root){ if(root==NULL) return {}; stack&原创 2020-08-11 22:54:38 · 177 阅读 · 0 评论 -
判断是当前年份的第几天
#include<iostream>#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>#include<vector>#include<map>using namespace std;int main() { map<int, int> mp; int year, month, day; while.原创 2020-08-03 14:57:42 · 138 阅读 · 0 评论 -
376. 摆动序列
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如,[1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3)是正负交替出现的。相反, [1,4,7,2,5]和[1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个...原创 2020-01-11 14:30:37 · 215 阅读 · 1 评论 -
318. 最大单词长度乘积-将单词转化为位运算
给定一个字符串数组words,找到length(word[i]) * length(word[j])的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。示例1:输入: ["abcw","baz","foo","bar","xtfn","abcdef"]输出: 16解释: 这两个单词为 "abcw", "xtfn"。示...原创 2020-01-11 13:44:34 · 276 阅读 · 0 评论 -
【动态规划】-6.打家劫舍问题
1.198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金...原创 2020-01-07 16:17:58 · 907 阅读 · 0 评论 -
【贪心算法】-8. 最大数
179.最大数给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210示例2:输入: [3,30,34,5,9]输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/largest-num...原创 2020-01-07 10:46:57 · 824 阅读 · 0 评论 -
【力扣总结】环形链表相关题目
1.160. 相交链表编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 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输入...原创 2020-01-06 21:03:28 · 241 阅读 · 0 评论 -
【LRU缓存机制】比较有意思的题目
运用你所掌握的数据结构,设计和实现一个LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的...原创 2020-01-06 16:16:24 · 168 阅读 · 0 评论 -
深度优先遍历-131. 分割回文串
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入:"aab"输出:[ ["aa","b"], ["a","a","b"]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-partitioning著作权归领扣网络所有。商业转载请联系...原创 2020-01-05 14:51:24 · 130 阅读 · 0 评论 -
【路径总和问题】
1.给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明:叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4...原创 2020-01-04 12:29:58 · 193 阅读 · 0 评论 -
格雷编码
格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。示例 1:输入:2输出:[0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的n,其格雷编码序列并不唯一。例如,[0,2,3,1]也是一个有效的格雷编码序列。00 -...原创 2020-01-03 14:42:29 · 203 阅读 · 0 评论 -
getline的使用-71.简化路径
以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..)表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有...原创 2020-01-02 16:44:38 · 109 阅读 · 0 评论 -
【二分法】-69. x 的平方根
实现int sqrt(int x)函数。计算并返回x的平方根,其中x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。来源:力扣(LeetCode)链接:https://le...原创 2020-01-02 15:40:04 · 105 阅读 · 0 评论 -
【螺旋矩阵1】
54. 螺旋矩阵给定一个包含m x n个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,...原创 2020-01-02 10:06:40 · 156 阅读 · 0 评论 -
【螺旋矩阵2】
59. 螺旋矩阵 II给定一个正整数n,生成一个包含 1 到n2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/spiral-matrix-ii著作权归领扣...原创 2020-01-02 10:05:36 · 151 阅读 · 0 评论 -
【区间类问题】2.插入区间
57. 插入区间给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。class Solution {public: vector<vector<int>> insert(vector<vector<int>>& inter...原创 2020-01-02 09:42:24 · 183 阅读 · 0 评论 -
【区间类问题】1.合并区间
56. 合并区间给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视...原创 2020-01-02 09:26:21 · 326 阅读 · 0 评论 -
【二分法】4.34. 在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(log n) 级别。如果数组中不存在目标值,返回[-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例2:输入: nums = [5,7,7,8,8,10],...原创 2020-01-01 20:30:08 · 185 阅读 · 0 评论 -
36. 有效的数独
判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用'.'表示。来源:力扣(LeetCode)链接:https://leetcode-...原创 2020-01-01 16:30:11 · 161 阅读 · 0 评论 -
【二分法】3.35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0来...原创 2020-01-01 15:35:19 · 95 阅读 · 0 评论 -
【二分法】2.34. 在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(log n) 级别。如果数组中不存在目标值,返回[-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例2:输入: nums = [5,7,7,8,8,10],...原创 2020-01-01 15:34:24 · 110 阅读 · 0 评论 -
【二分法】1.33. 搜索旋转排序数组(力扣总结)
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是O(logn) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2]...原创 2020-01-01 15:23:18 · 137 阅读 · 0 评论 -
18. 四数之和
给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为...原创 2019-12-31 11:12:35 · 73 阅读 · 0 评论 -
15.三数之和
本来不想做,太麻烦了,但是看到评论这段话让我有了斗志比如这道题就是一个非常经典的题目,很多公司的面试都会聊这道题。这道 medium 难度的问题,很适合展示一个有着丰富生活经验的程序员,如何在不需要算法基础的情况下,凭借人类的聪明才智,找到解决方案好吧:加油;给定一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?...原创 2019-12-31 09:53:36 · 96 阅读 · 0 评论 -
1286. 字母组合迭代器(字母的全排列有关)
请你设计一个迭代器类,包括以下内容:一个构造函数,输入参数包括:一个有序且字符唯一的字符串characters(该字符串只包含小写英文字母)和一个数字combinationLength。函数next(),按字典序返回长度为combinationLength 的下一个字母组合。函数hasNext(),只有存在长度为combinationLength 的下一个字母组合...原创 2019-12-30 21:02:09 · 240 阅读 · 0 评论 -
8. 字符串转换整数 (atoi)
请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可...原创 2019-12-30 19:59:45 · 90 阅读 · 0 评论 -
1286.字母组合迭代器
请你设计一个迭代器类,包括以下内容:一个构造函数,输入参数包括:一个有序且字符唯一的字符串characters(该字符串只包含小写英文字母)和一个数字combinationLength。函数next(),按字典序返回长度为combinationLength 的下一个字母组合。函数hasNext(),只有存在长度为combinationLength 的下一个字母组合...原创 2019-12-30 15:25:09 · 281 阅读 · 0 评论 -
987.二叉树的垂序遍历(通俗易懂吧应该)
给定二叉树,按垂序遍历返回其结点值。对位于(X, Y)的每个结点而言,其左右子结点分别位于(X-1, Y-1)和(X+1, Y-1)。把一条垂线从X = -infinity移动到X = +infinity,每当该垂线与结点接触时,我们按从上到下的顺序报告结点的值( Y坐标递减)。如果两个结点位置相同,则首先报告的结点值较小。按X坐标顺序返回非空报告的列表。每...原创 2019-11-30 11:35:19 · 196 阅读 · 0 评论 -
981.基于时间的键值存储(有关运算符重载)
创建一个基于时间的键值存储类TimeMap,它支持下面两个操作:1. set(string key, string value, int timestamp)存储键key、值value,以及给定的时间戳timestamp。2. get(string key, int timestamp)返回先前调用set(key, value, timestamp_prev)所存储的值,...原创 2019-11-29 12:01:49 · 173 阅读 · 0 评论 -
962.最大宽度坡(有关谓词和struct的使用)
给定一个整数数组A,坡是元组(i, j),其中i < j且A[i] <= A[j]。这样的坡的宽度为j - i。找出A中的坡的最大宽度,如果不存在,返回 0 。示例 1:输入:[6,0,8,2,1,5]输出:4解释:最大宽度的坡为 (i, j) = (1, 5): A[1] = 0 且 A[5] = 5.示例 2:输入:[9,8,1,0,...原创 2019-11-28 14:33:10 · 153 阅读 · 0 评论 -
子数组最大和问题
1.最大子序和给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-subarr...原创 2019-11-26 10:37:46 · 2426 阅读 · 0 评论 -
最大公约数
//求最大公约数 int is(int a,int b){ while (a % b != 0) { int c = a % b; a = b; b = c; } return b; }原创 2019-11-25 20:21:10 · 94 阅读 · 0 评论 -
最小差值问题
1.给定一个整数数组 A,对于每个整数 A[i],我们可以选择任意x 满足-K <= x <= K,并将x加到A[i]中。在此过程之后,我们得到一些数组B。返回 B的最大值和 B的最小值之间可能存在的最小差值。示例 1:输入:A = [1], K = 0输出:0解释:B = [1]示例 2:输入:A = [0,10], K = 2...原创 2019-11-25 16:36:23 · 1316 阅读 · 0 评论 -
865. 具有所有最深结点的最小子树
给定一个根为root的二叉树,每个结点的深度是它到根的最短距离。如果一个结点在整个树的任意结点之间具有最大的深度,则该结点是最深的。一个结点的子树是该结点加上它的所有后代的集合。返回能满足“以该结点为根的子树中包含所有最深的结点”这一条件的具有最大深度的结点。示例:输入:[3,5,1,6,2,0,8,null,null,7,4]输出:[2,7,4]解释:我们返...原创 2019-11-22 21:35:52 · 102 阅读 · 0 评论 -
846:一手顺子(希望大家可以理解呀)
爱丽丝有一手(hand)由整数数组给定的牌。现在她想把牌重新排列成组,使得每个组的大小都是 W,且由 W 张连续的牌组成。如果她可以完成分组就返回 true,否则返回 false。示例 1:输入:hand = [1,2,3,6,2,3,4,7,8], W = 3输出:true解释:爱丽丝的手牌可以被重新排列为 [1,2,3],[2,3,4],[6,7,8]。示例 2:...原创 2019-11-21 20:38:09 · 134 阅读 · 0 评论 -
819.最常见的单词(奔着通俗易懂去的)
给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,而且答案唯一。禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。示例:输入:paragraph = "Bob hit a ball, the hit BALL flew far af...原创 2019-11-19 22:15:59 · 233 阅读 · 0 评论 -
814.二叉树剪枝(神奇的递归)
给定二叉树根结点root,此外树的每个结点的值要么是 0,要么是 1。返回移除了所有不包含 1 的子树的原二叉树。( 节点 X 的子树为 X 本身,以及所有 X 的后代。)示例1:输入: [1,null,0,0,1]输出: [1,null,0,null,1]解释:只有红色节点满足条件“所有不包含 1 的子树”。右图为返回的答案。示例2:输入: [1,0,1,...原创 2019-11-19 21:05:54 · 275 阅读 · 0 评论 -
809 情感丰富的文字:效率不是很高:但是也算通俗易懂吧
有时候人们会用重复写一些字母来表示额外的感受,比如 "hello" -> "heeellooo", "hi" -> "hiii"。我们将相邻字母都相同的一串字符定义为相同字母组,例如:"h", "eee", "ll", "ooo"。对于一个给定的字符串 S ,如果另一个单词能够通过将一些字母组扩张从而使其和 S 相同,我们将这个单词定义为可扩张的(stretchy)。扩张操作定义如...原创 2019-11-19 16:50:21 · 281 阅读 · 0 评论 -
713.乘积小于k的子数组
给定一个正整数数组nums。找出该数组内乘积小于k的连续的子数组的个数。示例 1:输入: nums = [10,5,2,6], k = 100输出: 8解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于100的子数组。class...原创 2019-11-16 15:07:51 · 113 阅读 · 0 评论 -
力扣:692前k个高频单词
给一非空的单词列表,返回前k个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2输出: ["i", "love"]解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。 ...原创 2019-11-15 09:25:40 · 291 阅读 · 0 评论