LeetCode刷题-数组1502:判断能否形成等差数列

该问题是一个编程挑战,要求检查一个数字数组是否能通过重新排序形成等差数列。解题思路是首先对数组排序,然后遍历数组,比较相邻元素的差值是否一致。如果发现不一致,则返回false,否则继续检查直到结束,最后返回true表示可以形成等差数列。
摘要由CSDN通过智能技术生成

题目

给你一个数字数组 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值