![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
每日一题
每天一道LeetCode和Acwing每日一题
Shirandexiaowo
这个作者很懒,什么都没留下…
展开
-
LeetCode 每日一题
分奇偶性讨论原创 2022-08-01 09:04:29 · 229 阅读 · 0 评论 -
LeetCode 每日一题:905. 按奇偶排序数组
905. 按奇偶排序数组双指针的简单运用,左边找到奇数,右边找到偶数就交换,这样保证了奇数一定在后,偶数一定在前时间复杂度:O(n)O(n)O(n)class Solution {public: vector<int> sortArrayByParity(vector<int>& nums) { for (int i = 0, j = nums.size() - 1; i < j; i ++, j -- ) { w原创 2022-04-28 09:09:01 · 159 阅读 · 0 评论 -
LeetCode每日一题:
883. 三维形体投影面积行和列完全对称的,所以通过一次遍历得到每行最大值和每列最大值时间复杂度:O(n2)O(n^2)O(n2)// shiran#include <bits/stdc++.h>using namespace std;#define rep(i, a, n) for (int i = a; i < n; i++)#define per(i, n, a) for (int i = n - 1; i >= a; i--)#define sz(x) (i原创 2022-04-26 09:20:29 · 141 阅读 · 0 评论 -
LeetCode 每日一题:868. 二进制间距
868. 二进制间距// shiran#include <bits/stdc++.h>using namespace std;#define rep(i, a, n) for (int i = a; i < n; i++)#define per(i, n, a) for (int i = n - 1; i >= a; i--)#define sz(x) (int)size(x)#define fi first#define se second#define all原创 2022-04-24 10:00:20 · 253 阅读 · 0 评论 -
LC刷题第四天
396. 旋转函数递推,这种题一般就是手写样例,找关联性,往往不会很难。一般地关联性怎么找呢?就是看上一个状态和下一个状态的关联,通常总结成递推或者是整理出一个通项公式。递推经常会用到最大最小值、前缀和、贪心的思想。本题可以观察到,f[i+1]和f[i]区别在于除了某一项之外,其它项累加了一次,同时某一项减去size(nums)*k就可以消除那一项的影响,因此可以得到递推公式惹。// shiran#include <bits/stdc++.h>using namespace std;原创 2022-04-22 10:19:53 · 155 阅读 · 0 评论 -
LeetCode 每日一题:824. 山羊拉丁文
824. 山羊拉丁文简单模拟,强调对函数isalpha和tolower等字符处理函数的运用// shiran#include <bits/stdc++.h>using namespace std;#define rep(i, a, n) for (int i = a; i < n; i++)#define per(i, n, a) for (int i = n - 1; i >= a; i--)#define sz(x) (int)size(x)#define fi原创 2022-04-21 09:18:28 · 181 阅读 · 0 评论 -
LeetCode 388. 文件的最长绝对路径
LeetCode 388. 文件的最长绝对路径是一个模拟,细节比较多,像树的从左至右的遍历问题,可以通过栈去模拟存储每一个单词长度,栈的大小代表了深度,答案就是最长的长度+路径中间隔的数量// shiran#include <bits/stdc++.h>using namespace std;#define rep(i, a, n) for (int i = a; i < n; i++)#define per(i, n, a) for (int i = n - 1; i &.原创 2022-04-20 21:28:22 · 144 阅读 · 0 评论 -
LeetCode每日一题:821. 字符的最短距离
821. 字符的最短距离两次遍历转化对于任意一个s中的字符,只要判断跟前一个ccc和后一个ccc最近距离即可,可以先预处理每一个ccc下标,遍历一遍即可时间复杂度:O(n)O(n)O(n)class Solution {public: vector<int> shortestToChar(string s, char c) { vector<int> d; for (int i = 0; i < s.size(); i ++ )原创 2022-04-19 09:37:29 · 236 阅读 · 0 评论 -
819. 最常见的单词
819. 最常见的单词哈希+计数把段落中每个单词拿出来,看是否在禁用词中即可。熟练使用tolower、toupper、isalpha本题会更加有助于解题。class Solution{public: bool is_char(char s) { if (s >= 'a' && s <= 'z') return true; if (s >= 'A' && s <= 'Z')原创 2022-04-17 09:45:31 · 141 阅读 · 0 评论 -
LeetCode 每日一题:479. 最大回文数乘积
479. 最大回文数乘积方法一:枚举这道题时间复杂度是真得玄学,理论上可能非常大。一开始不敢这样去写,后来发现很多的时候不需要算到极限的时间,同时观察nnn很小,真得怕超时时,可以本地算好直接打表。说一下这个做法的思路,回文数一般只需要枚举一半,先枚举左半边,构造回文数之后,判断是否可以被除即可时间复杂度:玄学复杂度class Solution {public:typedef long long ll; int largestPalindrome(int n) { if原创 2022-04-16 10:29:49 · 424 阅读 · 0 评论 -
LeetCode每日一题:385. 迷你语法分析器
385. 迷你语法分析器这道题是一个嵌套列表,如果一个函数可以处理一个列表,那么我们就可以递归调用这个函数。那么这个函数首先处理列表左右括号,再处理中间的部分,中间的数字通过stoi添加到NestedIntegerNestedIntegerNestedInteger中,为了统一指针可以使用引用传值。/** * // This is the interface that allows for creating nested lists. * // You should not implement i原创 2022-04-15 10:18:59 · 430 阅读 · 0 评论 -
LeetCode每日一题:1672. 最富有客户的资产总量
1672. 最富有客户的资产总量扫描每行返回行求和最大值时间复杂度:O(n∗m)O(n*m)O(n∗m)class Solution {public: int maximumWealth(vector<vector<int>>& accounts) { int maxn = 0; for (auto& a : accounts) { int sum = 0; for (au原创 2022-04-14 09:53:49 · 108 阅读 · 0 评论 -
LeetCode每日一题:380. O(1) 时间插入、删除和获取随机元素
380. O(1) 时间插入、删除和获取随机元素这道题难度最大的还是查找,因为哈希可以帮助我们插入和删除元素。假设我们用vector存储数字,删除元素的时候,为了保证查询是连续的区间,那么删除就必须要删除之后把最后元素放到删除的位置上,因此我们不能用set存是否在集合中,而是同时用map存在vector中的下标,这样复杂度都是O(1)O(1)O(1)的。class RandomizedSet {public: vector<int> v; unordered_map<原创 2022-04-13 11:15:19 · 136 阅读 · 0 评论 -
LeetCode每日一题:806. 写字符串需要的行数
806. 写字符串需要的行数这道题数据范围只有1000,所以可以直接模拟即可。时间复杂度:O(n)O(n)O(n)class Solution {public: vector<int> numberOfLines(vector<int>& widths, string s) { int cur = 1, cnt = 0; for (auto&c : s) { int u = widths[c -原创 2022-04-12 11:08:17 · 131 阅读 · 0 评论 -
LeetCode 每日一题:429. N 叉树的层序遍历
429. N 叉树的层序遍历class Solution {public: vector<vector<int>> levelOrder(Node* root) { if (!root) { return {}; } vector<vector<int>> ans; queue<Node*> q; q.push(root);原创 2022-04-08 09:59:20 · 240 阅读 · 0 评论 -
LeetCode每日一题:744. 寻找比目标字母大的最小字母
744. 寻找比目标字母大的最小字母线性或者二分查找,但是数据范围很小,差别不大class Solution {public: char nextGreatestLetter(vector<char>& letters, char target) { if (target >= letters.back()) return letters[0]; else return *upper_bound(letters原创 2022-04-03 12:05:28 · 1389 阅读 · 0 评论 -
LeetCode每日一题:728. 自除数
728. 自除数模拟即可class Solution {public: bool check(int x) { int y = x; while (x) { int t = x % 10; if (!t) return false; if (y % t) return false; x /= 10; } return原创 2022-03-31 09:16:48 · 356 阅读 · 0 评论 -
LeetCode每日一题:2024. 考试的最大困扰度
2024. 考试的最大困扰度双指针扫描一遍记录滑动窗口内的T和F的数量,如果都超过则减少其中一个数量至合法时间复杂度:O(n)O(n)O(n),只扫描一遍非常快class Solution {public: int maxConsecutiveAnswers(string a, int k) { int l = 0, r = 0, tc = 0, fc = 0, n = a.size(); int res = 0; while (r <原创 2022-03-29 10:51:09 · 438 阅读 · 0 评论 -
LeetCode每日一题:693. 交替位二进制数
693. 交替位二进制数a = n ^ n >> 1保证了交替位全是1,通过a & a + 1判断是否全为1时间复杂度:O(1)空间复杂度:O(1)class Solution {public: bool hasAlternatingBits(int n) { long long a = (n ^ n >> 1); return (a & a + 1) == 0; }};...原创 2022-03-28 09:01:53 · 361 阅读 · 0 评论 -
LeetCode 每日一题:2028. 找出缺失的观测数据
2028. 找出缺失的观测数据计算n次筛子总和sum,如果超过了n~6n范围,无解。有解的情况下,所有数赋予sum/n,同时前sum%n加上多出来的这部分时间复杂度:O(max(m,n))O(max(m,n))O(max(m,n))空间复杂度:O(n)O(n)O(n)class Solution {public: vector<int> missingRolls(vector<int>& rolls, int mean, int n) { i原创 2022-03-27 10:19:39 · 429 阅读 · 0 评论 -
LeetCode 每日一题:682. 棒球比赛
棒球比赛模拟栈,so easy 对叭class Solution {public: int tt = 0; int s[1010] = {0}; int calPoints(vector<string>& ops) { for (auto& c : ops) { if (c == "+") { s[tt + 1] = s[tt] + s[tt - 1];原创 2022-03-26 10:36:02 · 387 阅读 · 0 评论 -
LeetCode 每日一题:172. 阶乘后的零
172. 阶乘后的零统计每个数中因子2和因子5的个数,因为只有这两个因子才会产生尾0class Solution {public: int trailingZeroes(int n) { int res = 0; int cnt2 = 0, cnt5 = 0; for (int i = 1; i <= n; i ++ ) { int j = i; while (j % 2 == 0) {原创 2022-03-25 09:24:37 · 562 阅读 · 0 评论 -
LeetCode每日一题:661. 图片平滑器
661. 图片平滑器利用ans存答案,平滑的窗口判断一下边界,用sum存平滑窗口的和,用cnt存平滑窗口的大小,答案不会超过LLclass Solution {public: vector<vector<int>> imageSmoother(vector<vector<int>>& img) { int n = img.size(), m = img[0].size(); vector<vector原创 2022-03-24 09:07:20 · 223 阅读 · 0 评论 -
LeetCode 每日一题:2038. 如果相邻两个颜色均相同则删除当前颜色
2038. 如果相邻两个颜色均相同则删除当前颜色本题突破口在于不能删除两端的字母,意思就是A和B排列会在院序列中稳定,删除不会形成新的可删除的序列。比较删除次数即可。class Solution {public: bool winnerOfGame(string colors) { int n = colors.size(); int cnt = 0; for (int i = 1; i < n - 1; i ++ ) {原创 2022-03-22 09:42:30 · 454 阅读 · 0 评论 -
LeetCode 每日一题:653. 两数之和 IV - 输入 BST
653. 两数之和 IV - 输入 BST方法一:DFS+哈希通过遍历所有结点,边查询边插入集合的方式,其实这种方法没有用到BST树的性质,任何一个二叉树都可以时间复杂度:O(n)O(n)O(n)空间复杂度:O(n)O(n)O(n)/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * Tr原创 2022-03-21 10:13:33 · 561 阅读 · 0 评论 -
LeetCode 每日一题:606. 根据二叉树创建字符串
606. 根据二叉树创建字符串二叉树的前序遍历,当左子节点或者右节点非空的时候需要添加左子节点的括号,如果右子节点非空才需要添加右子节点的括号/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr)原创 2022-03-20 12:38:58 · 679 阅读 · 0 评论 -
LeetCode 每日一题:2043. 简易银行系统
2043. 简易银行系统简单的模拟,在每次先判断账户是否存在再进行后续的操作即可typedef long long LL;class Bank {public: int n; vector<LL> a; Bank(vector<long long>& balance) { a = balance; n = a.size(); } bool check(int x) { retur原创 2022-03-18 10:44:31 · 324 阅读 · 0 评论 -
LeetCode每日一题:LeetCode 720. 词典中最长的单词
LeetCode 720. 词典中最长的单词方法一:暴力哈希存储每个单词哈希表中,检查每一个单词前缀是否都出现过,返回字典序最小长度最长的单词时间复杂度:O(n∗30)O(n*30)O(n∗30)空间复杂度:O(n∗30)O(n*30)O(n∗30)class Solution {public: set<string> S; string ans; bool check(string str) { for (int i = 1; i <原创 2022-03-17 10:42:15 · 534 阅读 · 0 评论 -
LeetCode 每日一题:2044. 统计按位或能得到最大值的子集数目
2044. 统计按位或能得到最大值的子集数目DFS,每次考虑选择这个数或者不选。时间复杂度:O(2n)O(2^n)O(2n)空间复杂度:O(n)O(n)O(n)class Solution {public: vector<int> a; int maxn, ans; void dfs(int u, int v) { if (u == a.size()) { if (v > maxn) {原创 2022-03-15 10:33:19 · 550 阅读 · 0 评论 -
LeetCode 每日一题:599. 两个列表的最小索引总和
599. 两个列表的最小索引总和首先通过哈希存储其中一个列表下标,遍历另一个列表每次比对答案下标之和,如果相等直接加到答案里面,如果更小那么清空之前的答案,同时更新最小下标和class Solution {public: vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) { map<string, int> mp;原创 2022-03-14 10:15:20 · 463 阅读 · 0 评论 -
LeetCode 每日一题:393. UTF-8 编码验证
393. UTF-8 编码验证模拟,首先一个字符的情况判断第一位是不是0即可,然后判断前5位几个1,如果1个或者5个1都不合法,同时判断后面几个数是否符合10开头,当遍历完所有数字之后都合法返回trueclass Solution {public: int get(int x, int k) { return x >> k & 1; } bool validUtf8(vector<int>& data) {原创 2022-03-13 10:11:59 · 637 阅读 · 0 评论 -
LeetCode每日一题:2049. 统计最高分的节点数目
2049. 统计最高分的节点数目邻接表存图,dfs每次返回子节点的个数,同时统计每个结点的分数,最后遍历返回最高分的个数const int N = 100010, M = N * 2;int h[N], e[M], ne[M], idx;typedef long long LL;LL n, score[N];class Solution {public: void add(int a, int b) { e[idx] = b, ne[idx] = h[a], h[a]原创 2022-03-11 16:32:03 · 259 阅读 · 0 评论 -
LeetCode 每日一题:589. N 叉树的前序遍历
589. N 叉树的前序遍历人生苦短,我用递归/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _val, vector<Node*> _children) { val = _val原创 2022-03-10 08:55:38 · 130 阅读 · 0 评论 -
LeetCode每日一题:LeetCode 798. 得分最高的最小轮调
LeetCode 798. 得分最高的最小轮调不等式推到出每个数论调不加分的区间,如果最后累加的不加分区间最少,那就是论调加分最多。通过差分数组维护不加分的区间。不等式推到如下:i−k<a[i]i-k<a[i]i−k<a[i] && 0<=i−k<=n−10<=i-k<=n-10<=i−k<=n−1得出范围为:i−a[i]+1<=kandk<=ii-a[i]+1<=k and k<=ii−a[i]+1<原创 2022-03-09 10:13:59 · 409 阅读 · 0 评论 -
LeetCode 每日一题:521. 最长特殊序列 Ⅰ
521. 最长特殊序列 Ⅰ如果两个字符串相等,那么返回-1。如果两个字符串只要有一个不相同的字符,那么最长的字符串如果选择它所有的字符,就一定不可能完全匹配class Solution {public: int findLUSlength(string a, string b) { return a == b ? -1 : max(a.size(), b.size()); }};...原创 2022-03-05 09:30:56 · 162 阅读 · 0 评论 -
LeetCode 每日一题:2104. 子数组范围和
2104. 子数组范围和枚举左右区间的端点,同时维护区间的最值class Solution {public: long long subArrayRanges(vector<int>& nums) { typedef long long LL; LL ans = 0; int n = nums.size(); for (int i = 0; i < n; i ++ ) { int原创 2022-03-04 10:01:25 · 68 阅读 · 0 评论 -
LeetCode 每日一题:LeetCode258. 各位相加
258. 各位相加class Solution {public: int addDigits(int num) { while (num >= 10) { int t = 0; while (num) { t += num % 10; num /= 10; } num = t; } r原创 2022-03-03 08:54:59 · 185 阅读 · 0 评论 -
LeetCode 每日一题:LeetCode 564. 寻找最近的回文数
LeetCode 564. 寻找最近的回文数思路:思维只需要考虑左半边,回文数的对称性。我们找左半边的第一个比它大的数和第一个比它小的数,同时,特判边界,从这五个数中找到与原数差最小的数class Solution {public: string nearestPalindromic(string n) { int len = n.size(); typedef long long LL; LL x = stoll(n); s原创 2022-03-02 11:32:09 · 221 阅读 · 0 评论 -
LeetCode每日一题:1601. 最多可达成的换楼请求数目
1601. 最多可达成的换楼请求数目二进制枚举、模拟class Solution {public: vector<vector<int>> re; int ans = 0, m; int sum[21]; int lowbit(int i) { return i & (-i); } int get(int u) { int res = 0; while (u) {原创 2022-02-28 10:43:07 · 88 阅读 · 0 评论 -
LeetCode 每日一题:最优除法
533. 最优除法:贪心、数学如果分母越小分数值越大,因此我们让分母无限小,当n>2的时候就在第二数前面加一个括号class Solution {public: string optimalDivision(vector<int>& nums) { string ans; int n = nums.size(); for (int i = 0; i < n; i ++ ) { ans +=原创 2022-02-27 10:20:31 · 156 阅读 · 0 评论