JavaScript在数组中找到与目标值最近的数Math.absreduceMath.floor

Posted web半晨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript在数组中找到与目标值最近的数Math.absreduceMath.floor相关的知识,希望对你有一定的参考价值。

目录


1、无序数组

通过遍历,依次求出每个元素值和目标值的差,比较更新。
时间复杂度:o(n)


源数据

const arr = [1, 3, 5, 6, 10];

方法一

function getClosestNumber(array, target) 
    let result = array[0];
    for (let i = 0; i < array.length; i++) if (Math.abs(array[i] - target) < Math.abs(result - target)) result = array[i];
    return result;

console.log(getClosestNumber(arr, 7));
// 6
console.log(getClosestNumber(arr, 3));
// 3

方法二

function getClosestNumber(array, target) 
    return array.reduce((pre, cur) => Math.abs(pre - target) < Math.abs(cur - target) ? pre : cur);

console.log(getClosestNumber(arr, 7));
// 6
console.log(getClosestNumber(arr, 3));
// 3

2、有序数组

二分查找法
1、取left和right两个索引,每次取出中间索引位mid的值与目标值
如果中间位的值大于目标值,则想要寻找的值在左侧
如果中间位的值小于目标值,则想要寻找的值在右侧
2、动态更新left和right,直到指针停留在相邻的两个数
3、进行最好一次计算,得到与目标值最近的数
时间复杂度:o(log(n))


const arr = [1, 3, 5, 8, 10, 11, 14, 16, 18];
function getClosestNumber(array, target) 
    let left = 0,
        right = array.length - 1,
        mid;

    while (right - left > 1) 
        mid = Math.floor((left + right) / 2);
        if (array[mid] < target) 
            left = mid;
         else 
            right = mid;
        
    
    return Math.abs(array[left] - target) > Math.abs(array[right] - target) ? array[right] : array[left];


console.log(getClosestNumber(arr, 13));
// 14
console.log(getClosestNumber(arr, 0));
// 1

以上是关于JavaScript在数组中找到与目标值最近的数Math.absreduceMath.floor的主要内容,如果未能解决你的问题,请参考以下文章

9.27 在两个排序数组中找到第K小的数

折半查找

ShareCode不错的技术文章 -- 如何使用异或(XOR)运算找到数组中缺失的数?

一个无序数组,任意两个数相加等于一个给定的数,并且用复杂度最小的方法得出

第十二天打卡

如何找到 JavaScript 数组中包含的最大数?