周赛总结--LeetCode单周赛321场 AcWing79场
创始人
2024-02-21 07:20:53
0

1. LeetCode单周赛321场

1.1 找出中枢整数

1.1.1 原题链接:力扣icon-default.png?t=M85Bhttps://leetcode.cn/problems/find-the-pivot-integer/

1.1.2 解题思路:

        1、先保存 1-n 的和sum;

        2、从 1 开始枚举,判断前 i 项和 cmp 与 sum - cmp + i 是否相等即可。

1.1.3 代码:

class Solution {
public:int pivotInteger(int n) {int sum = 0;for(int i = 1; i <= n; i ++ ) sum += i;int cmp = 0;for(int i = 1; i <= n ;i ++ ) {cmp += i;if(cmp == (sum - cmp + i)) return i;}return -1;}
};

1.2 追加字符以获得子序列

1.2.1 原题链接:力扣icon-default.png?t=M85Bhttps://leetcode.cn/problems/append-characters-to-string-to-make-subsequence/

1.2.2 解题思路:

        用双指针来判断是否存在一个 s 中的子序列等于 t,若不存在则当前枚举到 t 中剩下的字母都是需要追加到字母。

1.2.3 代码:

class Solution {
public:int appendCharacters(string s, string t) {int n = t.size();int m = s.size();int idx = 0;for(int i = 0, j = 0; j < m; j ++) {if(t[i] == s[j]) {i ++;idx = i;}while(t[i] != s[j] && j < m) j ++;if(t[i] == s[j]) {i ++;idx = i;}}int res = n - idx;if(res < 0) return 0;else return res;}
};

1.3 从链表中移除节点

1.3.1 原题链接:力扣icon-default.png?t=M85Bhttps://leetcode.cn/problems/remove-nodes-from-linked-list/

1.3.2 解题思路:

        具体思路见代码。

1.3.3 代码:

/*** 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) {}* };*/
class Solution {
public:ListNode* removeNodes(ListNode* head) {if(head == nullptr) return head;//如果head为空直接return就好了ListNode* res = removeNodes(head->next);//递归处理返回的链表头一定是最大值if(res == nullptr) return head;if(res->val > head->val) return res; //删除头节点head->next = res;   //不删除头节点 return head;}
};

1.4 统计中位数为K的子数组

1.4.1 原题链接:力扣icon-default.png?t=M85Bhttps://leetcode.cn/problems/count-subarrays-with-median-k/

1.4.2 解题思路:

        1、转换为数学式子;

        2、在奇数长度下的情况:

                (1)统计K左侧的数的个数sum1,K右侧的数的个数sum2,必然有sum1 == sum2;

                (2)由(1)知:左侧小于K的数的个数 + 右侧小于K的数的个数 == 左侧大于K的数的  个数 + 右侧大于K的数的个数;

                (3)由(2)知:左侧小于K的数的个数 - 左侧大于K的数的个数 ==  右侧大于K的数的个数 - 右侧小于K的数的个数;将 “ - ”看作是 -1, “+”看作是 +1,例如:

         3、找左右匹配的数对,如上图;

        4、对于偶数个的情况:左侧小于K的数的个数 - 左侧大于K的数的个数  + 1 ==  右侧大于K的数的个数 - 右侧小于K的数的个数。

1.4.3 代码:

class Solution {
public:int countSubarrays(vector& nums, int k) {//存k的下标int pos = find(nums.begin(), nums.end(), k) - nums.begin(), n = nums.size();unordered_map cnt;cnt[0] = 1;for(int i =pos + 1, c = 0; i < n; i ++ ) {c += nums[i] > k ? 1 : -1;++ cnt[c];}int ans = cnt[0] + cnt[1];for(int i = pos - 1, c = 0; i >= 0; i --) {c += nums[i] < k ? 1 : -1;ans += cnt[c] + cnt[c + 1];}return ans;}
};

2.AcWing周赛79场

2.1 数列元素

2.1.1 原题链接:4722. 数列元素 - AcWing题库

2.1.2 解题思路:

        预处理前缀和,再从前往后遍历找到相等情况并输出YES,找不到则输出NO。

2.1.3 代码:

#include 
#include 
#include using namespace std;const int N = 510;int s[N];int main()
{int n;cin >> n;for(int i = 1; i <= N; i ++ ) s[i] = s[i - 1] + i;bool flag = false;for(int i = 1; i <= N; i ++ ) {if(s[i] == n) flag = true;}if(flag) puts("YES");else puts("NO");return 0;
}

2.2 队列

2.2.1 原题链接:4723. 队列 - AcWing题库

2.2.2 解题思路:

        1、先判断 n 属于哪个区间;

        2、再判断 n 属于第几个元素。

2.2.3 代码:

#include 
#include 
#include using namespace std;int main()
{int n;cin >> n;int s = 0, k = 5;while(s + k < n) {s += k;k *= 2;}n -= s;int len = k / 5;int t = (n + len - 1) / len;cout << (char) (t - 1 + 'a') << endl;return 0;
}

相关内容

热门资讯

南召法院成功执结一起民间借贷纠... 大象新闻记者 魏广宝 通讯员 张振丽/文图 “太感谢你们了!要是没有法院的鼎力相助,我这钱可能就要不...
北京进一步优化调整房地产政策 新华社北京12月25日电 《经济参考报》12月25日刊发记者梁倩采写的文章《北京进一步优化调整房地产...
山西省“百名女律师巾帼普法乡村... 普法护航新征程,暖心守护“她”权益。为深入学习宣传贯彻妇女权益保障法律法规,提升基层妇女法治素养和依...
公安部公布金融领域“黑灰产”违... 央视网消息:12月25日,公安部在京召开专题新闻发布会,通报公安部和国家金融监督管理总局联合部署开展...
有名且信誉好的拆迁律师联系信息... 在处理拆迁相关法律事务时,选择一位靠谱、有名且信誉好的拆迁律师至关重要。拆迁问题往往涉及复杂的法律程...
13个月大女儿非亲生,男子提出... 12月24日,最高人民法院与全国妇联、司法部联合发布婚姻家庭纠纷调解工作典型案例。其中包括一则男子发...
聚焦北大荒|八五九分公司党员干... 时至岁末,为提升职工群众法治意识,筑牢农业生产法治防线,北大荒农业股份八五九分公司第六管理区组织党员...
呼和浩特海关开展“关企零距离”... 近日,呼和浩特海关企业管理和稽查处联合包头海关共同开展“关企零距离”政策宣讲活动,以精准政策解读打通...
金融监管总局:集群打击金融领域... 国家金融监督管理总局稽查局局长邢桂君12月25日在公安部新闻发布会上介绍,今年6月金融领域“黑灰产”...