LeetCode笔记:Weekly Contest 275

本文总结了LeetCode周赛275的四道题目的解题思路及Python代码实现,包括矩阵验证、最小交换次数、单词计数及最早开花日期等问题,提供了高效的算法解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 题目一

给出题目一的试题链接如下:

1. 解题思路

这题没啥好说的,就是按照题目意思检查一下即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def checkValid(self, matrix: List[List[int]]) -> bool:
        n = len(matrix)
        if any(len(set(l)) != n for l in matrix):
            return False
        if any(len(set([matrix[j][i] for j in range(n)])) != n for i in range(n)):
            return False
        return True

提交代码评测得到:耗时854ms,占用内存14.7MB。

2. 题目二

给出题目二的试题链接如下:

1. 解题思路

这一题多少算是一道巧题吧,因为最终的交换结果一定是一连串的1和剩余其他位置的0,那么,我们只需要考察1的总数(不妨记为l),然后考察一下所有的长度为l的连续子串当中0的个数,其个数即为需要交换的次数。

然后我们去一个最小值即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def minSwaps(self, nums: List[int]) -> int:
        n, s = len(nums), sum(nums)
        nums = [0] + nums + nums[:s]
        accum = list(accumulate(nums))
        return min(s - (accum[i+s] - accum[i]) for i in range(n))

提交代码评测得到:耗时1324ms,占用内存25.9MB。

3. 题目三

给出题目三的试题链接如下:

1. 解题思路

这题暂时我也没啥好的思路,就是用一个26维的数组来表达每一个单词,其中每一个维度代表其对应的字母出现的次数,然后看一下target当中的每一个单词删除一个字符之后出现的词是否在startwords当中。

2. 代码实现

给出python代码实现如下:

class Solution:
    def wordCount(self, startWords: List[str], targetWords: List[str]) -> int:
        starts = set()
        for w in startWords:
            s = [0 for _ in range(26)]
            for ch in w:
                s[ord(ch) - ord('a')] += 1
            starts.add(tuple(s))
        
        res = 0
        for w in targetWords:
            s = [0 for _ in range(26)]
            for ch in w:
                s[ord(ch) - ord('a')] += 1
            for i in range(26):
                if s[i] > 0:
                    s[i] -= 1
                    if tuple(s) in starts:
                        res += 1
                        break
                    s[i] += 1
        return res

提交代码评测得到:耗时2088ms,占用内存37.8MB。

4. 题目四

给出题目四的试题链接如下:

1. 解题思路

这一题感觉有点水,我就使用了一个贪婪算法,显然所有的浇水时间都是必须的,那么可以缩减的就是生长的时间,因此我们按照生长的时间倒序排列,然后依次进行种植,之后就只要看一下每一朵花生长所需的最短时间即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def earliestFullBloom(self, plantTime: List[int], growTime: List[int]) -> int:
        times = sorted(zip(plantTime, growTime), key=lambda x: (x[1], -x[0]), reverse=True)
        
        res = 0
        used = 0
        for pt, gt in times:
            res = max(res, used + pt + gt)
            used += pt
        return res

提交代码评测得到:耗时1959ms,占用内存41.5MB。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值