目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
一、题目描述
工位由序列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。
四、解题思路
找到每个0出现的位置,然后分别向前后找连续出现的1,出现计数变量就加一,不是1就跳
五、Java算法源码
/**
* 找到每个0出现的位置,然后分别向前后找连续出现的1,出现计数变量就加一,不是1就跳
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Integer[] arr = Arrays.stream(sc.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new);
int result = 0;
// 0的左边有几个1
int left = 0;
// 0的右边有几个1
int right = 0;
for (int i = 0; i < arr.length; i++) {
// 0的左边有几个1
if (arr[i] == 1) {
left++;
} else if (arr[i] == 2) {//遇到障碍物,左边1的数量归0
left = 0;
} else if (arr[i] == 0) {
for (int j = i + 1; j < arr.length; j++) {
// 0的右边有几个1
if (arr[j] == 1) {
right++;
// 计算右边一共出现几个1
} else if (arr[j] == 0 || arr[j] == 2) {
break;
}
}
// 如果当前0的友好度不是最大,则替换为最大
if (result < left + right) {
result = left + right;
}
// 当前0的友好度计算完毕,左右1的个数归0,计算下一个0的友好度
right = 0;
left = 0;
}
}
System.out.println(result);
}
六、效果展示
1、输入
1 1 0 1 2 1 0
2、输出
3
3、说明
第一个0的友好度为3,第二个0的友好度为1,故输出3。
🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。