
TIM截圖20190522200350.png
原題
給定一個(gè)無序的數(shù)組,找出數(shù)組在排序之后,相鄰元素之間最大的差值。
如果數(shù)組元素個(gè)數(shù)小于 2,則返回 0。
示例 1:
輸入: [3,6,9,1]
輸出: 3
解釋: 排序后的數(shù)組是 [1,3,6,9], 其中相鄰元素 (3,6) 和 (6,9) 之間都存在最大差值 3。
示例 2:
輸入: [10]
輸出: 0
解釋: 數(shù)組元素個(gè)數(shù)小于 2,因此返回 0。
說明:
你可以假設(shè)數(shù)組中所有元素都是非負(fù)整數(shù),且數(shù)值在 32 位有符號整數(shù)范圍內(nèi)。
請嘗試在線性時(shí)間復(fù)雜度和空間復(fù)雜度的條件下解決此問題。
這個(gè)問題我寫了三種方法 最后一種評分最高
//求數(shù)組最大區(qū)間 常規(guī)做法 方法一
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)
}
}
在排序中比較要注意排序完的臨界點(diǎn)的前一位和后一位再相減 再比較一次

TIM截圖20190522200323.png