题目:
给你一个数字数组 arr 。
如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。
如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。
代码实现:
class Solution {
public boolean canMakeArithmeticProgression(int[] arr) {
// 排序
sort(arr, 0, arr.length-1);
Set<Integer> set = new HashSet<>();
for(int i=0; i< arr.length; i++){
if(i == 0){
continue;
}
int cha = arr[i] - arr[i-1];
set.add(cha);
}
if(set.size() == 1){
return true;
}
return false;
}
private void sort(int[] arr, int i, int j){
if(i >= j){
return;
}
int k = i;
int n = j;
while(i < j){
while(arr[j] >= arr[k] && i < j){
j--;
}
while(arr[i] <= arr[k] && i < j){
i++;
}
swap(arr, i, j);
}
swap(arr, k, i);
// 递归
sort(arr, k, i);
sort(arr, j+1, n);
}
private void swap(int[] arr, int i, int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}