有一个练习要求一个特定数组中最大的子数组,子数组不应该有重复的元素。
我现在不必担心复杂性和效率
阵列是[8,2,2,3,4,1,6,5,1,7]
据我了解,没有重复元素的最大子阵列是: [2,3,4,1,6,5,7]
但他们说我的功能应输出[2,3,4,1,6,5]
为什么?
这是我的代码:
int existe(int chk, int v[], int tam){
int i;
for(i=0; i<tam; i++){
if(v[i]==chk){
return 1;
}
}
return 0;
}
int removeb(int v[], int n){
int i, max, j;
max = 0;
for(i=0; i<n; i++){
if(v[i]>max){
max = v[i];
}
}
for(i=0; i<n; i++){
if(v[i]==max){
j=i;
while(j<n){
v[j]=v[j+1];
j++;
}
return j-1;
}
}
return n;
}
int maxuniqueseq(int v[], int N){
int i, j, newsize;
int tmp[N];
//newsize = removeb(v, N);
printf("%d\n", N);
for(i=0; i<N; i++){
tmp[i] = v[i];
}
for(i=0, j=0; i<N; i++){
if(existe(tmp[i],v, i)){
;
}else{
v[j]=tmp[i];
j++;
}
}
newsize = removeb(v, j);
return newsize;
}
使用上面的数组输出:
[2,3,4,1,6,5,7]
另一个例子:
[8,2,2,3,4,12,6,5,1,7]
输出:[8,2,3,4,6,5,1,7]
答案 0 :(得分:2)
我认为问题在于您对子阵列的解释。
这是一个子数组
子阵列通常被定义为数组的一部分或一部分。
因此,您选择的元素需要连续。
举个例子,
假设 [10,20,50,15,10,25,45] 是数组,
子阵列为此 [10,20,50]
其中[10,50,25]不能作为子数组调用。
没有重复元素的最大子阵列将 [20,50,15,10,25,45]
所以改变你的代码并再试一次!