给定一个+ 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;
}
答案 0 :(得分:0)
只有两种可能的交替方式,如 - + - + ...或+ - + - .....所以我们可以使用两个计数器并在数字出现时重置它们我们不喜欢:< / p>
<?php echo $_POST['id']; ?>