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)

第四题由于最近事情多就没去看,等下次周赛再给大家带来题解哦。

你可能感兴趣的:(算法,leetcode,算法,职场和发展)