力扣第 306 场周赛复盘

1. 矩阵中的局部最大值

题目描述

题目分析

简单模拟题,这道题数据范围不大,所以只需要模拟即可

AC代码

class Solution {
          
   
public:
    int findmax(vector<vector<int>>& grid,int x,int y)
    {
          
   
        int cur=0;
        for(int i=x;i<x+3;i++)
            for(int j=y;j<y+3;j++)
                cur=max(cur,grid[i][j]);
        return cur;
    }
    vector<vector<int>> largestLocal(vector<vector<int>>& grid) {
          
   
        int n=grid.size();
        vector<vector<int>> res;
        for(int i=0;i<n-2;i++)
        {
          
   
            vector<int> tmp;
            for(int j=0;j<n-2;j++)
                tmp.push_back(findmax(grid,i,j));
            res.push_back(tmp);
        }
        return res;
    }
};

2. 边积分最高的节点

题目描述

题目分析

只需要遍历一遍,将每个点的边积分求出来即可,然后求出最大值。 注意:不能用unordered_map这是无序的,注意longlong

AC代码

class Solution {
          
   
public:
    int edgeScore(vector<int>& edges) {
          
   
        map<int,long long> hash;
        for(int i=0;i<edges.size();i++)
            hash[edges[i]]+=i;
        
        int maxi=-1,maxn=-1;
        for(auto it:hash)
        {
          
   
            if(it.second>maxn)maxi=it.first,maxn=it.second;
        }
        return maxi;
    }
};

3. 根据模式串构造最小数字

题目描述

题目分析

思路:贪心 假设区间全是升序,那么我们从小到大排序即可 如果有降序呢?那么我们将应该降序的区间的升序全部变成降序即可。 这样可以保证所得的数字最小。

AC代码

class Solution {
          
   
public:
    string smallestNumber(string pattern) {
          
   
        int n=pattern.size();
        string res;
        for(int i=1;i<=n+1;i++)res+=i+0;// 从小到大
        int pre=-1;
        for(int i=0;i<=n;i++)
        {
          
   
            if(pattern[i]==I)pre=i;
            if(pattern[i]==D&&(i==n-1||pattern[i+1]!=D))
            {
          
   
                int l=pre+1,r=i+1;// 找出交换区间
                if(i==n)r=i;
                while(l<r)swap(res[l],res[r]),l++,r--;// 交换
                i++;
                pre=i;
            }
        }
        return res;

    }
};

4. 统计特殊整数

题目描述

题目分析

数位DP,没有接触过,后续补充

AC代码

总结感想

前两道题都是比较简单,第三题当时想到方法,但是实现有bug找了半天,而且其实代码也很杂,后续通过画图很轻松就知道怎么写了(以后要多画图),最后一道题其实一读就知道是数位DP,但是自己不会(其实碰到很多次,都没认真做过)。 多刷题,多总结,多画图,多反思!!!

经验分享 程序员 微信小程序 职场和发展