Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 请检查我的解决方案中的两个元素_Java_Arrays - Fatal编程技术网

Java 请检查我的解决方案中的两个元素

Java 请检查我的解决方案中的两个元素,java,arrays,Java,Arrays,对于以下Codibility任务,我的解决方案从性能角度看是100%正确的,从正确性角度看是80%。我的解决方案在两个元素上都失败了,但我已经用不同的值(两个元素)对它进行了测试,并且得到了所需的输出。请让我知道如何解决此问题 Codibility任务链接 我的代码: import java.util.*; class Solution { public int solution(int[] A) { if(A.length == 1){

对于以下Codibility任务,我的解决方案从性能角度看是100%正确的,从正确性角度看是80%。我的解决方案在两个元素上都失败了,但我已经用不同的值(两个元素)对它进行了测试,并且得到了所需的输出。请让我知道如何解决此问题

Codibility任务链接

我的代码:

 import java.util.*;
class Solution {
    public int solution(int[] A) {
        if(A.length == 1){
                if(A[0] != 1)
                    return 0;
                else
                    return 1;
            }
                Arrays.sort(A);
                for(int i =1; i<A.length; i++){                 
                    if(A[i] - A[i-1] != 1){
                        return 0;
                    }
                }
            return 1;
    }
}

除此之外,您的解决方案不是O(N),您可以接受任何具有序列号的数组,即使序列不是从1开始的。用[3,4]或[7,9,8]进行测试

使用当前解决方案,您希望检查A[i]==i+1


您需要一种不同的方法来解决O(N)。

问题

给出了一个由N个整数组成的非空数组A

置换是一个序列,包含从1到N的每个元素一次,并且仅一次

例如,阵列应确保:

 A[0] = 4
 A[1] = 1
 A[2] = 3
 A[3] = 2
 A[0] = 4
 A[1] = 1
 A[2] = 3
 A[0] = 4
 A[1] = 1
 A[2] = 3
 A[3] = 2
 A[0] = 4
 A[1] = 1
 A[2] = 3
是一个置换,但数组的类型如下:

 A[0] = 4
 A[1] = 1
 A[2] = 3
 A[3] = 2
 A[0] = 4
 A[1] = 1
 A[2] = 3
 A[0] = 4
 A[1] = 1
 A[2] = 3
 A[3] = 2
 A[0] = 4
 A[1] = 1
 A[2] = 3
不是置换,因为缺少值2

目的是检查数组A是否是置换

编写一个函数:

int解决方案(NSMutableArray*A); 给定数组A,如果数组A是置换,则返回1,如果不是置换,则返回0

例如,给定一个数组,使得:

 A[0] = 4
 A[1] = 1
 A[2] = 3
 A[3] = 2
 A[0] = 4
 A[1] = 1
 A[2] = 3
 A[0] = 4
 A[1] = 1
 A[2] = 3
 A[3] = 2
 A[0] = 4
 A[1] = 1
 A[2] = 3
函数应该返回1

给定一个数组,以便:

 A[0] = 4
 A[1] = 1
 A[2] = 3
 A[3] = 2
 A[0] = 4
 A[1] = 1
 A[2] = 3
 A[0] = 4
 A[1] = 1
 A[2] = 3
 A[3] = 2
 A[0] = 4
 A[1] = 1
 A[2] = 3
函数应返回0

为以下假设编写有效的算法:

N是[1..100000]范围内的整数; 数组A的每个元素都是[1..100000000]范围内的整数

目标C解决方案O(N)

由Codibility给出的结果

任务分数:100%
正确率:100%
业绩:100%

时间复杂性

最坏情况下的时间复杂度是O(N)或O(N*log(N))

+(int)解决方案:(NSMutableArray*)数组{
/********算法说明********/
//第一步
//检查边缘情况-当数组为空[]时,应返回0
//步骤2
//从阵列中生成NSSet以消除可能的重复项
//NSSet在搜索元素方面也有更好的性能
//步骤3
//实现一个循环时要考虑:
//所以,作为一个置换,在数组中我们必须有N=>(1,2,3…N)
//它们不需要进行必要的排序,但应该包含从1到n的所有元素
//
//步骤4
//在集合中查找当前目标
//如果目标不存在,这意味着它不是一个排列
//打破循环。
//第一步
int isPermutation=1;
int n=(int)[数组计数];
如果(n==0){
isPermutation=0;
}
否则{
//步骤2
NSSet*元素=[NSSet setWithArray:array];
int目标=1;
//步骤3

虽然(有趣的是,由于sort()的可编码性,您的复杂度超过了O(N)。检测到的时间复杂度:O(N)或O(N*log(N))是的,我错过了它,现在我刚刚为它添加了一个条件,并且它的工作完全正确。”公共静态int解决方案(int[]a){if(a.length==1){if(a[0]!=1)返回0;否则返回1;}个数组。sort(A);for(int i=1;i