原题
给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。
如果数组元素个数小于 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
网友评论