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

2019-05-22  本文已影响0人  infi_
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
上一篇 下一篇

猜你喜欢

热点阅读