
LeetCode
LeetCode每日一题
July_zh
越努力越幸运
展开
-
剑指 Offer 06. 从尾到头打印链表 | C++
难度:简单输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000思路:栈记录,先进先出class Solution {public: vector<int> reversePrint(ListNode* head) { vector<int> ans; stack<int&g原创 2022-05-06 22:31:30 · 348 阅读 · 1 评论 -
剑指 Offer 30. 包含min函数的栈 | C++
难度:简单定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top(); --> 返回原创 2022-05-04 22:03:19 · 1357 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列 | C++
难度:简单用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“app原创 2022-05-04 21:48:11 · 160 阅读 · 0 评论 -
LeetCode215. 数组中的第K个最大元素
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4提示:1 <= k <= nums.length <= 104-104 <= nums[i] <= 104来源:力扣(LeetCode)链接:原创 2022-02-18 22:28:36 · 671 阅读 · 0 评论 -
LeetCode23. 合并K个升序链表【优先队列】
难度:困难题目描述:给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示原创 2021-08-29 20:53:09 · 212 阅读 · 0 评论 -
LeetCode19. 删除链表的倒数第 N 个结点【双指针】
难度:中等题目描述:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Node.原创 2021-08-28 21:29:20 · 99 阅读 · 0 评论 -
LeetCode141. 环形链表【快慢指针】
题目难度:简单题目描述:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?/** * Defi原创 2021-08-28 20:56:11 · 270 阅读 · 0 评论 -
Leetcode70. 爬楼梯
难度:简单题目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入:2输出:2解释:有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入:3输出:3解释:有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶f(x) = f(x-1) + f(x-2)class S原创 2021-08-26 19:16:54 · 103 阅读 · 0 评论 -
Leetcode581. 最短无序连续子数组
题目难度:中等题目描述:给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。示例 1:输入:nums = [2,6,4,8,10,9,15]输出:5解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。示例 2:输入:nums = [1,2,3,4]输出:0示例 3:输入:nums = [1原创 2021-08-26 11:50:33 · 96 阅读 · 0 评论 -
Leetcode142. 环形链表 II
难度:中等题目描述:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是> -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?示例1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1原创 2021-08-26 10:53:56 · 142 阅读 · 0 评论 -
Leetcode162. 寻找峰值
难度:中等题目描述:峰值元素是指其值大于左右相邻值的元素。给你一个输入数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞ 。示例 1:输入:nums = [1,2,3,1]输出:2解释:3 是峰值元素,你的函数应该返回其索引 2。示例 2:输入:nums = [1,2,1,3,5,6,4]输出:1 或 5解释:你的函数可以返回索原创 2021-08-26 10:49:53 · 114 阅读 · 0 评论 -
Leetcode322. 零钱兑换【动态规划】
难度:中等题目描述:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输原创 2021-08-26 10:46:32 · 182 阅读 · 0 评论 -
LeetCode42. 接雨水
难度:困难题目描述:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9提示:n == height原创 2021-08-25 22:46:50 · 502 阅读 · 0 评论 -
LeetCode1081. 不同字符的最小子序列
题目难度:中等题目描述:返回 s 字典序最小的子序列,该子序列包含 s 的所有不同字符,且只包含一次。示例 1:输入:s = “bcabc”输出:“abc”示例 2:输入:s = “cbacdcbc”输出:“acdb”提示:1 <= s.length <= 1000s 由小写英文字母组成class Solution {public: string smallestSubsequence(string s) { string ans原创 2021-06-10 10:00:50 · 212 阅读 · 0 评论 -
LeetCode48. 旋转图像
题目难度:中等题目描述:给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。找规律class Solution {public: void rotate(vector<vector<int>>& matrix) { int n = matrix.size(); vector<i原创 2021-05-31 17:12:34 · 145 阅读 · 0 评论 -
LeetCode239. 滑动窗口最大值【优先队列】
难度:困难题目描述:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { if(k==1){ return nums;原创 2021-05-19 23:14:25 · 222 阅读 · 1 评论 -
LeetCode236. 二叉树的最近公共祖先
题目难度:中等题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeN原创 2021-05-19 22:44:23 · 260 阅读 · 0 评论 -
LeetCode3. 无重复字符的最长子串
难度:中等题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。class Solution {public: int lengthOfLongestSubstring(string s) { int n=s.size(); if(n==0){ return 0; } int dp[n]; int max=1; dp[0]=1; f原创 2021-05-19 21:54:10 · 78 阅读 · 0 评论 -
LeetCode46. 全排列【回溯】
难度:中等题目描述:给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。class Solution {public: vector<vector<int>> ans; vector<int> tmp; void dfs(vector<int>& nums,int used[]){ int n=nums.size(); if(tmp.si原创 2021-05-19 21:24:16 · 116 阅读 · 0 评论 -
LeetCode152. 乘积最大子数组
题目难度:中等题目描述:给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。class Solution {public: int maxProduct(vector<int>& nums) { int n=nums.size(); int dp[n+1]; int dp_min[n+1]; dp[0]=nums[0];原创 2021-05-19 20:59:50 · 152 阅读 · 0 评论 -
LeetCode20. 有效的括号【栈】
难度:简单题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。class Solution {public: bool isValid(string s) { stack<char>st; int n=s.size(); for(int i=0;i<n;i++){原创 2021-05-19 17:33:00 · 90 阅读 · 0 评论 -
LeetCode69. x 的平方根【二分查找】
题目难度:简单题目描述:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明:8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。class Solution {public: int mySqrt(int x) { if(x==0||x==1){原创 2021-05-19 15:07:09 · 85 阅读 · 0 评论 -
LeetCode102. 二叉树的层序遍历【队列】
题目难度:中等题目描述:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} *原创 2021-05-19 14:42:07 · 87 阅读 · 0 评论 -
LeetCode912. 排序数组【快速排序】
题目难度:中等题目描述:给你一个整数数组 nums,请你将该数组升序排列。示例 1:输入:nums = [5,2,3,1]输出:[1,2,3,5]示例 2:输入:nums = [5,1,1,2,0,0]输出:[0,0,1,1,2,5]提示:1 <= nums.length <= 50000-50000 <= nums[i] <= 50000注意:如果数组为已经排序好的,这时快排性能最差,为了尽可能的减少这种最差的情况出现,三数取中class原创 2021-05-19 14:32:30 · 368 阅读 · 0 评论 -
LeetCode72. 编辑距离【动态规划】
难度:困难题目描述:给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)示例 2:输入:wo原创 2021-05-19 11:15:52 · 109 阅读 · 0 评论 -
LeetCode15. 三数之和【双指针】
难度:中等题目描述:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { int n=nums.size();原创 2021-05-18 23:13:42 · 100 阅读 · 0 评论 -
LeetCode94. 二叉树的中序遍历
难度:简单题目描述:给定一个二叉树的根节点 root ,返回它的 中序 遍历。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) :原创 2021-05-18 20:39:21 · 77 阅读 · 0 评论 -
LeetCode121. 买卖股票的最佳时机
难度:简单题目描述:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。class Solution {public: int maxProfit(vector<int>& prices) { int n原创 2021-05-18 18:00:01 · 89 阅读 · 0 评论 -
LeetCode103. 二叉树的锯齿形层序遍历
难度:中等题目描述:给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullp原创 2021-05-18 16:46:45 · 220 阅读 · 0 评论 -
LeetCode200. 岛屿数量
题目难度:中等题目描述:给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。class Solution {public: int cnt=0; void fun(vector<vector<char>>& grid,int i,int j){ int m=grid.siz原创 2021-05-17 21:49:25 · 93 阅读 · 0 评论 -
LeetCode53. 最大子序和
难度:简单题目描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。class Solution {public: int maxSubArray(vector<int>& nums) { int n=nums.size(); if(n==1){ return nums[0]; } int sum=0,ans=nums[0];原创 2021-05-17 21:23:20 · 89 阅读 · 0 评论 -
LeetCode206. 反转链表
难度:简单题目描述:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * Lis原创 2021-05-17 21:05:09 · 70 阅读 · 0 评论 -
LeetCode215. 数组中的第K个最大元素
难度:中等题目描述:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入:[3,2,1,5,6,4] 和 k = 2输出:5示例 2:输入:[3,2,3,1,2,4,5,5,6] 和 k = 4输出:4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。class Solution {public: int quicksort(vector<原创 2021-05-17 20:42:17 · 123 阅读 · 0 评论 -
LeetCode300. 最长递增子序列【动态规划】
难度:中等题目描述:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组[0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例原创 2021-05-16 21:31:33 · 99 阅读 · 0 评论 -
LeetCode28. 实现 strStr()
难度:简单题目描述:实现 strStr() 函数。 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。示例 1:输入原创 2021-04-20 13:58:22 · 82 阅读 · 0 评论 -
LeetCode27. 移除元素
难度:简单题目描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,原创 2021-04-19 21:45:37 · 113 阅读 · 0 评论 -
LeetCode26. 删除有序数组中的重复项
难度:简单题目描述:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = remov原创 2021-04-18 14:23:24 · 214 阅读 · 0 评论 -
LeetCode213. 打家劫舍 II
题目难度:中等题目描述:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,能够偷窃到的最高金额。不考虑第一个或者不考虑最后一个class Solution {public: int rob(vector<in原创 2021-04-15 14:59:15 · 95 阅读 · 0 评论 -
LeetCode783. 二叉搜索树节点最小距离【中序遍历】
难度:简单题目描述:给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeN原创 2021-04-13 15:52:29 · 96 阅读 · 0 评论 -
LeetCode179. 最大数
难度:中等题目描述:给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。class Solution {public: static bool cmp(string &a,string &b){ return a+b>b+a; } string largestNumber(vector<int>& nums) {原创 2021-04-12 11:01:40 · 93 阅读 · 0 评论