腾讯2017暑期实习生编程题--有趣的数字
2017-07-15 17:49
323 查看
小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢?
输入描述:
输入包含多组测试数据。
对于每组测试数据:
N - 本组测试数据有n个数
a1,a2…an - 需要计算的数据
保证:
1<=N<=100000,0<=ai<=INT_MAX.
输出描述:
对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数。
示例1
输入
6
45 12 45 32 5 6
输出
1 2
思路:分两个问题求解,首先都是将原数组排序。
然后求解差最大的对数,算出最小的数的个数和最大的数的个数,相乘以后的结果即是差最大的对数。
最后求解差最小的对数,分两种情况讨论,差最小是否为0.
如果差最小不为0,计算相邻数之间的差,统计差最小的对数。
如果差最小为0,计算原数组中重复数的个数,每一种数字重复即算一次组合数n*(n-1)/2,最后累加就是差最小的对数。
输入描述:
输入包含多组测试数据。
对于每组测试数据:
N - 本组测试数据有n个数
a1,a2…an - 需要计算的数据
保证:
1<=N<=100000,0<=ai<=INT_MAX.
输出描述:
对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数。
示例1
输入
6
45 12 45 32 5 6
输出
1 2
思路:分两个问题求解,首先都是将原数组排序。
然后求解差最大的对数,算出最小的数的个数和最大的数的个数,相乘以后的结果即是差最大的对数。
最后求解差最小的对数,分两种情况讨论,差最小是否为0.
如果差最小不为0,计算相邻数之间的差,统计差最小的对数。
如果差最小为0,计算原数组中重复数的个数,每一种数字重复即算一次组合数n*(n-1)/2,最后累加就是差最小的对数。
#include <iostream> #include <algorithm> #include <vector> using namespace std; void solution(int n,vector<int> nums){ int min=0,max=0; sort(nums.begin(),nums.end()); int begin = 0; int end = 0; for(int i = 0;i<n;i++){ if(nums[i] == nums[0]) begin++; else break; } for(int i = n-1;i>=0;i--){ if(nums[i] == nums[n-1]) end++; else break; } max = begin * end; vector<int> temp; for(int i=0;i<n-1;i++){ temp.push_back(nums[i+1]-nums[i]); } sort(temp.begin(),temp.end()); if(temp[0]){ for(int i=0;i<temp.size();i++){ if(temp[0]==temp[i]) min++; else break; } } else{ int count = 1; for(int i = 1;i<n;++i){ if(nums[i] == nums[i-1]) count++; else{ min += count*(count-1)/2; count = 1; } } min += count*(count-1)/2; } cout<<min<<' '<<max<<endl; } int main(){ int n; while(cin>>n) { int temp=0; vector<int>nums; for (int i=0;i<n;i++) { cin>>temp; nums.push_back(temp); } solution(n,nums); } return 0; }
相关文章推荐
- 腾讯2017暑期实习生编程题(三)----有趣的数字
- 腾讯2017暑期实习生编程题之有趣的数字
- 算法与数据结构——算法题 67:有趣的数字(腾讯2017暑期实习生编程题) ? 待解决
- 腾讯2017暑期实习生编程题-C-有趣的数字
- 有趣的数字----腾讯2017暑期实习生编程题
- 腾讯2017暑期实习生编程题之有趣的数字
- 腾讯2017暑期实习生编程题:有趣的数字 [python]
- 穷举法-有趣的数字(腾讯2017实习生编程题)
- 腾讯2017 暑假实习生编程题---【3】 有趣的数字
- 腾讯2017暑假实习生编程题有趣的数字
- 腾讯2017暑期实习生笔试题(有趣数字)
- 有趣的数字(腾讯2017实习生)
- 腾讯2017暑期实习生编程题(第一道)
- 腾讯2017暑期实习生编程题
- 腾讯17年暑期实习生笔试题 - 有趣的数字
- 算法与数据结构——算法题 27:字符移位(腾讯2017暑期实习生编程题) ? 待解决
- 腾讯2017暑期实习生编程题——构造回文串
- [笔试编程题] 腾讯2017暑期实习生编程题-java
- 把一个字符串的大写字母放到字符串的后面--腾讯2017暑期实习生编程题
- 算法基础-字符移位----腾讯2017暑期实习生编程题