具有替代标志的最长子序列

时间:2016-03-18 11:42:20

标签: algorithm

给定一个+ ve和-ve整数数组。编写一个算法来找到具有替代符号的最长子序列。 如果数组中有0,则可以将其视为+ ve和-Ve。 例子:数组:5,-9,4,0,-1,5,-5,3,0,2 最长的子序列:[0,-1,5,-5,3,0,2]大小:7 我写了一个函数,它运行正常,但还有其他更好的方法吗?

void f (int A[],int N){
    int fIndex = 0;
    int eIndex = 0;
    int maxCount =0;
    int curCount =0;
    int start =0;

    for(int i=1;i<N;++i){
        if(A[i] > 0 && A[i-1]>=0){
            if(i>=2 && A[i-2] < 0){
            fIndex = i;
            curCount =0;
            }
        }

        if(A[i] < 0 && A[i-1] <=0){
            if(i>=2 && A[i-2] > 0){
                fIndex = i;
                curCount =0;
            }
        }

        if((A[i] > 0 && A[i-1] <= 0) || (A[i] <0 && A[i-1]>=0)){
            curCount++;
            if(curCount > maxCount){
                maxCount = curCount;
            }
            start = fIndex;
            eIndex = i;
        }else if(A[i] == 0){
            if(A[i-1]> 0){
                A[i] = -1;
            }
            curCount++;
            if(curCount > maxCount){
                maxCount = curCount;
            }
            eIndex = i;
        }
    }
    return maxCount+1;
}

1 个答案:

答案 0 :(得分:0)

只有两种可能的交替方式,如 - + - + ...或+ - + - .....所以我们可以使用两个计数器并在数字出现时重置它们我们不喜欢:< / p>

<?php echo $_POST['id']; ?>