java - Java数组/逆新手
问题描述
我是 java 语言的新手,我有一个必须解决的问题,我很确定我做对了,但测试仪仍然崩溃。
如果必须做的事情的简要总结是“在数组 a 中,反转是数组中同时满足 i < j 和 a[i] > a[j] 的一对位置 i 和 j。在组合学中,数组内的反转计数是该数组“乱序”的粗略衡量。如果数组按升序排序,则它的反转数为零,而以相反顺序排序的 n 元素数组具有 n(n-1 )/2 反转,可能的最大数量。此方法应计算给定数组 arr 内的反转,并返回该计数“
这是我所做/尝试过的
import java.util.Arrays;
public class P2J1
{
public static int countInversions(int[] arr)
{
int inversions = 0;
for (int i = 0; i <= arr.length; i++){
for (int j = i+1; j < i; j++){
if (arr[i] > arr[j]){
inversions++;
}
}
}
return inversions;
}
}
/// here's the tester
@Test public void testCountInversions() {
Random rng = new Random(SEED);
CRC32 check = new CRC32();
for(int i = 0; i < 1000; i++) {
int[] a = new int[i];
for(int j = 0; j < i; j++) {
a[j] = rng.nextInt(100000);
}
check.update(P2J1.countInversions(a));
}
assertEquals(1579619806L, check.getValue());
}
解决方案
在 Java 中,数组索引是从0
到arr.length - 1
,您需要i <= arr.length
在代码中更改为i < arr.length
。否则你会得到ArrayIndexOutofBoundsException
@khelwood 的建议也是正确的。更改(int j = i+1; j < i; j++)
为(int j = i+1; j < arr.length; j++)
推荐阅读
- reactjs - Firebase:将firebase用户与另一个对象合并后“TypeError:currentUser.updateProfile不是函数”
- go - vim-go 在结构实现接口时显示符号
- java - 带有优先级队列的 Spring Boot 中的 RabbitMQ
- python - sqlalchemy.exc.IntegrityError:(psycopg2.errors.UniqueViolation)重复键值违反唯一约束“product_pkey”
- python - 在 ubuntu / debian io.h 上使用 pip 时出现扭曲 iocpsupport 错误
- python - Python/Pandas:根据列名对数据框列进行排序
- python - 字典/数组的 Python 类属性
- node.js - NPM 失败并显示代码:npm ERR!代码生命周期
- c++ - 我们可以创建 Ghostscript 的静态库吗?
- wpf - 为什么列表视图之间的拖放失败?