题解 | #有趣的数字#
有趣的数字
http://www.nowcoder.com/practice/af709ab9ca57430886632022e543d4c6
采用网友思路,感谢支持,与提醒
#include<bits/stdc++.h>
using namespace std;
int main(){
int N,a;
while(cin>>N){
vector<int> res;
for(int i = 0; i< N; i++){
cin>>a;
res.push_back(a);
}
int length = res.size();
sort(res.begin(),res.end());
//求最小值minVal
int minValue = res[1]-res[0];
for(int i = 1; i< N-1; i++){
int cur=res[i+1]-res[i];
if(cur<minValue){
minValue = cur;// 想到 2 3 3 3 就算拍了序,前两个相减未必是那个最小值
}
}
//求最小值得个数
int minCount = 0;
if(minValue == 0){
for(int i = 0; i< length -1;i++ ){
for(int j = i+1; j< length;j++){
if(res[i]==res[j]) minCount++; //排列组合,相同的元素不同位置组合也是不同得
}
}
}else{//arr中无元素相等时
for(int i = 0;i< length-1;i++){
int cur = res[i+1] - res[i];//2 3 4
if(cur==minValue){
minCount++;
}
}
}
//求最大值maxVal
int maxValue = res[length-1] - res[0];
int maxCount = 0;
if(maxValue == 0){//全部元素都相等,利用组合原理
maxCount = (length*(length-1))/2;
}else{//有不同的元素,最大值的个数=最小的个数*最大的个数
int smallCount = 0, bigCount = 0;
for(int i = 0; i< length;i++){
if(res[i] == res[0]){
smallCount++;
}else if(res[i] == res[length -1]){
bigCount++;
}
}
maxCount = smallCount*bigCount;
}
cout<<minCount<<' '<<maxCount<<endl;
}
return 0;
}大厂笔试题题解 文章被收录于专栏
主要是公司笔试题得一些总结
