Leetcode
文章平均质量分 88
farer_yyh
ACM蒟蒻,苦逼大学生一只
展开
-
Leetcode 第316场周赛题解
力扣周赛第316场原创 2022-10-23 14:34:38 · 523 阅读 · 1 评论 -
Leetcode 第274场周赛题解
Leetcode 第274场周赛题解原创 2022-01-02 13:53:59 · 3862 阅读 · 0 评论 -
Leetcode 第273场周赛题解
Leetcode 第273场周赛题解(C++版)原创 2021-12-26 15:29:57 · 3539 阅读 · 0 评论 -
Leetcode 第272场周赛题解
Leetcode 第272场周赛题解(C++版)原创 2021-12-19 12:15:03 · 198 阅读 · 0 评论 -
Leetcode 第271场周赛题解
Leetcode 第270场周赛题解(C++版)Problem A - 环和杆题意给10个杆子和3种环,问套了三种颜色环的杆子有多少思路按题意模拟,10个set解决,同时注意给定字符串长度是2n2n2n。代码class Solution {public: int countPoints(string rings) { set<char> ans[10]; int n=rings.size(); for(int i=0;2*i原创 2021-12-12 13:16:52 · 582 阅读 · 0 评论 -
Leetcode 第270场周赛题解
Problem A - 找出3位偶数题意数组中任选三个数拼接成三位数,要求非偶数、无前导0,升序返回所有符合条件的数思路看到给定数组的范围是100,直接三重循环暴力搞定。由于要求不重复,用set处理了一下。代码class Solution {public: vector<int> findEvenNumbers(vector<int>& digits) { int n=digits.size(); set<int&g原创 2021-12-05 13:33:45 · 262 阅读 · 0 评论 -
Leetcode5493. 删除最短的子数组使剩余数组有序【第 34 场双周赛】【思维、贪心】
题目链接题意:给定一无序序列,删掉一段连续的子序列(子数组),最小化这段子序列的长度,使得剩余的元素非递减排列。思路:分别处理前缀与后缀最长非递减连续序列,我们假设前缀最长连续非递减序列为a1,a2,...,ama_1,a_2,...,a_ma1,a2,...,am,后缀最长非递减序列为b1,b2,...,bnb_1,b_2,...,b_nb1,b2,...,bn;那么此时我们假设已经删除两者中间的元素,当前的目标就是让这两个序列拼起来还是非递减的,我们直接分别计算删掉序列aaa的尾部和删掉原创 2020-09-06 00:22:38 · 307 阅读 · 0 评论 -
Leetcode5491. 矩阵对角线元素的和【第 34 场双周赛】【简单循环】
题目链接题意:给定一个n∗nn*nn∗n矩阵求主副对角线元素的和;思路:两重for循环即可AC代码:class Solution {public: int diagonalSum(vector<vector<int>>& mat) { int n=mat.size(); int sum=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++)原创 2020-09-06 00:13:22 · 82 阅读 · 0 评论 -
Leetcode5492. 分割字符串的方案数【第 34 场双周赛】【字符串处理\找规律隔板法】
题目链接题意:给定二进制字符串sss,将 sss 分割成 3 个非空字符串 s1,s2,s3即(s1+s2+s3=s)s1, s2, s3即 (s1 + s2 + s3 = s)s1,s2,s3即(s1+s2+s3=s)。请你返回分割 sss 的方案数,满足 s1,s2和s3s1,s2 和 s3s1,s2和s3 中字符 '1' 的数目相同。思路:先统计1的数量nnn,n%3!=0n\%3!=0n%3!=0可以之间返回0,然后n/3n/3n/3~2n/32n/32n/3之间的间隔都可以作为s1、s2s1原创 2020-09-06 00:12:40 · 174 阅读 · 0 评论 -
Leetcode5482. 二维网格图中探测环【第 33 场双周赛】【DFS判环】·踩坑一天
题目链接题意:给定n*m的字母矩阵,问是否有相同字母构成的环。思路:对每一个点dfs,向周围相同字母的格点搜索,并记录访问状态,如果访问到已访问过的格点则存在环。dfs过程中需要注意的几点:注意前缀节点的记录:由于网格中是双向边的形式,所以dfs不能向前缀节点搜索,这里做一个前缀记录即可。对于grid[i][j]我的记录方式是i*grid[0].size()+j,初始节点的前缀记为-1;注意深搜条件的判断:深搜的下一个点需要和当前格点的字母相同(其实也可以对某一个格点判断其四周相同字母的个数,只有原创 2020-08-24 01:35:04 · 219 阅读 · 0 评论 -
Leetcode5481. 得到目标数组的最少函数调用次数【第 33 场双周赛】【贪心】
题目链接题意:给定一目标序列和等长的初始序列(初始序列全为0),给定两种操作:序列中所有数×2对某个数+1问将初始序列变为目标序列的最少操作次数。思路:显然我们要尽量多使用*2操作,故我们对每一个数字xxx统计从0变为xxx所需的操作1和操作2的数量,统计过程中贪心使用操作1。那么我们对所有数的操作1维护一个最大值(所有数可以一起×2),对操作2累加即可。class Solution {public: int minOperations(vector<int>&原创 2020-08-23 17:34:57 · 151 阅读 · 0 评论 -
Leetcode5480. 可以到达所有点的最少点数目【第 33 场双周赛】【图论】
题目链接题意:给定一个有向无环图,问至少从几个顶点出发可走遍所有点。思路:只需统计入度为0的点即可,因为任意入度不为0的点均可由其他点到达。AC代码:class Solution {public: vector<int> findSmallestSetOfVertices(int n, vector<vector<int>>& edges) { vector<int> deg(n,0); for(int原创 2020-08-23 17:30:01 · 135 阅读 · 0 评论 -
Leetcode5479. 千位分隔数【第 33 场双周赛】【水】
题目链接题意:给数字加上千位分隔符(每三位+一个)思路:按题意模拟,注意分隔符是'.'而不是',',然后注意数字和string的转换即可。AC代码:class Solution {public: string thousandSeparator(int n) { string s = to_string(n),ans; int count = 0; for (int i = s.size() - 1; i >= 0; --i) {原创 2020-08-23 17:26:50 · 92 阅读 · 0 评论 -
Leetcode5488. 使数组中所有元素相等的最小操作数【第 202场周赛】【水】
题目链接题意:存在一个长度为nnn的数组arrarrarr,其中arr[i]=(2∗i)+1(0<=i<n)arr[i]=(2*i)+1 (0 <= i < n )arr[i]=(2∗i)+1(0<=i<n)。一次操作中,你可以选出两个下标,记作 x和y(0<=x,y<n)x 和 y ( 0 <= x, y < n )x和y(0<=x,y<n)并使 arr[x]arr[x]arr[x] 减去 111 、arr[y]arr[y]ar原创 2020-08-16 12:59:37 · 196 阅读 · 0 评论 -
Leetcode5489. 两球之间的磁力【第 202场周赛】【二分】
题目链接题意:n个点选m个点,使得相邻两球的最小距离最大。思路:对相邻球的距离二分,注意二分范围即可。class Solution {public: bool chk(vector<int> a,int d,int n, int m){ int tmp=a[0],cnt=1; for(int i=0;i<n;i++){ if(a[i]-tmp>=d){ cnt++;原创 2020-08-16 12:50:06 · 173 阅读 · 0 评论 -
Leetcode5490. 吃掉 N 个橘子的最少天数【第 202场周赛】【记忆化DFS】
由于数据范围1−2∗1091-2*10^91−2∗109,所以肯定没法开数组来记忆化,我们同时注意到,不需要1-n每一个数都记忆化,因为在n较大时一直+1必然不是最优解,故而采取map记忆化的方式从n开始深搜同时维护一个最小值即可。具体思路如下:首先把初始的几个小数据记下来,n=1−>ans=1;n=2∣∣n=3−>ans=2;n=1->ans=1;n=2||n=3->ans=2;n=1−>ans=1;n=2∣∣n=3−>ans=2;对于当前数/2的情况res1=1+原创 2020-08-16 12:45:58 · 179 阅读 · 0 评论 -
Leetcode5485. 找出最长的超赞子字符串【第 32 场双周赛】
题目链接题意:给你一个字符串 SSS。请返回 SSS 中最长的 超赞子字符串 的长度。「超赞子字符串」需满足满足下述两个条件:该字符串是 SSS 的一个非空子字符串进行任意次数的字符交换重新排序后,该字符串可以变成一个回文字符串1≤s.length≤1051\le s.length \le 10^51≤s.length≤105, sss 仅由数字组成思路:我们首先明确「超赞子字符串」的性质,因为可以任意交换顺序,所以它仅需满足回文串中字符数量的限制,而无需满足顺序限制;所以字符串是「超赞子字原创 2020-08-09 18:35:57 · 223 阅读 · 0 评论 -
Leetcode5468. 第 k 个缺失的正整数【第 32 场双周赛】
题目链接题意:给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。请你找到这个数组里第 k 个缺失的正整数。思路:鉴于arr的长度较小(2000),直接开2001的数组记录arr内出现的数字就行。class Solution {public: int findKthPositive(vector<int>& arr, int k) { vector<bool> flag(2001); int cnt=0,x=1;原创 2020-08-09 01:25:02 · 142 阅读 · 0 评论 -
Leetcode5469. K 次操作转变字符串【第 32 场双周赛】
题目链接题意:给定一小写字母字符串,第i次操作可把任一位字符切换i次,切换操作即把字符用字母表中下一个字符替换之,假设字母表成环,即zzz的下一位是aaa,当然也可以选择不切换,每一位至多只能进行一次操作。问能否在k次操作之内将字符串sss变为ttt。思路:将每一位的切换最小值(即最早在第几次操作进行切换)indindind 处理出来,显然1≤ind≤251\le ind \le 251≤ind≤25,再对于每个indindind,计算他们最晚是第几次操作可以完成,判断最晚操作indi+(num[ind原创 2020-08-09 01:12:15 · 207 阅读 · 0 评论 -
Leetcode5470. 平衡括号字符串的最少插入次数【第 32 场双周赛】
题意:每个左括号匹配两个连续的右括号,问插入多少字符可使字符串平衡思路:记录左括号的数量,每次遇见右括号判断是否为连续右括号,如果是,直接消去一个左括号(left−−)(left--)(left−−),如果不是,添加一个右括号;最后对于每一次消去,要判断左括号数量是否大于0,如果小于0了,补上一个左括号即可。AC代码:class Solution {public: int minInsertions(string s) { int left=0,ans=0;原创 2020-08-09 00:54:41 · 253 阅读 · 0 评论