JavaScript 数据结构与算法

JavaScript 算法 (数组最大间距)

2020-04-24  本文已影响0人  阿畅_

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

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

输入: [3,6,9,1]
输出: 3
解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。
输入: [10]
输出: 0
解释: 数组元素个数小于 2,因此返回 0。

说明:

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-gap

根据这个思路的代码:

function maximumGap(ary) {
  // 如果数组的个数小于 2  直接返回 0
  if (ary.length < 2) return 0

  ary.sort((a, b) => a - b)
  let max = 0
  for (let i = 0; i < ary.length - 1; i++) {
    let dif = ary[i + 1] - ary[i]
    if (dif > max) {
      max = dif
    } 
  }
  return max
}
console.log(maximumGap([1,2,7,9,3,6,10]))
// 3
function maximumGap(ary) {
  // 如果数组的个数小于 2  直接返回 0
  if (ary.length < 2) return 0

  let max = 0
  let len = ary.length - 1
  let diff
  // 使用冒泡排序的方式,在排序是就算出结果
  for (let i = len; i > 0; i--) {
    for (let j = 0; j < i; j++) {
      let tmp = ary[j]
      if (tmp > ary[j + 1]) {
        ary[j] = ary[j + 1]
        ary[j + 1] = tmp
      }
      // tmp = null
    }
    // 为什么要小于 len,因为到最后 i + 1 就没有值了
    if (i < len) {
      diff = ary[i + 1] - ary[i]
      if (diff > max) {
        max = diff
      }
    }
  }
  console.log(ary)
  // 这里不能直接返回 max, 需要在拿第一个数和第二个数比较
  // 因为冒泡排序 i 是 > 0 的,没有比较第一个数
  return Math.max(max, ary[1] - ary[0])
}
// 如果不比价就这出现这种问题,计算结果是 10,正确是 15
console.log(maximumGap([30,20,16, 1]))

上一篇 下一篇

猜你喜欢

热点阅读