1. 问题背景与理解
今天遇到一道有趣的LeetCode题目(编号1385),题目名为"Find the Distance Value Between Two Arrays"。这道题的中文翻译是"两个数组间的距离值",属于数组操作类的基础算法题。我在第一次提交时就跑出了耗时100%的成绩,这里分享一下我的解题思路和优化过程。
这道题的核心要求是:给定两个整数数组arr1和arr2,以及一个整数d,我们需要计算arr1中满足特定条件的元素个数。具体条件是:对于arr1中的某个元素a,arr2中所有元素b都满足|a - b| > d。换句话说,arr1中的元素a与arr2中所有元素的绝对差都必须大于d,这个a才能被计入结果。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 暴力解法分析与实现
2.1 最直观的暴力解法
看到这个问题,最直接的思路就是暴力枚举:
- 遍历arr1中的每个元素a
- 对于每个a,遍历arr2中的所有元素b
- 检查是否所有b都满足|a - b| > d
- 如果满足,则计数器加1
python复制def findTheDistanceValue(arr1, arr2, d):
count = 0
for a in arr1:
valid = True
for b in arr2:
if abs(a - b) <= d:
valid = False
break
if valid:
count += 1
return count
这个解法的时间复杂度是O(n*m),其中n和m分别是arr1和arr2的长度。在LeetCode的测试用例中,这个解法能够通过,但显然不是最优的。
2.2 暴力解法的优化空间
虽然暴力解法简单直接,但我们注意到内层循环有一个提前退出的机制(一旦发现不满足条件的b就立即break)。这在某些情况下可以节省一些计算,但最坏情况下时间复杂度仍然是O(n*m)。
3. 优化思路与算法选择
3.1 排序预处理的优势
为了优化算法,我们可以考虑对arr2进行排序。排序后的数组有一个重要特性:对于一个给定的a,
