题目描述:
公交上有N排凳子,每排有两个凳子,每一排的凳子宽度不一样。有一些内向和外向的人按照顺序上车。 外向的人(0):只会选择没人的一排坐下,如果有很多排符合要求,他会选择座位宽度最小的坐下。 内向的人(1):只会选择有人的一排坐下,如果有很多排符合要求,他会选择座位宽度最大的坐下。 数据保证存在合理。输出每个人所在的排。
输入描述:
第一行有一个整数N.(1<=N<=100000)表示有N排凳子。 第二行有N个整数表示从第一排到第N排凳子宽度。(1<=len[i]<=10000) 第三行2*N个01组成的字符串,表示上车的人的性格。
输出描述:
输出每个人应该坐在那一排。
示例:
我的解答为:
//将personality转换为数组 char[] personality_arr = personality.toCharArray(); //定义一个ArrayList,存凳子的宽度和座位数的list ArrayList<ArrayList<Integer>> list = new ArrayList<>(); //遍历每一排凳子 for (int i = 0; i < arr.size(); i++) { //定义一个list,存储每一排凳子的宽度和座位数 ArrayList<Integer> list_1 = new ArrayList<>(); //将宽度和座位数存入list list_1.add(arr.get(i)); list_1.add(2); //将list存入list list.add(list_1); } //遍历每个人的性格 for (int i = 0; i < personality_arr.length; i++) { //索引 int comp = personality_arr[i] == '0' ? 10000 : -1; int index = -1; //如果是0 if (personality_arr[i] == '0') { //遍历list,找到座位数为2的最小宽度凳子 for (int j = 0; j < list.size(); j++) { if (list.get(j).get(1) == 2) { comp = comp < list.get(j).get(0) ? comp : list.get(j).get(0); index = comp < list.get(j).get(0) ? index : j; } } //将最小宽度凳子的座位数减1 list.get(index).set(1, 1); //将comp的索引加1,存入result result.add(index + 1); //如果是1 } else { //遍历list,找到座位数为1的最大宽度凳子 for (int j = 0; j < list.size(); j++) { if (list.get(j).get(1) == 1) { comp = comp > list.get(j).get(0) ? comp : list.get(j).get(0); index = comp > list.get(j).get(0) ? index : j; } } //将最大宽度凳子的座位数减1 list.get(index).set(1, 0); //将comp的索引加1,存入result result.add(index + 1); } }
然后点击提交答案按钮,没得反应.....,不知道对错,求问大佬