为什么此解决方案不能使用for循环?

时间:2019-03-19 02:04:48

标签: javascript

我是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]))

1 个答案:

答案 0 :(得分:0)

考虑以下for循环

for(let p1=0,let p2=0;p1 < nums1.length && p2 < nums2.length;p1++;p2++) 

在此p1p2中,每次循环总是增加。但是在您里面,您是原始代码。有条件地增加

为什么for循环返回`[2]`:

增加p1p2时,最初将它们设置为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()