325
社区成员




class Solution:
def modifiedMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
m,n = len(matrix),len(matrix[0])
maxi = [0]*n
for i in range(n):
for j in range(m):
maxi[i] = max(maxi[i],matrix[j][i])
for i in range(n):
for j in range(m):
if matrix[j][i] == -1:
matrix[j][i] = maxi[i]
return matrix
暴力
class Solution:
def countMatchingSubarrays(self, nums: List[int], pattern: List[int]) -> int:
n,m = len(nums),len(pattern)
res = 0
for i in range(n-m):
cnt = 0
flag = True
for j in range(i,i+m):
if not flag:
break
if pattern[cnt] == 1 and nums[j+1] <= nums[j]:
flag = False
if pattern[cnt] == 0 and nums[j+1] != nums[j]:
flag = False
if pattern[cnt] == -1 and nums[j+1] >= nums[j]:
flag = False
cnt += 1
if flag:
res += 1
return res
首先哈希统计不同字符出现频数,同时记录奇数长度的字符串个数
关于回文字符串,考虑其组成特性:
如果有若干个出现过多次的字符,且它们的出现个数都是偶数,那么它们一定能够重新组合成n个回文字符串。于是可以把题目条件转化为该条件再进行讨论。利用贪心思想。
对于出现频数不为偶数的字符,抽出其中一个放入长度为奇数字符串的中间位置,这是在不影响字符串为回文串的前提下代价最小的方案一。
若方案一仍然无法使全部字符出现次数均为偶数,那么在此基础上采取方案二:按照方案一的方法抽出字符,放入最长的字符串中,最长的字符串用完后用第二长的,以此类推,每用一个字符串将初始答案n减去1,当全部字符出现次数均为偶数时返回答案。
class Solution:
def maxPalindromesAfterOperations(self, words: List[str]) -> int:
group = defaultdict(int)
cnt = 0#奇数字符串数量
for word in words:
cnt += len(word)%2
for c in word:
group[c] += 1
s = 0
words.sort(key = lambda x:-len(x))
for i,v in group.items():
if v%2:
s += 1
group[i] = v-1
n = len(words)
if s <= cnt:
return n
left = [len(x) for x in words]
for i in range(n-1,-1,-1):
if left[i]%2:
left[i] -= 1
s -= 1
i = 0
while s > 0:
s -= left[i]
i += 1
return n-i