蓝桥杯——连号区间数(暴力)

本文详细解析了一种用于判断数组中是否存在连号区间的算法,通过比较区间最大值与最小值之差是否等于区间长度减一来判断。并提供了一个C语言实现的示例代码,该算法对于理解数组和区间问题具有一定的帮助。

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

题目:http://lx.lanqiao.cn/problem.page?gpid=T30

分析:注意到输入格式里介绍“第二行是N个不同的数字Pi(1 <= Pi <= N)”,这里就可以知道第二行的数由1,2,3······N-1,N组成,虽然此题不用到这个,但以后也要有这个觉悟,阅读题目要仔细,避免题目复杂化。其实这一题,要知道[L, R]是不是连号区间,判断max-min==R-L就可以了(max、min分别是区间[L, R]最大值和最小值)。

如: 1   2   3   4(数组下标)

        3   2   1  4(a[i])

区间[1,3]很明显是连号区间(递增排序后连续),此时 max-min=3-1=2,R-L=3-1=2。


代码(c):

#include<stdio.h>
int main()
{
    int i,j,n,a[50005],max,min,count=0;
    scanf("%d",&n);
    for(i=1; i<=n; i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=1; i<=n; i++)
    {
        max=a[i];
        min=a[i];
        for(j=i; j<=n; j++)
        {
            if(max<a[j])
                max=a[j];//max、min分别永远记录最大值和最小值
            if(min>a[j])
                min=a[j];
            if((max-min)==(j-i))
                count++;
        }
    }
    printf("%d",count);
    return 0;
}

 

转载于:https://www.cnblogs.com/li-yaoyao/p/10011722.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值