力扣[LeetCode]所有题目
本栏不断更新力扣[LeetCode]所有题目,代码注释详细,
总结常见用法技巧。关注我,持续更新ing......
Linux小魔王
面包多主页https://mbd.pub/o/mathtwo150
写优质文章,记录美好生活,给别人讲懂,才是真正的理解,未来可期。
展开
-
力扣[LeetCode].169. 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。class Solution {public: int majorityElement(vector<int>& nums)原创 2021-03-17 18:08:28 · 122 阅读 · 0 评论 -
力扣[LeetCode].191. 位1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。进阶:如果多次调用这个函数,你将如何优化你的算法?示例原创 2021-03-17 18:07:44 · 162 阅读 · 0 评论 -
力扣[LeetCode].521. 最长特殊序列 Ⅰ
给你两个字符串,请你从这两个字符串中找出最长的特殊序列。「最长特殊序列」定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)。子序列 可以通过删去字符串中的某些字符实现,但不能改变剩余字符的相对顺序。空序列为所有字符串的子序列,任何字符串为其自身的子序列。输入为两个字符串,输出最长特殊序列的长度。如果不存在,则返回 -1class Solution {public: int findLUSlength(string a, string b) { i.原创 2021-02-07 15:33:24 · 180 阅读 · 0 评论 -
力扣[LeetCode].344.反转字符串
class Solution {public: void reverseString(vector<char>& s) { for(int i=0,j=s.size()-1;i<j;i++,j--) //一个指针从前往后走,另外一个指针从后往前走 swap(s[i],s[j]); //每一次两个指针对应的字母交换一下,然后两个指针各往中间走一步,相遇为止 }};//双指针算法看到最.原创 2021-02-07 15:32:15 · 153 阅读 · 0 评论 -
力扣[LeetCode].563.二叉树的坡度
用递归吧给定一个二叉树,计算整个树的坡度 。一个树的节点的坡度定义即为,该节点左子树的节点之和和右子树节点之和的差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。整个树的坡度就是其所有节点的坡度之和。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *原创 2021-02-06 09:26:19 · 199 阅读 · 0 评论 -
力扣[LeetCode].145. 二叉树的后序遍历
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} *.原创 2020-12-11 17:38:55 · 173 阅读 · 0 评论 -
力扣[LeetCode].144. 二叉树的前序遍历
递归写法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr)..原创 2020-12-11 17:38:01 · 153 阅读 · 0 评论 -
力扣[LeetCode].94. 二叉树的中序遍历
递归写法时间复杂是O(n) 每个结点只会遍历一次空间复杂度取决于最大遍历层数,如果为h 那就是T(h)/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * Tre...原创 2020-12-11 17:36:33 · 177 阅读 · 0 评论 -
力扣[LeetCode].206. 反转链表
迭代做法://经典问题多刷几遍,面试难免会紧张发挥失常/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* reverseList(ListNode* head) .原创 2020-11-14 12:12:30 · 194 阅读 · 0 评论 -
力扣[LeetCode].20. 有效的括号
class Solution {public: bool isValid(string s) { stack<char> stk; //定义一个栈 //从前往后枚举所有字符 for (auto c : s) { if (c == '(' || c == '[' || c == '{') stk.push(c);//加到栈里面 else { .原创 2020-10-12 22:49:08 · 190 阅读 · 0 评论 -
力扣[LeetCode].371.两整数之和
class Solution {public: int getSum(int a, int b) { if(!a) return b; int sum=a^b,carry=(unsigned)(a&b)<<1; return getSum(carry,sum); }};原创 2020-10-02 15:04:35 · 197 阅读 · 0 评论 -
力扣[LeetCode].21. 合并两个有序链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next.原创 2020-10-02 15:03:33 · 169 阅读 · 0 评论 -
力扣[LeetCode].234. 回文链表
第一步将后一半翻转第二步判断是否对称第三步将后一半翻转回来/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool isPalindrome(ListNode* head) {.原创 2020-10-02 15:02:45 · 989 阅读 · 3 评论 -
力扣[LeetCode].226. 翻转二叉树
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* invertTree(TreeNode*.原创 2020-10-02 15:01:50 · 201 阅读 · 1 评论 -
力扣[LeetCode].349. 两个数组的交集
//首先将第一个数组存到哈希表中,//再去枚举第二个数组每一个元素//每次当前这个元素判断在哈希表里面有没有出现//如果出现过,就把这个元素记录到答案//同时把这个元素在第一个哈希表中删掉class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { unordered_set<int> S.原创 2020-09-23 23:27:28 · 184 阅读 · 0 评论 -
力扣[LeetCode].350. 两个数组的交集 II
class Solution {public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { unordered_multiset<int> S; for(auto x:nums1) S.insert(x); vector<int> res; for(auto x:nums2).原创 2020-09-23 23:26:48 · 172 阅读 · 0 评论 -
力扣[LeetCode].110. 平衡二叉树
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: bool ans; //定义全局答案 bool is.原创 2020-09-23 23:26:16 · 115 阅读 · 0 评论 -
力扣[LeetCode].257. 二叉树的所有路径
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<string> ans; .原创 2020-09-23 23:25:16 · 155 阅读 · 2 评论 -
力扣[LeetCode].292. Nim 游戏
class Solution {public: bool canWinNim(int n) { return n%4; }};原创 2020-09-23 23:24:33 · 163 阅读 · 0 评论 -
力扣[LeetCode].1. 两数之和
class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int> heap; //新建一个哈希表,把每一个数值映射为他的下标 for(int i=0;i<nums.size();i++){ //遍历每个数 int r = t.原创 2020-09-21 21:54:34 · 235 阅读 · 0 评论 -
力扣[LeetCode].202. 快乐数
class Solution {public: //先实现一下函数 int get(int x){ int res=0; while(x){ res +=(x%10)*(x%10); x/=10; } return res; } bool isHappy(int n) { int fast =get(n),slow=n; .原创 2020-09-21 21:53:37 · 275 阅读 · 0 评论 -
力扣[LeetCode].104. 二叉树的最大深度
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int maxDepth(TreeNode* root) {.原创 2020-09-21 21:52:58 · 191 阅读 · 0 评论 -
力扣[LeetCode].268. 缺失数字
class Solution {public: int missingNumber(vector<int>& nums) { int n=nums.size(); int res=n*(n+1)/2; for(auto x:nums) res-=x; //把数组里面所有的数减掉,最后返回就是缺失的数字 return res; }};...原创 2020-09-21 21:52:21 · 172 阅读 · 0 评论 -
力扣[LeetCode].13. 罗马数字转整数
class Solution {public: int romanToInt(string s) { unordered_map<char,int> hash; //哈希表,把一个字符映射成一个数字 hash['I']=1,hash['V']=5; hash['X']=10,hash['L']=50; hash['C']=100,hash['D']=500; hash['M']=100...原创 2020-09-21 21:51:40 · 176 阅读 · 0 评论 -
力扣[LeetCode].237. 删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 -- head = [4,5,1,9],示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入:head = [4,5,1,9], node = 1输出:[4,5,9]解释:给定你链表中值为 1 的第三个原创 2020-08-29 02:55:52 · 217 阅读 · 0 评论 -
力扣[LeetCode].172. 阶乘后的零
给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.class Solution {public: int trailingZeroes(int n) { int res=0; while(n) res+= n/5,n /=5; return res; }};//n!=原创 2020-08-29 02:55:02 · 854 阅读 · 0 评论 -
力扣[LeetCode].283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。//双指针class Solution {public: void moveZeroes(vector<int>& nums) { int k =0; //k表示第二个指针 for(auto x:n原创 2020-08-29 02:54:28 · 184 阅读 · 0 评论 -
力扣[LeetCode].118. 杨辉三角
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]class Solution {public: vector<vector<int>> generate(int n) { vector<vector<int&.原创 2020-08-29 02:53:59 · 175 阅读 · 0 评论 -
力扣[LeetCode].136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4 class Solution {public: int singleNumber(vector<int>& nums) { int res =0;原创 2020-08-29 02:53:07 · 179 阅读 · 0 评论 -
力扣[LeetCode].14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。//所有字符串的前缀最长的//简单的枚举//两重循环,枚举当前是第几个字符,//枚举所有字符串看这个字符是否一样//前缀指子串 要连续class Sol原创 2020-08-27 10:06:40 · 203 阅读 · 0 评论 -
力扣[LeetCode].67. 二进制求和
给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。 示例 1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101" 提示:每个字符串仅由字符 '0' 或 '1' 组成。1 <= a.length, b.length <= 10^4字符串如果不是 "0" ,就都不含前导零。//二进制求和,满二进一//首先让两个字原创 2020-08-27 10:05:52 · 250 阅读 · 0 评论 -
力扣[LeetCode].69. x 的平方根
实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。//二分class Solution {public: int mySqrt(int x) { int l=0,r=x; wh原创 2020-08-27 10:05:10 · 216 阅读 · 0 评论 -
力扣[LeetCode].263. 丑数
编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数 2, 3, 5 的正整数。示例 1:输入: 6输出: true解释: 6 = 2 × 3示例 2:输入: 8输出: true解释: 8 = 2 × 2 × 2示例 3:输入: 14输出: false 解释: 14 不是丑数,因为它包含了另外一个质因数 7。说明:1 是丑数。输入不会超过 32 位有符号整数的范围: [−231, 231 − 1]。class Solution {public:原创 2020-08-27 10:04:11 · 249 阅读 · 0 评论 -
力扣[LeetCode].100. 相同的树
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ 2 2原创 2020-08-27 10:03:30 · 196 阅读 · 0 评论 -
力扣[LeetCode].242. 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?解析以及总结://对应字符出现的次数是否一样//哈希两个字符串class Solution {原创 2020-08-26 15:51:20 · 211 阅读 · 0 评论 -
力扣[LeetCode].70. 爬楼梯
假设你正在爬楼梯。需要 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 阶解析以及总结:class Solution {public:原创 2020-08-26 15:50:33 · 182 阅读 · 0 评论 -
力扣[LeetCode].122. 买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第.原创 2020-08-26 15:49:40 · 133 阅读 · 0 评论 -
力扣[LeetCode].101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3解析以及总结:/** * Definition for a binary tree node. * struct TreeNode { *原创 2020-08-26 15:48:54 · 182 阅读 · 0 评论 -
力扣[LeetCode].231. 2的幂
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。示例 1:输入: 1输出: true解释: 20 = 1示例 2:输入: 16输出: true解释: 24 = 16示例 3:输入: 218输出: false解析以及总结://大于0 并且lowbit(x) = x & -x,返回x的最后一位1class Solution {public: bool isPowerOfTwo(int n) { return n>0 &a原创 2020-08-26 15:47:36 · 197 阅读 · 0 评论 -
力扣[LeetCode].58. 最后一个单词的长度
给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0 。说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。 示例:输入: "Hello World"输出: 5解析以及总结:方法一: 使用stringstreamclass Solution {public: int lengthOfLastWord(string s) {原创 2020-08-25 21:28:38 · 293 阅读 · 1 评论