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