• LeetCode第 303 场周赛


    第 303 场周赛

    自己选择的路,就开心的走下去

    2351. 第一个出现两次的字母

    第一个出现两次的字母
    image-20220725194701186

    循环扫描字符串s,遇到每一个字符就将对应字符个数加一
    如果第一个字符统计个数为2那就说明该元素是最先出现的,直接返回。

    复杂度o(n^3)

    class Solution {
    public:
        char repeatedCharacter(string s){
            char res;
            map m;
            for(auto& c:s){
                ++m[c];
                if(m[c]==2){
                    return c;}
                }
            return ' ';
            
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2352. 相等行列对

    2352. 相等行列对
    image-20220725210751410

    思路:

    暴力枚举

    1. n行n列的矩阵,循环遍历每一行和每一列的元素,如果行列对应元素不等那么就不可能成为答案。
    2. 如果对应行和列的元素全部相等,则答案加一。
    class Solution {
    public:
        int equalPairs(vector>& grid) {
            int row = grid[0].size();
            int col = grid.size();
            int cnt=0;
            for(int i=0;i
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    思路二:

    将矩阵进行转置。

    比较对应元素的值是否相等即可

    复杂度o(n^2)

    class Solution {
    public:
        int equalPairs(vector>& grid) {
            int row = grid[0].size();
            int col = grid.size();
            int cnt=0;
             bool same ;
            vector> Revsgrid(row,vector(col));
           for(int i=0;i
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    方法三:

    hashmap

    将矩阵的每一行元素存储为字符串(因为行元素可能很多,不方便存储),然后将矩阵的元素按照“,”划分。将每一行字符串存入hashmap作为key,同时value加一

    转置按列来存储,如果发现此前按行存储的有对应的值,则将mp中的value取出加到结果到当中(mp中的key可能重复,所以不能仅仅是加一)

    class Solution {
    public:
        int equalPairs(vector>& grid) {
            int row = grid[0].size();
            int col = grid.size();
            int cnt=0;
             unordered_map mp;
             bool same ;
           for(int i=0;i

2353. 设计食物评分系统

2353. 设计食物评分系统

image-20220726083003989

思路:

平衡树(有序集合)

我们可以用一个哈希表 \textit{fs}fs 记录每个食物名称对应的食物评分和烹饪方式,另一个哈希表套平衡树 cs 记录每个烹饪方式对应的食物评分和食物名字集合。

对于 changeRating 操作,先从cs[fs[food].cuisine]中删掉旧数据,然后将 newRating}newRating 和 food 记录到 cs 和fs 中。

这里pair中的评分使用负, 这里放入“负的评分”和字符串,这样“负的评分”小的,也就是评分大的食物会排在前面

作者:endlesscheng
链接:https://leetcode.cn/problems/design-a-food-rating-system/solution/ha-xi-biao-tao-ping-heng-shu-by-endlessc-hzct/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

class FoodRatings {
    //set中pair这样设计是为了使得pair默认先比较食物评分,然后再比较后面的食物名字字典排序
    unordered_map>> cs;;// 烹饪方式----> (食物评分,食物名字)
    unordered_map> fs;//食物 ---->(食物评分,烹饪方式)

public:
    FoodRatings(vector& foods, vector& cuisines, vector& ratings) {
        for(int i = 0;isecond;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

2354. 优质数对的数目

2354. 优质数对的数目
image-20220726094237484

思路:等价转换+脑筋急转弯

https://leetcode.cn/problems/number-of-excellent-pairs/solution/deng-jie-zhuan-huan-pythonjavacgo-by-end-2qzs/

class Solution {
public:
    long long countExcellentPairs(vector& nums, int k) {
        long  res= 0L;
        unordered_map mp;
        for(int x:unordered_set(nums.begin(),nums.end())){
            mp[__builtin_popcount(x)]++;//将统计二进制数为多少的进行一个统计
        }
        for(auto&[cx,ccx]:mp){
            for(auto&[cy,ccy]:mp){
                if(cx+cy>=k){
                    res+=(long)ccx*ccy;
                }
            }
        }
        return res;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

总结:
本次周赛是通过练习的方式去完成的,并没有参加。
T1:属于一个hashmap存储,优先存储到2的即为首个出现的字母(不算难)
T2:主要的潜在核心就是能够将题目中的行列的信息,进行矩阵的转置然后再比较对应位置上的元素,主要有直接暴力枚举,矩阵转置,hashmap。但我感觉矩阵转置好一点,hashmap的思想和矩阵转置差不大多,而且还不好想,还有点麻烦。(个人感觉)
T3:主要就是设置好一点的数据结构,能够满足最终结果所需要的。难点在于数据结构的设计这一块。
T4:属于脑筋急转弯和集合相关的内容了,有点吃力。(好像还是不太懂!)同时再看解析的时候,学到了__builtin_popcount(x)这一个函数。用于计算一个 32 位无符号整数有多少个位为1
后面的过程将持续总结前面做过周赛的题目,进行一个巩固。同时持续学习C++中stl中常用的一些知识点。

  • 相关阅读:
    95后大厂程序员删库被判刑,只因项目被接手对领导心生不满
    RT-Smart 应用开发笔记:fopen 造成文件被清空问题的分析记录
    【优选算法系列】第一节.滑动窗口(209. 长度最小的子数组和3. 无重复字符的最长子串)
    数据库优化
    【Docker1】指令,docker-compose,Dockerfile
    面试被问到HashMap 底层原理?看完这边文章绝对不慌!
    VIM 编辑文件命令
    在教育领域,AI垂直大模型应用场景总结!
    快速查看PHP扩展的版本信息
    递归讲解-分形树(python版:两种书写方法)
  • 原文地址:https://blog.csdn.net/qq_45353823/article/details/126011059