Leetcode第 275 场周赛

简介: Leetcode第 275 场周赛

Leetcode第 275 场周赛

📒博客首页:*铁甲小宝同学*


🎅文章目的:周赛总结😻


🙏博主也在学习阶段,如若发现问题,请告知,非常感谢🙏


💗同时也非常感谢各位小伙伴们的支持💗


🌈每日一语:你只需要努力,其他的交给天意!!


第一题

检查是否每一行每一列都包含全部整数


本题为签到题。一般大家都可以做出来,还是建议大家多去尝试尝试周赛的!


思路:

由题的我们需要判断行和列是否都是从1 到 n的整数即可,我们首先可以把从1到n的所有数有序的放在一个数组中,然后再把矩阵里面的每行和每列的数都放在一个数组中,并排序之后在和最开始的那个进行判断,如果不相等返回flase即可。


代码:


class Solution:
    def checkValid(self, matrix: List[List[int]]) -> bool:
        line = list(range(1, len(matrix) + 1))
        for x, y in zip(matrix, list(zip(*matrix))):
            if sorted(x) != line or sorted(y) != line:
                return False
        return True


第二题

最少交换次数来组合所有的 1 II


本题为正常难度的题,大家多刷题就可以做出来。

思路:

这个题主要难点就是他是一个循环数组,我们不仅仅需要判断正常的数组长度,还要考虑他的循环数组。


本题问的是需要最少的调换次数,我们可以不用固定的思维来一个个数需要调换几个次数。我们先获取每个数组里面所有1的长度,然后用这个长度当作滑块来对这个循环数组进行滑动,判断每个滑块里面的0的个数,找出最少的个数即可获得到最小交换次数。


在这里吐槽一下,这题对python不是很友好,python的速度确实很慢,我做了五次,优化了五次都是过不了,还是看大神的优化才过的。最后在吐槽一下,Python虽然语法简单,不足的地方就是速度太慢了。


代码:


我的最高优化:


class Solution:
    def minSwaps(self, nums: List[int]) -> int:
        hk = sum(nums)
        res = sum(nums[:hk])
        a = res
        for i in range(0,len(nums)-hk+1):
            a = max(a,sum(nums[i:hk+i]))
        for i in range(0,hk):
            a = max(a,sum(nums[:i] + nums[i-hk:]))
        return hk -a




看了大神的优化:


class Solution:
    def minSwaps(self, nums: List[int]) -> int:
        n = len(nums)
        k = sum(nums)
        ans = float("inf")
        nums = nums*2
        sums = sum(nums[:k])
        ans = min(ans, k-sums)
        for i in range(k, n*2):
            if nums[i] == 1:
                sums += 1
            if nums[i-k] == 1:
                sums -= 1
            ans = min(ans, k-sums)
        return ans


第三题

统计追加字母可以获得的单词数


本题难度还可以,我看别的大神都是什么hash什么的做法,我属实没搞懂,就直接暴力了,还是太菜了!!!!!


思路:

本题所拼接或者重新排序看能得到目标数组里面的几个相同的单词,本题我就直接暴力了,还是建议大家能不暴力就不暴力,毕竟暴力没啥意思。


代码:


class Solution:
    def wordCount(self, startWords: List[str], targetWords: List[str]) -> int:
        a = set()
        for s in startWords:
            for c in 'abcdefghijklmnopqrstuvwxyz':
                if c not in s:
                    a.add(''.join(sorted(s + c)))
        return sum(''.join(sorted(i)) in a for i in targetWords)



相关文章
|
4月前
|
Go
golang力扣leetcode 第 291 场周赛
golang力扣leetcode 第 291 场周赛
52 0
|
4月前
|
Go vr&ar
golang力扣leetcode 第 288 场周赛
golang力扣leetcode 第 288 场周赛
49 0
|
4月前
|
Go
golang力扣leetcode 第 286 场周赛
golang力扣leetcode 第 286 场周赛
50 0
|
11月前
|
算法 Android开发
LeetCode 周赛上分之旅 #48 一道简单的树上动态规划问题
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
61 1
|
4月前
|
Go
golang力扣leetcode第 294 场周赛
golang力扣leetcode第 294 场周赛
47 0
|
4月前
|
算法 Java Go
golang力扣leetcode 第 293 场周赛
golang力扣leetcode 第 293 场周赛
76 0
|
4月前
|
Go
golang力扣leetcode 第 290 场周赛
golang力扣leetcode 第 290 场周赛
45 0
|
4月前
|
Go C++
golang力扣leetcode 第 284 场周赛
golang力扣leetcode 第 284 场周赛
53 0
|
4月前
|
存储
Leetcode第383场周赛
在LeetCode第383场周赛中,选手完成了3道题目。第一题是关于边界上的蚂蚁,蚂蚁根据非零整数数组nums的值移动,返回蚂蚁返回边界上的次数。解题方法是计算数组累加和为0的次数。第二题涉及计算网格的区域平均强度,给定一个灰度图像和阈值,返回每个像素所属区域的平均强度。解题关键在于理解相邻像素和区域定义,并计算平均强度。第三题是恢复单词初始状态的最短时间问题,通过移除前k个字符并添加k个字符,求恢复原词所需的最短时间。解题策略是检查去除前k个字符后的子串是否能作为原词的前缀。
27 1
Leetcode第383场周赛
|
4月前
|
Go
golang力扣leetcode 第 292 场周赛
golang力扣leetcode 第 292 场周赛
56 0