、、9、、今日的代码,参上

算数字之间的差值是很基本的操作,今天的题目讲的就是怎么计算多个数之间满足差值的数的对数,比如4个数 1 1 2 3 满足差值为1 的对数,为3,情况就是:
2-1=1,2-1=1,3-2=1,一起三组,基本概念是有了,不过要转换成电脑可以读懂的代码就需要换一个思路,题目如下:
在这里插入图片描述
我没有转换出一个合适的思路,不过,在题解里面看到了一个使用了STL的算法,觉得以后可以在数组里面试试,先说思路:
首先当然是设立基本的数组储存数据,
然后运用了algorithm的函数,将输入的数组内的数据进行了排序,从小到大
最后是用upper-bound函数和lower-bound函数来将相差为输入值的两个数的下标进行运算,然后算差值;
代码如下:

#include<functional>
#include<algorithm>
#include<iostream>
using namespace std;
long a[200001];
long N, C, ans;
int main()
{
    cin >> N >> C;
    for (int i = 1; i <= N; i++)
    {
        cin >> a[i];
    }
    sort(a + 1, a + N + 1);
    for (int i = 1; i <= N; i++)
    {
        ans += ((upper_bound(a + 1, a + N + 1, a[i] + C) - a) - (lower_bound(a + 1, a + N + 1, a[i] + C) - a));
    }
    cout << ans << endl;
    return 0;
}

比如说,我输入了6个数:差值的2:
1 2 3 4 4 6
它就会从1开始输入到每一个跟进的数组中去,第一个数对于a【1】,以此类推,sort函数进行促销到大的排序,避免了重新写函数,
接着的upper函数,从a【1】开始,找到第一个比a【1】+2大的数,也就是比3大的数,于是找到了第4个数,4,下标为4;lower函数 从a【1】开始找第一个大于或等于a【1】+2,也就是大于等于3的数, 找到了第3个数,3,下标为3,然后4-3=1,就是第一个输入到ans里的数了。
还有一种特殊情形,比如出现了几个重复的数字,然后我们看一下:
输入了2,就从a【2】开始找第一个比a【2】+2大的数,也就是比4大的数,找到了第6个数,6,下标为6;lower找第一个大于等于4的数,找到了第4个数,4,下标为4,二者相减,得到2,就是满足两个数字差为2的对数
最后输出ans得到所要的答案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值