美团春季实习笔试
第一题思路:
矩阵位置为(i,j)
题目的意思是(i+j)%2==0上为同一个数字,(i+j)%2==1上为同一个数字
那么就建立两个字典d1,d2,存放key=matrix[i][j],values=matrix[i][j]出现的次数, 然后分别按values降序。
最后进行判断
1.d1的数字与d2的数字相等
n*m-max(a1[i][0],b1[0][0])2.d1的数字与d2的数字相等:
n*m-a1[0][0]-b1[j][0]附上AC代码
if __name__=='__main__':
n,m=map(int,input().split())
d1={}
d2={}
for i in range(n):
tmp=list(map(int,input().split()))
for j in range(m):
if (i+j)%2==0:
if tmp[j] in d1:
d1[tmp[j]]+=1
else: d1[tmp[j]]=1
else:
if tmp[j] in d2:
d2[tmp[j]]+=1
else: d2[tmp[j]]=1
a1=[]
b1=[]
for k1 in d1.keys():
a1.append([d1[k1],k1])
for k2 in d2.keys():
b1.append([d2[k2],k2])
a1=sorted(a1,key=lambda x:x[0],reverse=True)
b1=sorted(b1,key=lambda x:x[0],reverse=True)
res=float('inf')
i=j=0
while i<len(a1):
if a1[i][1]!=b1[0][1]:
tmp=n*m-a1[i][0]-b1[0][0]
res=min(tmp,res)
break
else:
tmp=n*m-max(a1[i][0],b1[0][0])
res=min(tmp,res)
i+=1
while j<len(b1):
if a1[0][1]!=b1[j][1]:
tmp=n*m-a1[0][0]-b1[j][0]
res=min(tmp,res)
break
else:
tmp=n*m-max(a1[0][0],b1[j][0])
res=min(tmp,res)
j+=1
print(res)
第二题思路:
来不及写了😅
树形DP?
#实习##春招##笔试题目#