【发布时间】:2020-04-22 06:50:09
【问题描述】:
问题来了:
给定一个大小未知的整数的 ArrayList 和其他三个 int 值,删除 ArrayList 中位于 int 值指定的索引位置的三个元素。将 ArrayList 的第一个元素设置为三个移除值的平均值(四舍五入到最接近的 int),并返回 ArrayList。
前提条件:ArrayList 至少有四个元素,其他 int 值将按降序排列,以防止混淆它们代表的索引。
apcsaListAverageRemovals([3, 6, 8, 10], 3, 2, 1) → [8]
apcsaListAverageRemovals([-177, 383, 476, -15, 62, 19, -247], 3, 2, 1) → [281, 62, 19, -247]
apcsaListAverageRemovals([258, 99, 225, 430, -497, 124], 4, 3, 3) → [19, 99, 225]
这是我尝试的解决方案
public ArrayList<Integer> apcsaListAverageRemovals(ArrayList<Integer> lst, int a, int b, int c) {
int suma = lst.get(a);
lst.remove(a);
int sumb = lst.get(b);
lst.remove(b);
int sumc = lst.get(c);
lst.remove(c);
int avg = (suma + sumb +sumc)/3;
lst.set(0, avg);
return lst;
}
对于大多数情况,我的解决方案有效,但在少数情况下,它返回的第一个元素比该情况的预期值小一个。
这是一个例子:apcsaListAverageRemovals([33, -481, 245, 359, 166], 3, 2, 2) → Expected:[257, -481] Returned:[256, -481]
【问题讨论】:
-
直接发布问题,不要指望我们访问一些不知名的网站。并向我们展示实际与预期的结果和输入值。
-
少一个很可能是四舍五入的结果。如果你想平均几个整数,大多数时候结果是一个浮点数,你不能在整数包装器中表示(实际上这相当于一个
floor-函数)。尝试使用ArrayList<Float>作为返回类型(尽管我不明白为什么不直接返回float)。 -
在获得所有三个项目之前不要删除项目。
int avg = (lst.get(a) + lst.get(b) + lst.get(c))/3;然后删除 a,b,c