[js] 写一个函数找出给定数组中的最大差值

haizhilin2013
2019-06-09 04:37:17 星期日
js
                    
                        
写一个函数找出给定数组中的最大差值
Comments per page
< Page 1 / 2 >
rocky-191 2019-06-09 01:43:10

function getMax(arr){
for(let i=arr[arr.length-1];i>0;i--){
for(let j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
let temp;
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
return arr.pop()-arr.shift();
}

console.log(getMax([2,3,7,20]))

cleverboy32 2019-06-09 13:47:51

先排序再减

cleverboy32 2019-06-09 13:51:12
function maxStep (arr) {
      return Math.max.applay(null, arr) - Math.min.apply(null, arr);
}
myprelude 2019-06-13 03:31:07
  function minMaxCalc(arr){
    const max = arr.reduce((a,b)=>{
      return a-b>0?a:b
    })
    const min = arr.reduce((a,b)=>{
      return a-b<0?a:b
    })
    return max-min
  }
zihao-zhong 2019-06-19 03:35:27

function difference(arr) {
return Math.max(...arr) - Math.min(...arr)
}

var arr = [1,2,3,4,5,6]
console.log( difference(arr) )

Konata9 2019-07-08 14:48:08

第一反应先排序,然后尾减头。看了上面 Math.maxMath.min 的操作被惊艳到了。佩服佩服!

const getMaxDiff = arr => {
  const sortedArr = arr.sort((a, b) => a - b);
  return sortedArr[sortedArr.length - 1] - sortedArr[0];
};

console.log(getMaxDiff([1, 2, 3, 4, 5]));
console.log(getMaxDiff([7, 8, 3, 2, 0, 9, 12]));
console.log(getMaxDiff([100, 2, 3, 6, 101, 33, 76]));
console.log(getMaxDiff([1, 2, 2, 2, 2, 2, 2, 2, 2]))
Kntt 2019-07-09 03:25:14

按着标准的思路解题

const getMaxDiff = (arr = []) => {
  // 认为参数必是数组, 不做校验了~
  let max = 0
  while (arr.length) {
     let mins = arr.shift()
     for (let i = 0; i < arr.length; i++) {
       let temp = Math.abs(mins - arr[i])
       if (temp > max) {
         max = temp
       }
     }
  }
  return max
}
jiamianmao 2019-08-10 16:29:01

第一反应先排序,然后尾减头。看了上面 Math.maxMath.min 的操作被惊艳到了。佩服佩服!

const getMaxDiff = arr => {
  const sortedArr = arr.sort((a, b) => a - b);
  return sortedArr[sortedArr.length - 1] - sortedArr[0];
};

console.log(getMaxDiff([1, 2, 3, 4, 5]));
console.log(getMaxDiff([7, 8, 3, 2, 0, 9, 12]));
console.log(getMaxDiff([100, 2, 3, 6, 101, 33, 76]));
console.log(getMaxDiff([1, 2, 2, 2, 2, 2, 2, 2, 2]))

Math.max 和 Math.min 操作,岂不是至少需要两次遍历么,所以性能上应该不太好。

JJL-SH 2019-09-25 03:40:31
function getMaxDiff(arr) {
  let minNum = Math.min(...arr);
  let maxNum = Math.max(...arr);

  return maxNum - minNum;
}
console.log(getMaxDiff([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]));
cyj1209 2019-09-26 01:27:36

个人认为用Math.min 和Math.max的时间复杂度是n 但是sort排序的时间复杂度是nlog(n)

Comments per page
< Page 1 / 2 >

学习不打烊,充电加油只为遇到更好的自己,365天无节假日,每天早上5点纯手工发布前端知识点(死磕自己,愉悦大家)。希望大家在这浮夸的前端圈里,保持冷静,坚持每天花20分钟来学习与思考。在这千变万化,类库层出不穷的前端,建议大家不要等到找工作时,才狂刷题,提倡每日学习!欢迎大家关注3+1开源项目!希望大家每人去学习与思考!(不要为了谁而来,要为自己而努力!

【关注官方公众号】 每天4:30-5:00推送
【公众号推荐】 一起折腾前端算法
【微信学习群】 备注3+1