博客首页:*铁甲小宝同学*
文章目的:
周赛总结
博主也在学习阶段,如若发现问题,请告知,非常感谢
同时也非常感谢各位小伙伴们的支持
每日一语:你只需要努力,其他的交给天意!!
检查是否每一行每一列都包含全部整数
本题为签到题。一般大家都可以做出来,还是建议大家多去尝试尝试周赛的!
思路:
由题的我们需要判断行和列是否都是从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)
第四题由于最近事情多就没去看,等下次周赛再给大家带来题解哦。