最长递增子序列
input:
15
1 9 2 5 7 3 4 6 8 0 11 15 17 17 10
output:
3 4 6 8
错误代码
#include <stdio.h>
int main()
{
int i;
int n;
scanf("%d",&n);
int a[100];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int j;
int count;
int max=0;
int ini;
for(i=0;i<n;i++)
{
for(j=i;j<n-1;j++)
{
count=1; //
if(a[j]<a[j+1])
{
count++;
}
// if(count>max){ini=i;max=count;}
else
{
break;
}
}
if(count>max){ini=i;max=count;}
}
printf("%d",a[ini]);
for(i=ini+1;i<ini+max;i++)
{
printf(" %d",a[i]);
}
}
正确代码
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int a[100];
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int max_len = 1; // 最长连续递增序列长度
int start_idx = 0; // 最长序列的起始索引
int current_len;
// 遍历每个可能的起始点
for (int i = 0; i < n; i++) {
current_len = 1; // 当前序列长度至少为1
// 向后延伸检查连续递增
for (int j = i + 1; j < n; j++) {
if (a[j] > a[j - 1]) {
current_len++;
} else {
break; // 不再递增,停止延伸
}
}
// 更新最长序列信息
if (current_len > max_len) {
max_len = current_len;
start_idx = i;
}
}
// 输出结果
printf("%d", a[start_idx]);
for (int i = start_idx + 1; i < start_idx + max_len; i++) {
printf(" %d", a[i]);
}
printf("\n"); // 添加换行符
return 0;
}
改正的代码
#include <stdio.h>
int main()
{
int i;
int n;
scanf("%d",&n);
int a[100];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int j;
int count;
int max=1;
int ini=0;
for(i=0;i<n;i++)
{
count=1; //
for(j=i;j<n-1;j++)
{
if(a[j]<a[j+1])
{
count++;
}
// if(count>max){ini=i;max=count;}
else
{
break;
}
}
if(count>max){max=count;ini=i;}
}
printf("%d",a[ini]);
for(i=ini+1;i<ini+max;i++)
{
printf(" %d",a[i]);
}
return 0; //
}

