js算法之排序类--164. 最大间距

给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。 如果数组元素个数小于 2,则返回 0。

示例 1:

输入: [3,6,9,1]
输出: 3
解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。
示例 2:

输入: [10]
输出: 0
解释: 数组元素个数小于 2,因此返回 0。
/**

  • @param {number[]} nums
  • @return {number}
    */

解法一:

var maximumGap = function(nums) {
    if(nums.length<2){
        return 0;
    }
    //先排序,设置最大间距max,与每次循环的temp比较,返回max
     nums.sort()
     let max=0;
     for(let i=0,len=nums.length-1,temp;i<len;i++){
         temp=nums[i+1]-nums[i]
         if(temp>max){
           max=temp; 
         }
     }
     return max
     }

解法二:

var maximumGap = function(nums) {
    if(nums.length<2){
        return 0;
    }
    //用冒泡排序
    let max=0;
    for(let len=nums.length-1,i=len;i>0;i--){
        for(let j=0;j<i;j++){
            let temp=nums[j]
            if(temp>nums[j+1]){
                nums[j]=nums[j+1];
                nums[j+1]=temp;
            }
        }
        // let diff=nums[i+1]-nums[i]
        // if(diff>max){
        //     max=diff
        // } 
        // let prev=nums[i+1]||nums[i]
        // let diff=prev-nums[i]
        // if(diff>max){
        //     max=diff
        // }
        //因为第一次循环的nums[i]没有nums[i+1],需加条件i<len
        if(i<len){
            let diff=nums[i+1]-nums[i]
            if(diff>max){
                max=diff
            }
        }
    }
    //因为i的条件是i>0,会忽略掉i=0时条件,最后需要比较
    return Math.max(max,nums[1]-nums[0])
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值