马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题给定序列,请求出其最长连续上升子序列的长度。
注意:是连续上升子序列,不是最长上升子序列。
输入格式:
第一行为一个整数n(0<n<=1000),代表序列总长度。第二行为用空格分隔n个整数。测试用例保证所有整数可以用int类型存储。
输出格式:
只有一个整数,为给定序列最长连续上升子序列的长度。
输入样例:
15
1 1 2 3 4 5 6 7 3 3 5 5 3 3 9
输出样例:
7
我的代码#include<stdio.h>
int main()
{
int n; scanf("%d",&n);
int shuzu[n],num;
int a,b,c=0,e;
int count1=0,count2 = 0;
for(a=0; a<n ;a++)
{
scanf("%d",&num);
shuzu[a] = num;
}a=0;
while(a<n)
{
for(b=c;b<n;b++)
{
if(shuzu[b] < shuzu[b+1])
{
count1++;
}
else
{
if(count1 <= count2)
{
;
}
else
{
e = count1;
count1 = count2;
count2 = e;
}
c = b;
break;
}
}
a = b + 1;
}
printf("%d",count2);
return 0;
}
问题分析:
题目要求求出给定序列的最长连续上升子序列的长度,可以使用双指针法来解决。
修改建议:
下面是修改后的代码,可以正确计算给定序列的最长连续上升子序列的长度。 ++#include <stdio.h>int main(){ int n, max_len = 1, len = 1; scanf("%d", &n); // 输入序列总长度 int nums[n]; for (int i = 0; i < n; i++) { scanf("%d", &nums[i]); // 输入序列元素 } for (int i = 1; i < n; i++) { if (nums[i] > nums[i - 1]) { // 如果当前元素大于前一个元素,则更新最长子序列长度 len++; } else { // 否则重置最长子序列长度 len = 1; } max_len = len > max_len ? len : max_len; // 更新最大长度 } printf("%d", max_len); return 0;}
在修改后的代码中,首先读入序列总长度和序列元素,然后使用双指针法扫描序列,统计最长连续上升子序列的长度:
1. 用一个变量记录当前最长子序列的长度,初始为1;
2. 遍历序列,如果当前元素大于前一个元素,则更新最长子序列长度,否则重置最长子序列长度;
3. 在遍历过程中,用一个变量记录最大长度。
最后输出最大长度即可。
希望能帮到你!
球一个最佳答案谢谢啦!这对我非常重要!
|