LeetCode:1502. 判断能否形成等差数列(python3,javascript)

Posted 南岸青栀*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode:1502. 判断能否形成等差数列(python3,javascript)相关的知识,希望对你有一定的参考价值。

1502. 判断能否形成等差数列

在这里插入图片描述

python3

法1:

排序,记录差值,然后一直比较

class Solution:
    def canMakeArithmeticProgression(self, arr: List[int]) -> bool:

        #法1先排序
        # arr.sort()
        # flag = arr[1]-arr[0]
        # for i in range(len(arr)-1):
        #     print(arr[i],arr[i+1],flag)
        #     if arr[i+1] != (arr[i] + flag):
        #         return False
        # return True
        
        

优化一下:

等差数列:前一项+后一项=本项*2

class Solution:
    def canMakeArithmeticProgression(self, arr: List[int]) -> bool:
        #优化一下
        l = len(arr)
        if l <= 2:
            return True
        arr.sort()
        for i in range(1,l-1):
            if arr[i]*2 != arr[i-1] + arr[i+1]:
                return False
        return True

javascript

法1:

/**
 * @param {number[]} arr
 * @return {boolean}
 */
var canMakeArithmeticProgression = function(arr) {

    //法1
    // arr.sort((a,b)=>a-b)
    // const num = arr[1] - arr[0]
    // for(let i = 2;i<arr.length;i++){
    //     if(num != arr[i]-arr[i-1]){
    //         return false
    //     }

    // }
    // return true

};

优化:


/**
 * @param {number[]} arr
 * @return {boolean}
 */
var canMakeArithmeticProgression = function(arr) {
    //优化
    arr.sort((a,b)=>a-b)
    for(let i = 1;i<arr.length-1;i++){
        if(arr[i]*2 != arr[i-1] + arr[i+1]){
            return false
        }
    }
    return true

};

补充:

JavaScript中:如果直接使用sort()方法,该方法将按照ASCII码的从小到大顺序对数组元素进行排序。
如果需要对数字进行排序。

sort()方法如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:

  • 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
  • 如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。

备注: ECMAScript标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本)

  • 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。

compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。

比较函数要求格式:

function compare(a, b) {
  if (a < b ) {           
  // 按某种排序标准进行比较, a 小于 b
    return -1;
  }
  if (a > b ) {
    return 1;
  }
  // a与b相等
  return 0;
}

数字数组的比较函数

从小到大:

function compareNumbers(a, b) {
  return a - b;
}

从大到小:

function compareNumbers(a, b) {
  return b - a;
}

当然,我们也可以直接在使用比较函数时定义该方法

var numbers = [4, 8, 2, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});
console.log(numbers);

以上是关于LeetCode:1502. 判断能否形成等差数列(python3,javascript)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题1502-简单-判断能否形成等差数列

LeetCode刷题(157)~判断能否形成等差数列

[Leetcode Weekly Contest]196

Leetcode 1502. Can Make Arithmetic Progression From Sequence

LeetCode#665 非递减数列

LeetCode 665. 非递减数列(Non-decreasing Array)