题目
给你一个数字数组 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
解题思路
这题简单,整体思路就是先对数组进行排序,然后遍历数组,当相邻两个数字之间的差与头两个数字差不相等时,说明不是等差,直接返回False,否则继续判断下一个。
参考代码1:(执行用时:20ms,内存消耗:13MB)
class Solution(object):
def canMakeArithmeticProgression(self, arr):
"""
:type arr: List[int]
:rtype: bool
"""
arr.sort()
if len(arr) == 2:
return True
n = arr[1] - arr[0]
for i in range(1,len(arr)-1):
if n == arr[i+1] - arr[i]:
i += 1
else:
return False
return True
参考代码2:(执行用时:16ms,内存消耗:13.1MB)
class Solution(object):
def canMakeArithmeticProgression(self, arr):
"""
:type arr: List[int]
:rtype: bool
"""
arr.sort()
n = arr[1] - arr[0]
r = 1
while r < len(arr)-1:
if arr[r+1] -arr[r] != n:
return False
n = arr[r+1] - arr[r]
r += 1
return True