代码
class Solution {
public:
bool canMakeArithmeticProgression(vector<int>& arr) {
std::sort(arr.begin(),arr.end());
if(arr.size()>2){
for(int i =1;i<arr.size()-1;i++){
if(arr[i+1]-arr[i]!=arr[i]-arr[i-1]){
return false;
}
}
}
return true;
}
};
思路
先将数组排序,再循环并判断
解法
- 排序采用
std::sort
方法最快,std::sort(arr.begin(),arr.end());
是完整写法,改一下数组名称即可 - 排除元素个数小于3的数组,这些不用判断就是等差,判断可加快运行时间
- 起始 i 必须是1,否则第一次循环会报错(第一个元素)
- i 要小于数组长度-1,否则最后一次循环会报错(最后一个元素)
- 不能
return (arr[i+1]-arr[i]==arr[i]-arr[i-1])
,因为[-13,-17,-8,-10,-20,2,3,-19,2,-18,-5,7,-12,18,-17,12,-1]这个数组会输出true,原因不清楚