【问题描述】 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1。 【输入形式】 输入的第一行包含一个整数n,表示给定整数的个数。 第二行包含所给定的n个整数。 【输出形式】 输出一个整数,表示值正好相差1的数对的个数。小数在前,大数在后,如有多组输出顺序按照第一个数字递增排序,重复数字只显示一组。 【样例输入】 6 10 2 6 3 7 8 【样例输出】 3 2 3 6 7 7 8 【样例说明】 值正好相差1的数对包括(2, 3), (6, 7), (7, 8)。 【样例输入】 3 1 3 5 【样例输出】 0
时间: 2023-05-27 08:06:10 浏览: 146
给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1。
5星 · 资源好评率100%
【算法思路】 将输入的n个数从小到大排序,然后从前往后扫描,对于每个数a,查找其后面是否存在一个数b,使得b-a=1,如果存在,则输出一组符合要求的数对。由于数字不重复,可以使用set来存储已经出现过的数字。 【注意事项】 1. 对于每一组符合要求的数对,输出时要按照第一个数字递增排序。 2. 重复的数字只输出一组。 3. 需要注意数据类型,输入的数字可能会很大,需要使用long long类型。 4. 可以使用STL中的set来存储已经出现过的数字,以便进行快速查找。 5. 如果使用数组来存储数字,需要先将其排序,然后使用二分查找来查找后面是否存在一个数与当前数的差为1。 6. 时间复杂度为O(nlogn),空间复杂度为O(n)。 【参考代码】
阅读全文