【编程题】有趣的数字

这是一篇关于编程题目的博客,讨论了如何找出一组数字中两两组合的差值最小和最大的对数。作者通过分析题目,提出了排序、检查重复元素和遍历序列的方法来解决这个问题,并给出了C#的解题代码。

原题出处:牛客网-腾讯2017暑期实习生编程题

[编程题] 有趣的数字
时间限制:1秒

空间限制:32768K

小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢?

输入描述:

输入包含多组测试数据。

对于每组测试数据:

N - 本组测试数据有n个数

a1,a2…an - 需要计算的数据

保证:

1<=N<=100000,0<=ai<=INT_MAX.

输出描述:

对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数。

输入例子1:
6
45 12 45 32 5 6

输出例子1:
1 2

解题思路:
 个人思路:
  看不懂题目…二元组的概念,百度得到的信息(多元组概念有序对概念):二元组为一个有序对,有序对对元素的排列顺序是重视的,那么(a,b)和(b,a)就是两个不同的二元组,既然如此应该也要考虑到差值为负的情况。。。结果错误,不知这是我想多了还是我的理解出错?但是hofighter的题解给了我很大的启示,面对一个问题要多考虑一下其他情况。
  
 hofighter解题思路
 对输入序列排序
 判断序列首个元素与末尾元素是否相等
  是,说明序列中所有元素相同,直接输出结果为n*(n-1)/2 <= 组合公式推出
  否,执行下一步
 统计各数字的出现次数
 判断序列中是否有重复出现的元素
  是,说明最小值为0,直接统计各个重复出现的元素的所有组合数的和,结果为最小差对数。
  否,执行下一步
 对序列中元素按序进行遍历,查找最小差,统计最小差对数。
 统计最大差对数,最大差对数=序列首个元素的个数*序列末尾元素的个数
 
贴上C#代码:

using System;
using System.Collections.Generic;
using System.Linq;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值