我在编写 Java 程序方面需要帮助。我会解释我需要做什么,然后解释我有什么/我有什么烦恼 --
我需要编写一个程序,通过扫描器传递一些值。传入的值的数量是一个预先确定的变量。为了便于说明,我们将预定数量的传入数字称为“n”。
因此,对于 n 个数字,我必须在另一个预先确定的边界内返回最大数量的值。我将此边界称为 b。
例如:
如果 n = 5
,则有五行输入,如果 b = 3
,则数字相差不超过三。
如果这5行输入是——
1
6
4
3
1
那么,输出一定是4
。
我假设您知道如何将标准输入中的元素读取到数组中,并且只关注算法本身。 (假设您诚实地解决了这个问题,您已经编写了从标准输出读取数据的代码,并且可以轻松地使用我在下面提供的方法。)
对数组进行排序(升序),使“相似”的元素靠在一起。然后为每个元素计算 b
中它“上方”的元素数量;因为数组是排序的,所以这些都是距离元素最多 b
的元素。返回最大计数。
这是代码。
import java.util.Arrays;
public class Test {
public static int count(int[] arr, int b) {
int maxCount = 0, curCount = 0;
Arrays.sort(arr);
for (int i = 0; i < arr.length; ++i) {
curCount = 0;
for (int j = i; j < arr.length; ++j) {
if (arr[j]-arr[i] <= b) {
++curCount;
} else {
break;
}
}
maxCount = Math.max(maxCount, curCount);
}
return maxCount;
}
public static void main(String[] args) {
int b = 3;
int [] arr = {1,6,4,3,1};
System.out.println("count: " + count(arr, b));
}
}
它按预期打印 count: 4
。