Codility PermCheck为什么我的解决方案不起作用

gmu*_*mad 7 arrays algorithm

我正在尝试解决编码练习的Codility课程,而PermCheck就是其中之一.

[编辑]问题描述:

给出了由N个整数组成的非空零索引数组A. 置换是包含从1到N的每个元素一次且仅一次的序列.例如,数组A使得:

A[0] = 4
A[1] = 1
A[2] = 3
A[3] = 2
Run Code Online (Sandbox Code Playgroud)

是一个排列,但是数组A使得:

A[0] = 4
A[1] = 1
A[2] = 3
Run Code Online (Sandbox Code Playgroud)

不是排列,因为缺少值2.目标是检查阵列A是否是排列.编写函数:class Solution {public int solution(int [] A); 在给定零索引数组A的情况下,如果数组A是排列,则返回1,如果不是,则返回0.例如,给定数组A,使得:

A[0] = 4
A[1] = 1
A[2] = 3
A[3] = 2
Run Code Online (Sandbox Code Playgroud)

函数应返回1.给定数组A,使得:

A[0] = 4
A[1] = 1
A[2] = 3
Run Code Online (Sandbox Code Playgroud)

函数应返回0.假设:N是[1..100,000]范围内的整数; 数组A的每个元素是[1..1,000,000,000]范围内的整数.

我现在的解决方案是:

class Solution {
    public int solution(int[] A) {

        final int N = A.length;
        long sum = N * (N+1)/2;

        for(int i=0; i<A.length; i++) {
            sum -= A[i];
        }

        return sum == 0 ? 1 : 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是不是我期待的.我知道有很多解决方案,但我想知道我的解决方案有什么问题.我错过了什么角落的案例.结果页面不显示上述解决方案失败的输入列表.

Bla*_*ble 5

这不起作用的原因是,正如您的解决方案所假设的那样,排列(如所解释的)并不是达到特定总和的唯一方法。例如:

[0, 1, 2, 3] // Sum == 6
[0, 2, 2, 2] // Sum == 6
Run Code Online (Sandbox Code Playgroud)

根据所写的问题描述,我不认为这意味着给定的数据没有重复。

  • 我相信这是正确的——描述说排列没有重复,但不能保证输入数据中不会出现重复。 (2认同)