LTC659 2024-10-31 10:34 采纳率: 57.1%
浏览 2
已结题

给定一个未排序的整数数组,找出最长连续序列的长度

题目:找最长序列
描述:给定一个未排序的整数数组,找出最长连续序列的长度。
输入:第一行输入数组长度n,第二行输入n个未排序的整数,输出一个整数。n<=100
输出:输出最长连续序列的长度
输入样例 1
6
3 8 1 2 7 4
输出样例 1
4

我的代码:

#include <stdio.h>

void swpt(int* a ,int* b)
{
    int temp;
    temp = *b;
    *b = *a;
    *a = temp;
}

int main()
{
    
    int n;
    scanf("%d",&n);
    int a[n];
    int i;
    for(i = 0;i <= n-1; i++)
    {
        scanf("%d",&a[i]);
        
    }
   
   for(i = 1;i <= n - 1; i++)
    {
        int j;
        for(j = n-1;j >= i;j--)
        {
            if(a[j]<=a[j-1]) swpt(&a[j],&a[j-1]) ;
        }
    };
    int r = 0,maxlen = 0;
    for(i = 0;i <= n-2; i++)
    {
        if(a[i+1] - a[i] == 1) r++;
        else if(a[i+1] - a[i] == 0) r+=0;
        
        else 
        {
            if(maxlen < r) maxlen = r;
            r = 0;
        }
    
    };
    
    printf("%d",maxlen);
    return 0;
}


测试结果:
输入:
5
1 2 2 3 4
输出
0

请问代码问题出现在哪?

  • 写回答

2条回答 默认 最新

  • Cin.白术 2024-10-31 11:09
    关注

    你这个样例挑的好啊,12234,总是满足自增1或相等,所以不会重置r的值,那自然就不会把r赋值给maxlen了。所以应该把赋值放在外面,而且r+=0就没有写的必要了吧。

            if (a[i+1]-a[i] == 1) {
                r++;
            } else if (a[i+1] != a[i]) {
                r = 1;
            }
            maxlen = maxlen < r ? r : maxlen;
    

    另外值得注意的是,无论数组的值为多少,其最长连续序列的长度至少为1(单独一个数字就是长度为1的连续序列),因此r的默认值应为1。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月8日
  • 已采纳回答 10月31日
  • 创建了问题 10月31日

悬赏问题

  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档