美文网首页
JS求数组最大间距问题(leetcode164题)

JS求数组最大间距问题(leetcode164题)

作者: infi_ | 来源:发表于2019-05-22 20:11 被阅读0次
TIM截图20190522200350.png

原题
给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。

如果数组元素个数小于 2,则返回 0。

示例 1:

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

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

你可以假设数组中所有元素都是非负整数,且数值在 32 位有符号整数范围内。
请尝试在线性时间复杂度和空间复杂度的条件下解决此问题。

这个问题我写了三种方法 最后一种评分最高

//求数组最大区间  常规做法  方法一
var array1=[3,11,12,14,100,200,500,-1000]
array1.sort((a,b)=>{return b-a})
var code=0
for(var i=0;i<array1.length-1;i++){
    var now=array1[i]
     
   if(Math.abs(now-array1[i+1])>code){
     code=Math.abs(now-array1[i+1])
   }
}


//在排序之中比较大小 一边比较一边排序 方法二
var array2=[3,11,12,14,1000,200,500,10,5,8,9,-1000]
code=0
result=0
for(var i=0;i<array2.length-1;i++){
  
     for(var j=0;j<array2.length-1-i;j++){
          if(array2[j]>array2[j+1]){
               code=array2[j]
               array2[j]=array2[j+1]
               array2[j+1]=code
          }
     }
     if(i>0){
      var a=(array2[array2.length-i])
      var b=(array2[array2.length-i-1])

       if((a-b)>result){
         result=a-b
         
       }
       
     }

    result=Math.max(array2[1]-array2[0],result)
}
//方法三 
var nums=[100,4,2,800,10,10000,-100000] 
result3=0

for(var i=0;i<nums.length-1;i++){

    var index=0
    var min=nums[i]
   
     for(var j=i+1;j<nums.length;j++){
      
       
            if(min>nums[j]){
                min=nums[j]
                index=j
             
            }

     }
    
   if(index!==0){
        nums[index]=nums[i]
        nums[i]=min

   }


     if(i>0){
        if(nums[i]-nums[i-1]>result3){
          result3=(nums[i]-nums[i-1])
        }
     }

     if(i==nums.length-2){
        result3=Math.max((nums[nums.length-1]-nums[nums.length-2]),result3)
     }
    
}

在排序中比较要注意排序完的临界点的前一位和后一位再相减 再比较一次

TIM截图20190522200323.png

相关文章

  • JS求数组最大间距问题(leetcode164题)

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

  • Leetcode-Medium 152. Maximum Pro

    题目描述 给定一个整数数组nums(有正有负),求最大子数组乘积 思路 求最大子数组乘积问题是求最大子数组之和演变...

  • 动态规划

    求最大子数组,最大子乘积

  • 《剑指Offer》-42.连续子数组的最大和

    题干 输入一个整形数组,数组里有正数也有负数。数组中的一个或连续多个正数组成一个子数组。求所有子数组的和的最大值。...

  • 关移动端的面试经验

    直接ceo面试,啥都不问,直接让写算法问题: 1. 求一个数组中,某个元素出现的次数最大的哪个值; 由于第一道题没...

  • Leetcode-164-Maximum Gap

    给定一个未排序的数组,求排序后数组中相邻元素之差的最大值。 这题最大的思维盲点就在于的复杂度让人直接放弃包含排序的...

  • 最大子数组之和

    问题: 输入一个整型数组,数据元素有正数也有负数,求元素组合成连续子数组之和最大的子数组。 描述: 输入的数组为1...

  • jsday02

    数组 数组求最大值 数组求最小值 数组拼接成字符串 反转数组 冒泡排序 阻止链接跳转 数组的一些方法

  • 求最大子数组

    注意: 1.因为数组中元素要合并,所以要用2个数组分别记录合并的信息 步骤: 1.现将数值连续的元素正正相加,负负...

  • JS求最大值和数组去重

    一、求最大值: 二、数组去重:

网友评论

      本文标题:JS求数组最大间距问题(leetcode164题)

      本文链接:https://www.haomeiwen.com/subject/lzlpzqtx.html