• AcWing周赛 70 && LeetCode单周赛 312


    一、AcWing周赛 70

    1、4618.两个素数

    (1)原题链接:4618. 两个素数 - AcWing题库

    (2)解题思路:

            1、先遍历找到一个素数;

            2、然后再从该素数开始往后遍历找到另一个素数,若两个素数的乘积等于x,则直接退出循环,返回这两个素数。

            整体思路就是暴力干!

    (3)参考代码:

    1. #include <bits/stdc++.h>
    2. using namespace std;
    3. bool is_prime(int x)
    4. {
    5. if(x < 2) return false;
    6. for(int i = 2; i <= x / i; i ++)
    7. {
    8. if(x % i == 0) return false;
    9. }
    10. return true;
    11. }
    12. int main()
    13. {
    14. int x;
    15. cin >> x;
    16. int t1 = 0, t2 = 0;
    17. for(int i = 2; i <= x; i ++) {
    18. if(is_prime(i)) {
    19. t1 = i;
    20. for(int j = i; j <= x; j ++) {
    21. if(is_prime(j)) {
    22. t2 = j;
    23. if(t1 * t2 == x) break;
    24. }
    25. }
    26. }
    27. if(t1 * t2 == x) break;
    28. }
    29. cout << t1 << ' ' << t2 << endl;
    30. return 0;
    31. }

     

    2、4619.减法操作

    (1)原题链接:4619. 减法操作 - AcWing题库

    (2)解题思路: 

            1、题目的意思可以转化为先将所有的数都改变为偶数,若不能则返回NO, 反之则返回YES;

            2、我们可以通过操作2(任选两个相邻元素,并将两个元素的值各减去 1)将所有的元素转换为偶数。具体操作是遍历到奇数时,将当前元素和与之相邻的下一个元素的值都减1,以此类推。

            3、最后再遍历整个数组,若存在小于零的数或者存在奇数,则说明无法满足题目条件。

    (3)参考代码:

    1. #include <iostream>
    2. #include <cstring>
    3. #include <algorithm>
    4. using namespace std;
    5. const int N = 2e5 + 10;
    6. int n;
    7. int a[N];
    8. bool check()
    9. {
    10. for(int i = 0; i < n - 1; i ++ ) {
    11. if(a[i] % 2) {
    12. a[i] --;
    13. a[i + 1] --;
    14. }
    15. }
    16. for(int i = 0; i < n; i ++ ) {
    17. if(a[i] % 2 || a[i] < 0) return false;
    18. }
    19. return true;
    20. }
    21. int main()
    22. {
    23. cin >> n;
    24. for(int i = 0; i < n; i ++ ) cin >> a[i];
    25. if(check()) puts("YES");
    26. else puts("NO");
    27. return 0;
    28. }

    二、LeetCode单周赛 312

    1、6188.按身高排序

    (1)原题链接:力扣icon-default.png?t=M85Bhttps://leetcode.cn/problems/sort-the-people/

    (2)解题思路:

            1、用一个vector>  tmp保存身高和对应的下标;

            2、对tmp进行排序,因为vector>排序默认的是第一个值,所以再依次通过下标找到对应的名字即可。

    (3)参考代码:

    1. class Solution {
    2. public:
    3. vector<string> sortPeople(vector<string>& names, vector<int>& heights) {
    4. vector<pair<int, int>> tmp;
    5. for(int i = 0; i < heights.size(); i ++ ) {
    6. tmp.push_back({heights[i], i});
    7. }
    8. sort(tmp.rbegin(), tmp.rend());
    9. vector<string> res;
    10. for(int i = 0; i < tmp.size(); i ++ ) {
    11. res.push_back(names[tmp[i].second]);
    12. }
    13. return res;
    14. }
    15. };

    2、6189.按位与最大的最长子数组

    (1)原题链接:力扣icon-default.png?t=M85Bhttps://leetcode.cn/problems/longest-subarray-with-maximum-bitwise-and/

    (2)解题思路:

            题目意思可以转换为找到最大的数,并且返回其最大的连续长度。具体见代码。

    (3)参考代码:

    1. class Solution {
    2. public:
    3. int longestSubarray(vector<int>& nums) {
    4. int maxm = 0;
    5. for(auto& x: nums) maxm = max(maxm, x);
    6. int res = 1;
    7. int cnt = 0;
    8. for(auto& x: nums) {
    9. if(maxm == x) cnt ++;
    10. else {
    11. res = max(res, cnt);
    12. cnt = 0;
    13. }
    14. }
    15. res = max(res, cnt);
    16. return res;
    17. }
    18. };

    3、6190.找到所有好下标

    (1)原题链接:力扣icon-default.png?t=M85Bhttps://leetcode.cn/problems/find-all-good-indices/

    (2)解题思路:

    整体思路:先顺序遍历找到满足下标 i 之前 的 k 个元素是 非递增的下标 i 保存到哈希表中,再逆序遍历找到满足下标 i 之后 的 k 个元素是 非递减的下标 i ,判断其是否在哈希表中,若在则将下标保存到答案数组中。

            1、用一个队列来保存满足条件(非递增的)的下标 i 对应的元素及其之前的 k 个元素,当队列的长度为 k 时,用哈希表保存满足条件(非递增的)的下标 i ;

            2、用另一个队列保存满足条件(非递减的)的下标 i 对应的元素及其之后的 k 个元素,当队列的长度为 k 时,在哈希表中判断该下标是否存在,若存在则保存到答案数组中。

            3、对答案数组排序

    (3)参考代码:

    1. class Solution {
    2. public:
    3. vector<int> goodIndices(vector<int>& nums, int k) {
    4. int n = nums.size();
    5. vector<int> res;
    6. unordered_map<int, int> mp;
    7. queue<int> q, q1;
    8. q.push(nums[0]);
    9. for(int i = 1; i < n ; i ++ ) {
    10. if(q.size() == k) {
    11. mp[i] = 1;
    12. if(nums[i] <= q.back()) q.push(nums[i]);
    13. else {
    14. while(!q.empty()) q.pop();
    15. q.push(nums[i]);
    16. }
    17. }
    18. else{
    19. if(nums[i] <= q.back()) q.push(nums[i]);
    20. else {
    21. while(!q.empty()) q.pop();
    22. q.push(nums[i]);
    23. }
    24. }
    25. if(q.size() == k + 1) q.pop();
    26. }
    27. q1.push(nums[n - 1]);
    28. for(int i = n - 2; i >= 0; i -- ) {
    29. if(q1.size() == k) {
    30. if(mp.count(i)) res.push_back(i);
    31. if(nums[i] <= q1.back()) q1.push(nums[i]);
    32. else {
    33. while(!q1.empty()) q1.pop();
    34. q1.push(nums[i]);
    35. }
    36. }
    37. else {
    38. if(nums[i] <= q1.back()) q1.push(nums[i]);
    39. else {
    40. while(!q1.empty()) q1.pop();
    41. q1.push(nums[i]);
    42. }
    43. }
    44. if(q1.size() == k + 1) q1.pop();
    45. }
    46. sort(res.begin(), res.end());
    47. return res;
    48. }
    49. };

  • 相关阅读:
    聚观早报 | 推特临时培训员工应对世界杯;世界杯足球内置传感器
    仅做笔记用:Stable Diffusion 通过 ControlNet 扩展图片 / 扩图
    springboot简单使用 kafka
    多测师肖sir_高级讲师_第2个月第12讲pyhton+pymysql
    一篇带你了解MyBatisPlus的使用
    Fast Fourier transform快速傅里叶变换
    吃鸡缺少msvcp140.dll解决方法,msvcp140.dll丢失的3个修复方法
    密码学学习
    ftp文件传输协议
    非近轴衍射分束器的设计与严格分析
  • 原文地址:https://blog.csdn.net/m0_58068094/article/details/127036150