确定两个数组中最大值和最小值的对应关系是一个有趣且实用的问题。在处理数据时,我们经常需要了解不同数据集之间的特定元素关系,尤其是最大值和最小值之间的对应关系。
问题:
给定两个数组 arr1 和 arr2,它们的元素之间存在一一对应的关系。我们的任务是高效地判断 arr1 中的最大值是否对应 arr2 中的最小值。这个问题在数据处理和算法设计中非常常见,尤其是在需要分析两个相关数据集的最大和最小特性时。
示例:
· arr1 = [333, 555, 222]
· arr2 = [100, 200, 300] (错误对应)
· arr2 = [200, 100, 300] (正确对应,因为arr1的最大值555对应arr2的最小值100)
解决方案:
为了高效地解决这个问题,我们可以采用一种无需排序的方法。这种方法直接查找最大值和最小值,然后进行一次比较,从而避免了排序带来的额外计算开销。
00001. 找到最大值和最小值: 首先,我们需要分别找到 arr1 中的最大值 max1 和 arr2 中的最小值 min2。
00002. 确定最大值索引: 接下来,获取 max1 在 arr1 中的索引 index。
00003. 比较对应元素: 最后,检查 arr2[index] 是否等于 min2。如果相等,则说明 arr1 中的最大值对应 arr2 中的最小值。
以下代码实现了该方法:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
function checkMinMaxCorrespondence(arr1, arr2) { if (arr1.length !== arr2.length) { return false; // 数组长度不同,对应关系无效 }
const max1 = Math.max(...arr1); const min2 = Math.min(...arr2); const maxIndex = arr1.indexOf(max1);
return arr2[maxIndex] === min2; }
// 测试用例 const arr1a = [333, 555, 222]; const arr2a = [200, 100, 300]; // 正确对应 const arr1b = [333, 555, 222]; const arr2b = [100, 200, 300]; // 错误对应
console.log(checkMinMaxCorrespondence(arr1a, arr2a)); // true console.log(checkMinMaxCorrespondence(arr1b, arr2b)); // false |
这种方法的时间复杂度为 O(n),其中 n 为数组长度。这比传统的排序方法 O(n log n) 更高效,因为它直接找到最大值和最小值,然后进行一次比较,避免了不必要的排序操作。这种方法特别适用于处理大数据集,因为它显著减少了计算时间,提高了算法的性能。


发布需求
我来说两句