fjnu 1713 最长同号连续段

本文介绍了一种求解整数序列中同号连续子序列最长长度的算法实现。通过预处理将序列转换为标记序列,并使用双层循环来遍历并计算最长连续同号子序列的长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

给出一个由非0整数组成的序列a1,a2,…,an, 设计递归算法求其中由同号整数组成的最长连续段(称为最长同号连续段)的长度。例如,序列2,3,-1,6,-1,-5,-2,2的最长同号连续段为-1,-5,-2,其长度为3。

Input

输入的第一行是一个正整数k,表示测试例个数。接下来几行是k个测试例的数据,每个测试例的数据由两行组成,其中第一行为一个正整数n (n<=1000),表示整数序列的长度,第二行给出整数序列,整数之间用一个空格隔开。

Output

对于每个测试例输出一行,含一个整数,表示相应序列的最长同号连续段的长度。

Sample Input

2
8
2 3 -1 6 -1 -5 -2 2
10
-1 -1 1 1 1 1 -1 -1 -1 -1

Sample Output

3
4

 KEY:我没有用算法去做的……所以丢人了……

 

Source:

#include
<iostream>
using namespace std;

int a[1001];
int b[1001];
int n;

void input()
{
    
for(int i=1;i<=n;i++)
        cin
>>a[i];
}


int count()
{
    
int i;
    
for(i=1;i<=n;i++)
    
{
        
if(a[i]>=0) b[i]=1;
        
else b[i]=0;
    }

    i
=1;
    
int count;
    
int max=0;
    
while(i<=n)
    
{
        count
=1;
        
while(i<n&&b[i]==b[i+1]) 
        
{
            i
++;
            count
++;
        }

        
if(count>max) max=count;
        i
++;
    }

    
return max;
}


int main()
{
//    freopen("fjnu_1713.in","r",stdin);
    int N;
    cin
>>N;
    
for(int i=1;i<=N;i++)
    
{
        cin
>>n;
        input();
        cout
<<count()<<endl;
    }

    
return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值