阿里笔试3.23

才发现,做笔试犯了一个很低级的错误,导致一道题都没通过,也不知道对不对,将就看吧

# 第一题:给定一个3*n的矩阵,从每一列选出一个数字组成一个长度为n的列表,使得列表的绝对值之和最小,即sum(a[i]-a[i+1]).
a=[[48,9,7,15,6],
   [89,51,2,7,62],
   [21,9,18,30,81]]
# a=[]
# for i in range(3):
#     a.append(list(map(int,input().split())))
res=[]
col =len(a[0])
row=0
while row<3:
    ans=[]
    temp = a[row][0]
    ans.append(temp)
    for i in range(1,col):
        maxDiff = abs(ans[i-1]-a[0][i])
        index=0
        for j in range(1,3):
            if abs(ans[i-1]-a[j][i])<maxDiff:
                maxDiff = abs(ans[i-1]-a[j][i])
                index=j
        ans.append(a[index][i])
    row+=1
    absValue=0
    for k in range(len(ans)-1):
        absValue+=abs(ans[k]-ans[k+1])
    res.append(absValue)
print(min(res))

# 第二题:给定一个n*n矩阵,每一行每列都是等差序列,但有些位置为0,你需要利用等差序列性质将这些位置填充,实在无法填充,返回unkown.
import numpy as np
a=[[1,0,3,0],
   [2,4,0,8],
   [0,0,0,0]]
row=len(a)
col = len(a[0])
for i in range(row):
    temp= np.array(a[i][:])
    index= np.where(temp!=0)[0]
    value = temp.ravel()[index]
    # print(index,np.shape(index)[0])
    if len(index)>1:
        d=(value[1]-value[0])/(index[1]-index[0])
        x = np.where(temp==0)[0]
        for j in range(len(x)):
            a[i][x[j]]=value[0]+(x[j]-index[0])*d
print(a)
a =np.array(a)
for i in range(col):
    temp= np.array(a[:,i])
    print(temp)
    index= np.where(temp!=0)[0]
    value = temp.ravel()[index]
    # print(index,np.shape(index)[0])
    if len(index)>1:
        d=(value[1]-value[0])/(index[1]-index[0])
        x = np.where(temp==0)[0]
        for j in range(len(x)):
            a[x[j]][i]=value[0]+(x[j]-index[0])*d

print(a)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值