[LeetCode周赛复盘] 第 303 场周赛20220724

一、本周周赛总结

  • 掉分的一周。
  • 前三题难得做挺快,第四题牢底坐穿。
    在这里插入图片描述

二、 [Easy] 6124. 第一个出现两次的字母

链接: 6124. 第一个出现两次的字母

1. 题目描述

在这里插入图片描述

2. 思路分析

定级Easy。
按题意模拟即可。

3. 代码实现

class Solution:
    def repeatedCharacter(self, s: str) -> str:
        cnt = defaultdict(int)
        for c in s:
            cnt[c]+= 1
            if cnt[c] == 2:
                return c
        

三、[Medium] 6125. 相等行列对

链接: 6125. 相等行列对

1. 题目描述

在这里插入图片描述

2. 思路分析

定级Medium。
转置后暴力判断。

3. 代码实现

class Solution:
    def equalPairs(self, grid: List[List[int]]) -> int:
        n = len(grid)
        
        g = [[0]*n for i in range(n)]
        for i in range(n):
            for j in range(n):
                g[j][i] = grid[i][j]
        
        
        ans = 0
        for i in range(n):
            for j in range(n):
                if g[i] == grid[j]:
                    ans += 1
        return ans

四、[Medium] 6092. 替换数组中的元素

链接: 6092. 替换数组中的元素

1. 题目描述

在这里插入图片描述

2. 思路分析

定级Medium。
和昨晚双周赛T3差不多,就是k,v的互相哈希。

3. 代码实现

class FoodRatings:

    def __init__(self, foods: List[str], cuisines: List[str], ratings: List[int]):
        self.f_c = defaultdict()
        self.f_r = defaultdict()
        from sortedcontainers import SortedList
        self.c_rf = defaultdict(SortedList)
        c_rf = self.c_rf
        f_c = self.f_c
        f_r = self.f_r
        n = len(foods)
        for f,c,r in zip(foods,cuisines,ratings):
            c_rf[c].add((-r,f))
            f_c[f] = c 
            f_r[f] = r

    def changeRating(self, food: str, newRating: int) -> None:
        c_rf = self.c_rf
        f_c = self.f_c
        f_r = self.f_r
        f = food
        c = f_c[food]
        r = f_r[food]
        c_rf[c].remove((-r,f))
        r = newRating
        c_rf[c].add((-r,f))
        f_c[f] = c 
        f_r[f] = newRating
        # print(c_rf)
        
    def highestRated(self, cuisine: str) -> str:
        return self.c_rf[cuisine][0][1]

# Your FoodRatings object will be instantiated and called as such:
# obj = FoodRatings(foods, cuisines, ratings)
# obj.changeRating(food,newRating)
# param_2 = obj.highestRated(cuisine)

五、[Hard] 6127. 优质数对的数目

链接: 6127. 优质数对的数目

1. 题目描述

在这里插入图片描述

2. 思路分析

定级Hard
坐牢。

  • 实际上发现a&b和a|b的位1个数和=a的个数+b的个数。
  • 所以统计每个数的位1个数,排序后计算和大于k的对数即可。

3. 代码实现

class Solution:
    def countExcellentPairs(self, nums: List[int], k: int) -> int:
        """
        001 010 011 001
        101 001 001
        """
        nums = sorted(list(set(nums)))
        def hammingWeight( n: int) -> int:
            ret = 0
            while n:
                n &= n - 1
                ret += 1
            return ret
        arr = []
        for a in nums:
            arr.append(hammingWeight(a))
        arr.sort()
        n = len(arr)
        ans = 0
        for i,a in enumerate(arr):
            j = bisect_left(arr,k-a)
            ans += n-j
        return ans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值