本文最后更新于:2023年3月19日 晚上
Lt1385. 两个数组间的距离值
给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。 「距离值 」** *定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足 |arr1[i]-arr2[j]| <= d 。 **示例 1:\ *
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 输入: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:
1 2 输入:arr1 = [1 ,4 ,2 ,3 ], arr2 = [-4 ,-3 ,6 ,10 ,20 ,30 ], d = 3 输出:2
示例 3:
1 2 输入:arr1 = [2 ,1 ,100 ,3 ], arr2 = [-5 ,-2 ,10 ,-3 ,7 ], d = 6 输出:1
提示:
1 <= arr1.length, arr2.length <= 500
-10^3 <= arr1[i], arr2[j] <= 10^3
0 <= d <= 100
思路 一行解法 使用 filter,代替双重遍历求得的数组长度即为答案
正常解法 如果一个点不满足就可以提前结束循环了,节省时间
解答 一行解法 1 2 3 4 5 6 7 8 9 10 11 var findTheDistanceValue = function (arr1, arr2, d ) { return arr1.filter( (a ) => arr2.filter((b ) => Math .abs(a - b) > d).length === arr2.length ).length; };
正常解法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var findTheDistanceValue = function (arr1, arr2, d ) { let res = 0 ; for (const a of arr1) { let flag = true ; for (const b of arr2) { if (Math .abs(a - b) <= d) { flag = false ; break ; } } res += flag ? 1 : 0 ; } return res; };