gpt4 book ai didi

java - Java 中的区间总和

转载 作者:行者123 更新时间:2023-12-02 01:09:43 26 4
gpt4 key购买 nike

我在 CodeWars 中被这个 kata 困住了,我已经尝试了很长一段时间,比如一个 kata 花了一周左右的时间。如果您想了解我的问题,请访问 here

这是我的代码,如果你相信我,其中有很多错误。有人可以帮我吗?

public static int sumIntervals(int[][] intervals) {
int sum = 0;
int[] currentLargeInterval = {intervals[0][0], intervals[0][0]};
ArrayList<int[]> addedIntervals = new ArrayList<>();
ArrayList<int[]> arrays = new ArrayList<>();
addAll(arrays, intervals);
ArrayList<int[]> removed = new ArrayList<>();
for (int i = 0; i < arrays.size(); i++) {
if (i > 0) {
if (arrays.get(i - 1)[1] >= arrays.get(i)[0] && arrays.get(i - 1)[1] < arrays.get(i)[1]) {
removed.add(arrays.get(i));
currentLargeInterval[1] = arrays.get(i)[1];
} else {
addedIntervals.add(currentLargeInterval);
currentLargeInterval = new int[]{arrays.get(i - 1)[0], arrays.get(i - 1)[0]};
}
}
}
addedIntervals.add(currentLargeInterval);
arrays.removeAll(removed);
arrays.addAll(addedIntervals);
for (int[] a : arrays) {
System.out.println(Arrays.toString(a));
}
return sum;
}

最佳答案

我认为您总体上使解决方案过于复杂(这使得错误更难发现),似乎真正需要的是您不要在 Collection 中添加重复项,并且之后输出集合的大小。

我制作了一个快速版本(我只针对其中 2 个测试进行了尝试)。

public static void main(String[] args) {
int [][] intervals = {{1,5},{10, 20},{1, 6},{16, 19},{5, 11}};
System.out.println(sumIntervals(intervals));
}

public static int sumIntervals(int [][] intervals) {
ArrayList<Integer> values = new ArrayList<>();
for (int [] row : intervals) {
for (int k = row[0]; k < row[1]; k++) {
if (!values.contains(k)) {
values.add(k);
}
}
}
return values.size();
}

输出:

19

此解决方案首先对外部数组进行迭代以获取每个范围,然后使用这些值在它们之间进行迭代,并将每个数字添加到 List 中(如果该数字尚未在 List 中) ,通过利用.contains()

最后它返回包含每个非重复数字的List大小

关于java - Java 中的区间总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59570021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com