开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第 24 天,点击查看活动详情。
两个数组间的距离值
原题地址
给你两个整数数组 arr1
, arr2
和一个整数 d
,请你返回两个数组之间的 距离值 。
「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i]
,不存在任何元素 arr2[j]
满足 |arr1[i]-arr2[j]| <= d
。
示例 1:
输入:arr1 = [4,5,8], arr2 = [10,9,1,8], d = 2
输出:2
解释:
对于 arr1[0]=4 我们有:
|4-10|=6 > d=2
|4-9|=5 > d=2
|4-1|=3 > d=2
|4-8|=4 > d=2
所以 arr1[0]=4 符合距离要求
对于 arr1[1]=5 我们有:
|5-10|=5 > d=2
|5-9|=4 > d=2
|5-1|=4 > d=2
|5-8|=3 > d=2
所以 arr1[1]=5 也符合距离要求
对于 arr1[2]=8 我们有:
|8-10|=2 <= d=2
|8-9|=1 <= d=2
|8-1|=7 > d=2
|8-8|=0 <= d=2
存在距离小于等于 2 的情况,不符合距离要求
故而只有 arr1[0]=4 和 arr1[1]=5 两个符合距离要求,距离值为 2
示例 2:
输入:arr1 = [1,4,2,3], arr2 = [-4,-3,6,10,20,30], d = 3
输出:2
示例 3:
输入:arr1 = [2,1,100,3], arr2 = [-5,-2,10,-3,7], d = 6
输出:1
提示:
1 <= arr1.length, arr2.length <= 500
0 <= d <= 100
思路分析
- 遍历数组
arr1
和arr2
来判断每个元素之间的距离跟d
的关系; - 如果
Math.abs(arr1[i] - arr2[j]) <= d
,则本次循环结束,并将tag
记为true
,也就是表示该元素不满足条件; - 在
arr2
循环完成后,若tag
为false
,则可以算作一个距离加到result
上; - 最后返回
result
。
AC 代码
/**
* @param {number[]} arr1
* @param {number[]} arr2
* @param {number} d
* @return {number}
*/
var findTheDistanceValue = function(arr1, arr2, d) {
const len1 = arr1.length
const len2 = arr2.length
let result = 0
for (let i = 0; i < len1; i++) {
let j = 0
let tag = false
while (j < len2) {
if (Math.abs(arr1[i] - arr2[j]) <= d) {
tag = true
break
}
j++
}
if(!tag) result++
}
return result
};
结果:
- 执行结果: 通过
- 执行用时:68 ms, 在所有 JavaScript 提交中击败了63.32%的用户
- 内存消耗:41.4 MB, 在所有 JavaScript 提交中击败了73.37%的用户
- 通过测试用例:103 / 103