您当前的位置: 首页 >  Java

暂无认证

  • 0浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

发布时间:2022-05-17 00:26:15 ,浏览量:0

目录
  • 1、无序数组
  • 2、有序数组
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 
关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.4024s