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的主要内容,如果未能解决你的问题,请参考以下文章
ShareCode不错的技术文章 -- 如何使用异或(XOR)运算找到数组中缺失的数?