携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情
题目描述
给你一个数字数组 arr 。
如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。
如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。
来源:力扣(LeetCode)
- 示例 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
思路分析
这道题,可以说看完题目要求后就可以开始写了,非常简单的一道题。
题目中会给一个数组arr,我们可以将这个数组arr重新进行排列,数组中,任意相邻两项的差总等于同一个常数,那么这个数组就可以成为等差数列;题目要求若是这个数组是等差数列就返回true,否则就返回false。
首先我们将这个数组进行排序,任意排序就是可以正序排列或者倒序排列,又或者别的方式排列也行,但这里为了能方便计算我们将它进行倒序排列,随便取出两个相邻的元素进行做减法,保留得出的差num;遍历这个数组,用arr[i] 减去arr[i+1]得出的差和之前得出的差num做比较,若是每次都是相等,则返回true,若是有一个不相等就停止循环返回false。
循环也不能一直循环到最后一个,只需要循环到倒数第二个就可以了。
AC代码
function solution(arr) {
arr.sort((a, b) => {return b - a });
console.log(arr);
let leng = arr.length;
let num = arr[0] - arr[1]
for(let i=0; i<leng; i++) {
if(i === leng - 1) {
return true;
}
let n = arr[i] - arr[i+1];
if(num != n) {
return false;
}
}
}
let arr = [1,2,4];
solution(arr)