赞
踩
知识点数组统计 哈希表 左右数组
时间限制: 1s 空间限制: 256MB 限定语言: 不限
题目描述:
工位由序列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分
解题思路:
public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); String[] strings = str.split(" "); Map<Integer, Integer> leftToRight = new HashMap<>(); Map<Integer, Integer> rightToLeft = new HashMap<>(); //正向遍历,只要num是1,sum就+1,只要不是1,sum则置为0 int sum = 0; for (int i = 0; i < strings.length; i++) { int num = Integer.parseInt(strings[i]); if (num == 1) { sum++; } else if (num == 0) { leftToRight.put(i, sum); sum = 0; }else { sum = 0; } } sum = 0; //反向遍历,从右往左 for (int i = strings.length - 1; i >= 0; i--) { int num = Integer.parseInt(strings[i]); if (num == 1) { sum++; } else if (num == 0) { rightToLeft.put(i, sum); sum = 0; }else { sum = 0; } } int max = 0; for (int key : leftToRight.keySet()) { int val = leftToRight.get(key) + rightToLeft.get(key); max = Math.max(val, max); } System.out.println(max); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。