从一个数组中获取子数组

时间:2015-06-28 19:08:43

标签: c arrays

有一个练习要求一个特定数组中最大的子数组,子数组不应该有重复的元素。

  

我现在不必担心复杂性和效率

阵列是[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]

1 个答案:

答案 0 :(得分:2)

我认为问题在于您对子阵列的解释。

这是一个子数组

  

子阵列通常被定义为数组的一部分或一部分。

因此,您选择的元素需要连续

举个例子,

  

假设 [10,20,50,15,10,25,45] 是数组,

     

子阵列为此 [10,20,50]

     

其中[10,50,25]不能作为子数组调用。

     

没有重复元素的最大子阵列 [20,50,15,10,25,45]

所以改变你的代码并再试一次!