力扣第306场周赛 + AcWing第64场周赛补题

力扣

一.矩阵中的局部最大值

1.原题链接:

2.解题思路:

枚举每个3 * 3矩阵,求出最大值,ans即为答案矩阵

3.参考代码:

class Solution {
public:
   vector<vector<int>> largestLocal(vector<vector<int>>& grid) {
        int n = grid.size();
        vector<vector<int>> ans(n - 2, vector<int>(n - 2, 0));
        for (int r = 0; r < n - 2; r++) {
            for (int c = 0; c < n - 2; c++) {
                for (int i = r; i < r + 3; i++) {
                    for (int j = c; j < c + 3; j++) {
                        ans[r][c] = max(ans[r][c], grid[i][j]);
                    }
                }
            }
        }
        return ans;
    }
};

二.边积分最高的节点

1.原题链接:

2.解题思路:

先用数组 cnt 表示到 i 的和,开long long 用 mx 表示最大值,然后找第一个是最大值的 cnt[ i ] 就是答案

3.参考代码:

class Solution {
public:
    int edgeScore(vector<int>& edge) {
        vector<long long>cnt(edge.size(), 0);
        for(int i = 0; i < edge.size(); i++)cnt[edge[i]] += i;
        long long mx = 0;
        for(int i = 0; i < edge.size(); i++)mx = max(mx, cnt[i]);
        for(int i = 0; i < edge.size(); i++)if(cnt[i] == mx)return i;
        return 0;
    }
};

AcWing

一.A + B

1.原题链接:

2.解题思路:

输入两个整数求和

3.参考代码:

#include<iostream>

using namespace std;

int main()
{
    int a, b, s = 0;
    cin >> a >> b;
    s = a + b;
    cout << s << endl;
    return 0;
}

二.三国语言

1.原题链接:

2.解题思路:

每个国家的人说话的最后一个字符都不一样,只需要判断最后一个字符即可

3.参考代码:

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin >> n;
    while(n--){
        string s;
        cin >> s;
        int n = s.size();
        if(s[n - 1] == o && s[n - 2] == p)puts("FILIPINO");
        else if(s[n-1]==u&&s[n-2]==s&&s[n-3]==e&&s[n-4]==d||s[n-1]==u&&s[n-2]==s&&s[n-3]==a&&s[n-4]==m)puts("JAPANESE");
        else puts("KOREAN");
    } 
}

三.子数组异或和

1.原题链接:

2.解题思路:

h[0]是下标为偶数的哈希表,h[1]是下标为奇数的哈希表 储存对应异或和相同的值的数量,从前往后遍历,判断前面与当前异或和值相同值的数量(保证奇偶一致),枚举起点和终点, 找到起点和终点相同的数的个数

3.参考代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<unordered_map>

using namespace std;
const int N = 300010;

typedef long long LL;

int n;
int a[N];

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];

    LL res = 0,sum = 0;
    unordered_map<int, int> h[2];
    h[0][sum]++;
    for(int i = 1; i <= n; i++)

    {
        sum ^= a[i];
        res += h[i % 2][sum];
        h[i % 2][sum]++;
    }
    cout << res << endl;

    return 0;
}
经验分享 程序员 微信小程序 职场和发展