我是leetcode中的donig Intersection of Two Arrays II。
我在其中找到了解决方案,我不明白的一件事是
为什么此解决方案不能用于for循环?
如果我更改了这一行代码
while(p1 < nums1.length && p2 < nums2.length)
进入
for(let p1=0,let p2=0;p1 < nums1.length && p2 < nums2.length;p1++;p2++)
输出将仅更改为[2]
而不是[2,2]
为什么会这样?
请求: 给定两个数组,编写一个函数来计算它们的交集。
输入:
nums1 = [1,2,2,1]
,nums2 = [2,2]
输出:
[2,2]
这是JS代码:
var intersect = function(nums1, nums2) {
nums1.sort(cm);
nums2.sort(cm);
var p1 =0
var p2 =0
var res = [];
while(p1 < nums1.length && p2 < nums2.length) {
if(nums1[p1] === nums2[p2]) {
res.push(nums1[p1]);
p1++;
p2++;
} else if(nums1[p1] > nums2[p2]) {
p2++;
} else {
p1++;
}
}
return res;
};
var cm = function(a, b) {
return a - b;
}
console.log(intersect([1,2,2,1], [2,2]))
答案 0 :(得分:0)
考虑以下for循环
for(let p1=0,let p2=0;p1 < nums1.length && p2 < nums2.length;p1++;p2++)
在此p1
和p2
中,每次循环总是增加。但是在您里面,您是原始代码。有条件地增加
增加p1
和p2
时,最初将它们设置为0
。所以这意味着
在每个循环中p1=p2
。因此它将比较相同索引上的值。
在以下两个数组中。
[1,2,2,1]
[2,2]
仅第二个2
([1, 2 ,2,1] [2, 2 ])将被匹配,因为它们都具有相同的索引{ {1}}。
1
您也可以使用else if(nums1[p1] > nums2[p2]) {
p2++;
} else {
p1++;
}
和filter()
includes()