当前位置: 首页 > 面试经验 >

【华为OD机试2023】新员工座位安排系统(Python)

优质
小牛编辑
150浏览
2023-03-28

【华为OD机试2023】新员工座位安排系统(Python)

题目描述:

工位由序列F1,F2...Fn组成,Fi值为0、1或2。其中0代表空置,1代表有人,2代表障碍物。

1、某一空位的友好度为左右连续老员工数之和

2、为方便新员工学习求助,优先安排友好度高的空位

给出工位序列,求所有空位中友好度的最大值。

输入描述:

第一行为工位序列:F1,F2...Fn组成,1<=n<=100000,Fi值为0、1或2。其中0代表空置,1代码有人,2代表障碍物

其中0代表空置,1代码有人,2代表障碍物。

输出描述:

所有空位中友好度的最大值。如果没有空位,返回0。

示例1

输入:

0 1 0

输出:

1

说明:

第1个位置和第3个位置,友好度均为1

示例2

输入:

1 1 0 1 2 1 0

输出:

3

说明:

第3个位置友好度为3。因障碍物隔断,左边得2分,右边只能得1分。

解题思路:

思路是首先遍历座位表,如果存在老员工,则统计数量,如果遇到空位,则向新列表队尾添加0,如果遇到障碍,则添加-1

然后遍历新列表,每遇到一个空位,计算其左右的老员工数。

逻辑判断嵌套太多,写得糊涂了,代码很丑陋,理解思路就好


lst=list(map(int,input().split()))
new_lst=[]
pre_seat=0
count=0
for i,value in enumerate(lst):
if pre_seat==0 or pre_seat==2:
if value==1:
count+=1
if i==len(lst)-1:
new_lst.append(count)
elif value==0:
new_lst.append(0)
else:
new_lst.append(-1)
else:
if value == 1:
count += 1
if i==len(lst)-1:
new_lst.append(count)
elif value == 0:
new_lst.append(count)
count=0
new_lst.append(0)
else:
new_lst.append(count)
count=0
new_lst.append(-1)
pre_seat=value
max_fri=0
for i,value in enumerate(new_lst):
if value==0:
if i==0:
left=0
if new_lst[i+1]==0 or new_lst[i+1]==-1:
right=0
else:
right=new_lst[i+1]
elif i==len(new_lst)-1:
right=0
if new_lst[i-1]==0 or new_lst[i-1]==-1:
left=0
else:
left=new_lst[i-1]
else:
if new_lst[i-1]==0 or new_lst[i-1]==-1:
left=0
if new_lst[i + 1] == 0 or new_lst[i + 1] == -1:
right = 0
else:
right = new_lst[i + 1]
else:
left=new_lst[i-1]
if new_lst[i + 1] == 0 or new_lst[i + 1] == -1:
right = 0
else:
right = new_lst[i + 1]
max_fri=max(max_fri,left+right)
print(max_fri)

#华为机试,emo了#
 类似资料: