美文网首页
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题)

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