此题思路很简单,排序后取第一个数和最后一个数的平均值保存,在将第一个数和最后一个数删除,一直循环到数组为空。再统计平均值中不相同的个数(去重)即可
class Solution {
public:
int distinctAverages(vector<int>& nums) {
vector<float>average;
int a,b;
int num;
int c=nums.size();
sort(nums.begin(),nums.end());
for(int i=0;i<c/2;i++)
{
a=nums.front();
b=nums.back();
average.push_back((a+b)/2.0);
nums.erase(nums.begin(),nums.begin()+1);
nums.pop_back();
}
sort(average.begin(),average.end());
average.erase(unique(average.begin(),average.end()),average.end());
return average.size();
}
};
要统计vector中不同数字的个数可以结合sort,eraze,unique使用:
sort(average.begin(),average.end());
因为unique是去除相邻元素中重复的,所以要先将待去重的vector排序
average.erase(unique(average.begin(),average.end()),average.end());
其次unique去重并不是删除重复元素,而是把重复的元素放在vector中的最后,unique返回的去重后的尾地址,再将去重后的尾地址~去重的前的尾地址erase。再用size可以获得去重后vector中的元素个数。