Open carloscn opened 1 year ago
使用排序判断没有意思。这么判断:
pub fn can_make_arithmetic_progression(arr: Vec<i32>) -> bool
{
if arr.len() < 1 {
return false;
}
let mut d:i32 = 0;
let mut arr_dup = arr.clone();
for i in 0..arr_dup.len() {
for j in 0..arr_dup.len() - i - 1 {
if arr_dup[j] < arr_dup[j + 1] {
let t = arr_dup[j];
arr_dup[j] = arr_dup[j + 1];
arr_dup[j + 1] = t;
}
}
}
for i in 0..arr_dup.len() {
if i == 0 {
d = arr_dup[i] - arr_dup[i + 1];
} else if i < arr_dup.len() - 1 {
if arr_dup[i] - arr_dup[i + 1] != d {
return false;
}
} else {
return true;
}
}
return true;
}
问题描述
给你一个数字数组 arr 。
如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。
如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。
示例 1:
输入:arr = [3,5,1] 输出:true 解释:对数组重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相邻两项的差分别为 2 或 -2 ,可以形成等差数列。
示例 2:
输入:arr = [1,2,4] 输出:false 解释:无法通过重新排序得到等差数列。 提示:
2 <= arr.length <= 1000 -10^6 <= arr[i] <= 10^6
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/can-make-arithmetic-progression-from-sequence