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

力扣刷题

给你一个数字数组 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
否则最后循环完毕返回true

/**
 * @param {number[]} arr
 * @return {boolean}
 */
var canMakeArithmeticProgression = function(arr) {
  arr.sort(function(a,b){return a - b});
    var flag = arr[1] - arr[0];
    for(let i=1;i<arr.length;i++){
       if(arr[i]-arr[i-1]!=flag){
           return false
       }
    }
    return true
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个数列的规律是每隔一个数取一个数,从1开始,直到99结束。因此,我们可以将这个数列分成两个部分:1-3和5-7,每个部分都是一个等差数列,公差为2。 1-3的和为:1+3=4 5-7的和为:5+7=12 以此类推,每个部分的和都是2个数的和,因此,我们可以将这个数列的和表示为: 4+12+20+...+196 这是一个等差数列,公差为8,首项为4,末项为196。 根据等差数列求和公式,这个数列的和为: S = n/2(首项+末项) 其中,n为项数。 这个数列的项数为25,因此: S = 25/2(4+196) = 25/2 × 200 = 2500 因此,1-3 5-7 ...-99的值为2500。 ### 回答2: 目中的数列是一个奇数序列,每相邻两项间隔为2。我们可以将这个序列分为两部分:1-3和5-7以及…-99。 其中,1-3和5-7以及…-99的规律是相同的,我们以1-3为例。首先,1和3都是奇数,它们的和是4。接着,我们发现可以将它们表示为(2+1)和(4-1)两个数的和,这样,我们可以推广到所有1-3和5-7以及…-99的情况。即,每一对相邻的数可以表示为(2n+1)+(2n-1)形式的和式,即4n,n为该数在序列中的位置。 那么,问变成了求出数列中所有数的和。我们可以发现,这个序列的项数为50项,每一对相邻的数之和为4n。因此,这个序列的和为: 1+3+5+7+...+97+99=(1+3)+(5+7)+...+(95+97)+(99)=50×2^2+99=599 因此,求1-3 5-7 …-99的值为:599。 ### 回答3: 根据目所给的数列,可以发现它是一组从1开始,每次加2的等差数列,其中每隔一个数会跳过一个数,即第二个数是3,第四个数是5,以此类推,最终留下的数直到99结束。 因此,我们可以把目中的数列拆分为两部分来计算,即1-3-5-...-99和2-4-6-...-98这两个等差数列的和。它们的公共差都为2,而首项和末项分别为1和99和2和98,因此可以使用等差数列求和公式来计算它们的和。 1-3-5-...-99的和S1为: S1 = [(1+99) + (3+97) + (5+95) + ... + (97+3) + (99+1)]/2 将每对括号内的数相加后,得到: S1 = [100 + 100 + 100 + ... + 100]/2 = 50×100 = 5000 2-4-6-...-98的和S2为: S2 = [(2+98) + (4+96) + (6+94) + ... + (96+4) + (98+2)]/2 同样地,将每对括号内的数相加后,得到: S2 = [100 + 100 + 100 + ... + 100]/2 = 50×100 = 5000 最终答案就是S1-S2,即: 1-3-5-...-99的和 = S1 - S2 = 5000 - 5000 = 0 由此可见,这个数列的和为0,因为前面的数和后面的数互相抵消了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值