java - Codility PermCheck 解决方案不适用于少数数据集

标签 java algorithm

尝试解决实践中的适应性类(class)并致力于 this .

我用 Java 编写了我的代码并在广泛的输入范围内测试了代码,但是代码在 extreme_min_max、single 和 double 测试结果中失败了。

给出的假设:

N 是 [1..100,000] 范围内的整数。
数组 A 的每个元素都是 [1..1,000,000,000] 范围内的整数。

我的代码解释:
1. 对给定的数组进行排序。
2. 遍历数组中的每个元素以找到每个连续对之间的差异。如果差值不是 1,则它不是一个 perm,因此返回 0。如果数组中只有一个元素,则返回 1。

谁能帮我找出代码中的错误?

我的代码:

public int solution(int[] A)
{
    if(A.length == 1)
        return 1;

    Arrays.sort(A);
    for (int i = 0; i < A.length-1; i++)
    {
        long diff = Math.abs(A[i] - A[i+1]);
        if(diff!=1)
            return 0;
    }
    return 1;
}

最佳答案

这是一个简单且更好的实现,它以 O(N) 时间复杂度和 O(N) 空间复杂度运行。

public int solution(int[] A)
{ 
    int size = A.length;
    int hashArray[] = new int[size+1];

    for (int i = 0; i < size; i++)
    {
        if(A[i]>size)
            return 0;
        else
            hashArray[A[i]]+=1;
    }
    for(int i=1;i<=size;i++)
    if(hashArray[i]!=1)
    return 0;

    return 1;
}

关于java - Codility PermCheck 解决方案不适用于少数数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32761439/

相关文章:

java - 使用java spring mvc在服务器或数据库中存储pdf文件的提示和建议

arrays - 求和未排序数组中元素的算法

Java 基准测试工具

java - java代码会导致linux中的段错误吗?

java - 钻石广场执行不当

java - ListView 与 CheckBox 滚动问题

algorithm - 散列值如何映射到布隆过滤器中的向量?

algorithm - 选择产品以获得最大的购物车值(value)

algorithm - 在固定行数中拆分不同宽度的项目

algorithm - 亚马逊面试问题