![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
sp_13230409636
这个作者很懒,什么都没留下…
展开
-
356-Leetcode 删除链表的倒数第N个节点
下面程序需要对如果删除的是第一个节点要进行判断,所以需要计算整个链表的长度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) {}};class Solution{public: int.原创 2022-05-13 16:27:31 · 416 阅读 · 0 评论 -
355-Leetcode 外观数列
class Solution {public: string countAndSay(int n) { string st = "1"; for (int i = 2; i <= n; ++i) { string cur = ""; int start = 0; int pos = 0; while (pos < st.size()) { while (pos < st.size() && st[pos] == s.原创 2022-05-13 11:07:07 · 162 阅读 · 0 评论 -
354-Leetcode 四数之和
class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> vec; if (nums.size() < 4) { return vec; } sort(nums.begin(), nums.end()); int length = nums.s.原创 2022-05-12 17:11:08 · 110 阅读 · 0 评论 -
353-Leetcode 最接近的三数之和
class Solution {public: int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); int n = nums.size(); int best = 1e7; // 根据差值的绝对值来更新答案 auto update = [&](int cur) { if (abs(cur - target) < .原创 2022-05-12 16:53:47 · 122 阅读 · 0 评论 -
352-Leetcode 三数之和
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { int n = nums.size(); sort(nums.begin(), nums.end()); vector<vector<int>> ans; // 枚举 a for (int first = 0; first < n; ++first) .原创 2022-05-10 17:22:07 · 162 阅读 · 0 评论 -
351-Leetcode 整数反转
INT_MIN在标准头文件limits.h中定义#define INT_MAX 2147483647#define INT_MIN (-INT_MAX - 1)class Solution{public: int reverse(int x) { int count = 0; while (x != 0) { if (count < INT_MIN / 10 || count > INT_MAX / 10) { return 0; } .原创 2022-05-10 17:07:08 · 115 阅读 · 0 评论 -
350-Leetcode 括号生成
算法:如果左括号数量小于 n,我们可以放一个左括号。如果右括号数量小于左括号的数量,我们可以放一个右括号class Solution { void backtrack(vector<string>& ans, string& cur, int open, int close, int n) { if (cur.size() == n * 2) { ans.push_back(cur); return; } if (open < n).原创 2022-05-10 16:48:07 · 143 阅读 · 0 评论 -
347-Leetcode 多数元素
方法一:Boyer-Moore 投票算法如果我们把众数记为 +1,把其他数记为 −1,将它们全部加起来,显然和大于 0,从结果本身我们可以看出众数比其他数多class Solution {public: int majorityElement(vector<int>& nums) { int tmp = -1; int count = 0; for (auto& x : nums) { if (x == tmp) { ++coun.原创 2022-04-25 17:34:44 · 176 阅读 · 0 评论 -
345-Leetcode 赎金信
如果ransomNote的长度要比magazine要长,那肯定是错误的先遍历magazine,统计每个字符出现的次数,再遍历 ransomNote,每次将数组中对应的字符的个数减一,如果减一以后的值小于0了,说明数组中已经没有这个字符了,那么就是错误的class Solution {public: bool canConstruct(string ransomNote, string magazine) { int len1 = ransomNote.size(); int len2 .原创 2022-04-22 17:33:13 · 211 阅读 · 0 评论 -
344-Leetcode 二叉树的所有路径
算法:我们也可以用广度优先搜索来实现。我们维护一个队列,存储节点以及根到该节点的路径。一开始这个队列里只有根节点。在每一步迭代中,我们取出队列中的首节点,如果它是叶子节点,则将它对应的路径加入到答案中。如果它不是叶子节点,则将它的所有孩子节点加入到队列的末尾。当队列为空时广度优先搜索结束,我们即能得到答案struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode() : val(0), left(nullptr), r.原创 2022-04-22 16:40:26 · 1302 阅读 · 0 评论 -
343-Leetcode 反转字符串中的元音字母
方法一:双指针class Solution {public: string reverseVowels(string s) { unordered_map<char, int> map { {'a',1}, { 'e',1 }, { 'i',1 }, { 'o',1 }, { 'u',1 }, { 'A',1 }, { 'E',1 }, { 'I',1}, { 'O',1 }, { 'U',1 }, }; .原创 2022-04-22 11:45:30 · 1015 阅读 · 0 评论 -
342-Leetcode 字符串中的第一个唯一字符
方法一:使用哈希表存储频数class Solution {public: int firstUniqChar(string s) { unordered_map<char, int> map; for (auto& ch : s) { ++map[ch]; } int len = s.size(); for (int i = 0; i < len; ++i) { if (map[s[i]] == 1) { retu.原创 2022-04-22 11:18:05 · 89 阅读 · 0 评论 -
340-Leetcode 有效的字母异位词
方法一:排序class Solution {public: bool isAnagram(string s, string t) { int len1 = s.size(); int len2 = t.size(); if (len1 != len2)return false; sort(s.begin(), s.end()); sort(t.begin(), t.end()); return s == t; }};int main(){ Solution A.原创 2022-04-21 17:43:37 · 1839 阅读 · 0 评论 -
339-Leetcode 单词规律
class Solution {public: bool wordPattern(string pattern, string s) { unordered_map<char, string> ch2str; unordered_map<string, char> str2ch; int len = s.size(); int i = 0; for (auto ch : pattern) { if (i > len) { .原创 2022-04-21 16:59:39 · 156 阅读 · 0 评论 -
338-Leetcode 同构字符串
class Solution{public: bool isIsomorphic(string s, string t) { unordered_map<char, char> st; unordered_map<char, char> ts; int len = s.size(); for (int i = 0; i < len; ++i) { char x = s[i], y = t[i]; if ((st.count(x) &am.原创 2022-04-21 15:15:15 · 239 阅读 · 0 评论 -
337-Leetcode 电话号码的组合
方法一:回溯首先使用哈希表存储每个数字对应的所有可能的字母,然后进行回溯操作回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是不完整的)。该字符串初始为空。每次取电话号码的一位数字,从哈希表中获得该数字对应的所有可能的字母,并将其中的一个字母插入到已有的字母排列后面,然后继续处理电话号码的后一位数字,直到处理完电话号码中的所有数字,即得到一个完整的字母排列。然后进行回退操作,遍历其余的字母排列回溯算法用于寻找所有的可行解,如果发现一个解不可行,则会舍弃不.原创 2022-04-20 09:27:33 · 170 阅读 · 0 评论 -
336-Leetcode 整数转罗马数字
class Solution{public: string intToRoman(int num) { string s; while (num != 0) { while (num >= 1000) { s += 'M'; num -= 1000; } while (num >= 900) { s += 'C'; s += 'M'; num -= 900; } while (num >.原创 2022-04-20 08:47:46 · 105 阅读 · 0 评论 -
335-Leetcode 反转字符串
class Solution {public: void reverseString(vector<char>& s) { int len = s.size(); for (int left = 0, right = len - 1; left < right; ++left, --right) { swap(s[left], s[right]); } }};int main(){ Solution A; vector<char.原创 2022-04-19 17:22:04 · 491 阅读 · 0 评论 -
334-Leetcode 字符串转换整数(atoi)
class Solution{public: int myAtoi(string s) { int len = s.size(); long long int tmp = 0; bool flag = true;//正数 for (int i = 0; i < len; ++i) { while (s[i] == ' ') { ++i; continue; } if (s[i] == '-') { flag = fal.原创 2022-04-19 17:08:50 · 93 阅读 · 0 评论 -
333-Leetcode 无重复字符的最长字串
class Solution {public: int lengthOfLongestSubstring(string s) { unordered_set<char> set; int len = s.size(); int right = -1; int count = 0; for (int i = 0; i < len; ++i) { if (i != 0) { set.erase(s[i - 1]); } whi..原创 2022-04-19 13:48:04 · 77 阅读 · 0 评论 -
332-Leetcode 最小栈
方法一:辅助栈创建一个辅助栈,保存最小值,每次入栈的时候,我们把辅助栈顶和要入的值两者中的最小值入栈class MinStack {private: stack<int> x_stack; stack<int> min_stack;public: MinStack() { min_stack.emplace(INT_MAX); } void push(int val) { min_stack.emplace(min(min_stack.top().原创 2022-04-19 13:21:28 · 206 阅读 · 0 评论 -
331-Leetcode 颠倒二进制位
方法一:逐位颠倒class Solution {public: uint32_t reverseBits(uint32_t n) { uint32_t count = 0; for (int i = 0; i < 32 && n>0; ++i) { count |= (n & 1) << (31 - i); n >>= 1; } return count; }};int main(){ Sol.原创 2022-04-19 11:01:37 · 118 阅读 · 0 评论 -
330-Leetcode Excel表列名称
class Solution {public: string convertToTitle(int columnNumber) { string ans; while (columnNumber > 0) { int a0 = (columnNumber - 1) % 26 + 1; ans += a0 - 1 + 'A'; columnNumber = (columnNumber - a0) / 26; } reverse(ans.begin(), a..原创 2022-04-17 16:00:36 · 606 阅读 · 0 评论 -
329-Leetcode Excel 表列序号
class Solution {public: int titleToNumber(string columnTitle) { int number = 0; long int multiple = 1; int len = columnTitle.size(); for (int i = len - 1; i >= 0; --i) { int k = columnTitle[i] - 'A' + 1; number += k * multiple; .原创 2022-04-17 15:43:23 · 222 阅读 · 0 评论 -
328-Leetcode 统计位1的个数
方法一:循环检查二进制位我们可以直接循环检查给定整数 n 的二进制位的每一位是否为 1具体代码中,当检查第 i 位时,我们可以让 n 与 2^i 进行与运算,当且仅当 n 的第 i 位为 1 时,运算结果不为 0class Solution{public: int hammingWeight(uint32_t n) { int count = 0; for (int i = 0; i < 32; ++i) { if (n & (1 << i)).原创 2022-04-17 15:24:16 · 522 阅读 · 0 评论 -
327-Leetcode 环形链表
方法一:哈希表用哈希表来存储所有已经访问过的节点。每次我们到达一个节点,如果该节点已经存在于哈希表中,则说明该链表是环形链表,否则就将该节点加入哈希表中。重复这一过程,直到我们遍历完整个链表即可struct ListNode{ int val; ListNode* next; ListNode(int x) : val(x), next(NULL) {}};class Solution{public: bool hasCycle(ListNode* head) { if (he.原创 2022-04-17 15:06:50 · 51 阅读 · 0 评论 -
326-Leetcode 验证字符串是否为回文串
方法一:筛选+逆向判断class Solution {public: bool isPalindrome(string s) { string tmp; for (auto& x : s) { if (isalnum(x)) { tmp += tolower(x); } } string tmp_tmp(tmp.rbegin(), tmp.rend()); return tmp_tmp == tmp; }};int main(){.原创 2022-04-16 23:08:41 · 288 阅读 · 0 评论 -
325-Leetcode 二叉树的后序遍历
方法一:递归struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left).原创 2022-04-15 16:29:48 · 898 阅读 · 0 评论 -
324-Leetcode 二叉树的前序遍历
方法一:递归struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left).原创 2022-04-15 15:27:45 · 547 阅读 · 0 评论 -
332-Leetcode 只出现一次的数字
如果不考虑时间复杂度和空间复杂度的限制,这道题有很多种解法,可能的解法有如下几种:①使用集合存储数字遍历数组中的每个数字,如果集合中没有该数字,则将该数字加入集合,如果集合中已经有该数字,则将该数字从集合中删除,最后剩下的数字就是只出现一次的数字②哈希表使用哈希表存储每个数字和该数字出现的次数。遍历数组即可得到每个数字出现的次数,并更新哈希表,最后遍历哈希表,得到只出现一次的数字。③记录出现数字的总和使用集合存储数组中出现的所有数字,并计算数组中的元素之和。由于集合保证元素无重复,因此计算集合.原创 2022-04-15 09:36:14 · 71 阅读 · 0 评论 -
331-Leetcode 买卖的股票的最佳时机
方法一:暴力法两次for循环,一个一个比较,找出最大利润class Solution {public: int maxProfit(vector<int>& prices) { int len = prices.size(); int max_profit = 0; for (int i = 0; i < len; ++i) { for (int j = i + 1; j < len; ++j) { max_profit =.原创 2022-04-15 09:22:39 · 86 阅读 · 0 评论 -
330-Leetcode 杨辉三角 II
方法一:滚动数组class Solution {public: vector<int> getRow(int rowIndex) { vector<int> ve; ve.resize(rowIndex + 1); for (int i = 0; i <= rowIndex; ++i) { for (int j = rowIndex; j >= 0; --j) { if (j == rowIndex || j == 0).原创 2022-04-15 08:56:25 · 206 阅读 · 0 评论 -
329-Leetcode 杨辉三角
杨辉三角的每行数字左右对称,由 1 开始逐渐变大再变小,并最终回到 1class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> ve(numRows); for (int i = 0; i < numRows; ++i) { for (int j = 0; j <= i; ++j) { .原创 2022-04-14 17:43:29 · 135 阅读 · 0 评论 -
328-Leetcode 路径总和
方法一:递归若当前节点就是叶子节点,那么我们直接判断 sum 是否等于 val 即可(因为路径和已经确定,就是当前节点的值,我们只需要判断该路径和是否满足条件)。若当前节点不是叶子节点,我们只需要递归地询问它的子节点是否能满足条件即可struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x.原创 2022-04-14 17:23:45 · 55 阅读 · 0 评论 -
327-Leetcode 二叉树的最小深度
方法一:深度优先搜索对于每一个非叶子节点,我们只需要分别计算其左右子树的最小叶子节点深度,当左右节点都为空时,返回1struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(int .原创 2022-04-14 16:49:27 · 95 阅读 · 0 评论 -
326-Leetcode 将有序数组转换为二叉搜索树
二叉搜索树的中序遍历是升序序列,题目给定的数组是按照升序排序的有序数组,因此可以确保数组是二叉搜索树的中序遍历序列给定二叉搜索树的中序遍历,是否可以唯一地确定二叉搜索树?答案是否定的。如果没有要求二叉搜索树的高度平衡,则任何一个数字都可以作为二叉搜索树的根节点,因此可能的二叉搜索树有多个如果增加一个限制条件,即要求二叉搜索树的高度平衡,是否可以唯一地确定二叉搜索树?答案仍然是否定的直观地看,我们可以选择中间数字作为二叉搜索树的根节点,这样分给左右子树的数字个数相同或只相差 1,可以使得树保持平衡。.原创 2022-04-14 16:18:06 · 127 阅读 · 0 评论 -
325-Leetcode 二叉树的最大深度
方法一:深度优先搜索算法:max(height(root->left),height(root->right))+1struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(i.原创 2022-04-14 15:50:17 · 54 阅读 · 0 评论 -
324-Leetcode 平衡二叉树
方法一:自顶向下的递归平衡二叉树的定义是:二叉树的每个节点的左右子树的高度差的绝对值不超过 1,则二叉树是平衡二叉树一棵二叉树是平衡二叉树,当且仅当其所有子树也都是平衡二叉树自顶向下的递归的做法类似于二叉树的前序遍历struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x.原创 2022-04-11 12:02:35 · 79 阅读 · 0 评论 -
323-Leetcode 对称二叉树
方法一:递归如果它们的两个根结点具有相同的值并且每个树的右子树都与另一个树的左子树镜像对称,那么这棵树就是对称的我们可以实现这样一个递归函数,通过「同步移动」两个指针的方法来遍历这棵树,p 指针和 q 指针一开始都指向这棵树的根,随后 p 右移时,q 左移,p 左移时,q 右移。每次检查当前 p 和 q 节点的值是否相等,如果相等再判断左右子树是否对称struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode() .原创 2022-04-11 11:24:27 · 51 阅读 · 0 评论 -
321-Leetcode 相同的树
方法一:深度优先搜索如果两个二叉树都为空,则两个二叉树相同如果两个二叉树中有且只有一个为空,则两个二叉树一定不相同如果两个二叉树都不为空,那么首先判断它们的根节点的值是否相同,若不相同则两个二叉树一定不同,若相同,再分别判断两个二叉树的左子树是否相同以及右子树是否相同这是一个递归的过程,因此可以使用深度优先搜索,递归地判断两个二叉树是否相同struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode() : v.原创 2022-04-10 19:50:50 · 57 阅读 · 0 评论