第54天 写一个函数找出给定数组中的最大差值
function getMax(arr){
for(let i=arr[arr.length-1];i>0;i--){
for(let j=0;j
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]))
先排序再减
function maxStep (arr) {
return Math.max.applay(null, arr) - Math.min.apply(null, arr);
}
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
}
function difference(arr) {
return Math.max(...arr) - Math.min(...arr)
}
var arr = [1,2,3,4,5,6]
console.log( difference(arr) )
第一反应先排序,然后尾减头。看了上面 Math.max
和 Math.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]))
按着标准的思路解题
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
}
第一反应先排序,然后尾减头。看了上面
Math.max
和Math.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 操作,岂不是至少需要两次遍历么,所以性能上应该不太好。
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]));
个人认为用Math.min 和Math.max的时间复杂度是n 但是sort排序的时间复杂度是nlog(n)
Array.prototype.max = function() {
return Math.max(...this);
}
Array.prototype.min = function() {
return Math.min(...this);
}
[1,2,3].max() - [1,2,3].min() // 2
function getDiff(arr){
let max = arr[0]
let min = arr[0]
let len = arr.length
for(let i = 1; i
max = arr[i]
}
if(min > arr[1]){
min = arr[i]
}
}
return max - min
}
这道题就出到点子上了,最大插值,意味着要求出最大值和最小值,同时求出最大值和最小值应该是最优解,我在第29天的那个练习上已经说明了, #104
我又来了 还是考虑数组多维的情况利用
Array.prototype.flat(Infinity)
完全展开数组
function maxDiff(nums) {
let newNums = nums.flat(Infinity).sort((a, b) => a - b)
return newNums[newNums.length - 1] - newNums[0]
}
看到有大佬说
个人认为用Math.min 和Math.max的时间复杂度是n 但是sort排序的时间复杂度是nlog(n)
那我们简单修改一下就好了
function maxDiff(nums) {
let newNums = nums.flat(Infinity)
return Math.max(...newNums) - Math.min(...newNums)
}
function difference(arr) {
return Math.max(...arr) - Math.min(...arr)
}var arr = [1,2,3,4,5,6]
console.log( difference(arr) )
const getMaxDiff = (arr = []) => {
arr.sort((a, b) => a - b)
return arr.pop() - arr.shift()
}
Most helpful comment
function difference(arr) {
return Math.max(...arr) - Math.min(...arr)
}
var arr = [1,2,3,4,5,6]
console.log( difference(arr) )