本文正在参与掘金团队号上线活动,点击 查看大厂春招职位
一、题目描述
给你一个数字数组 arr 。
如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为等差数列 。
如果可以重新排列数组形成等差数列,
请返回 true ;否则,返回 false 。
示例 1 :
输入:arr = [3,5,1]
输出:true
解释:对数组重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相邻两项的差分别为 2 或 -2 ,可以形成等差数列。
示例 2 :
输入:arr = [1,2,4]
输出:false
解释:无法通过重新排序得到等差数列。
二、思路分析
- 首先先对数组进行一个
由小到大的排序。 - 其次直接利用题目中
等差数列的性质进行解答,利用递归的方式依次判断数组里面的元素是否符合等差数列的判定条件即可。
三、AC 代码
class Solution:
def canMakeArithmeticProgression(self, arr: List[int]) -> bool:
arr.sort()
for i in range(1, len(arr) - 1):
if arr[i] * 2 != arr[i - 1] + arr[i + 1]:
return False
return True
输出为:
四、总结
该题是直接利用了数学中的等差数列的性质进行解答的,对于同类型的题目,例如将题目中的等差数列改为等比数列,也可以利用等比数列的性质进行解答,可谓说学好数学,解决千道题目都不怕。