Hello Js

导航

豌豆荚前端面试中的一个算法题

豌豆荚的前端面试,去了先要做题,而且题目并不是一般的基础题,最后一题是算法,我觉得有点意思,回来还和几个好友交流沟通了一下。

先说下题目:

A,B两个数据,A递增数组,B递减数组。找出A、B两个数组中交集的第K大个元素。

要求有好几条,我只记得一个了,就是不能用多余的存储。

 

既然要找第K大的元素,A本身又是递增的,可以利用A来做文章。

在A和B里进行循环,找到相同的元素就记录一次,这样,到第K次的 岂不就是第K大的元素啦(A本身是递增的~~)

OK,应该就是这个思路。

function getKnunmber(A,B,k){
     var n = 0;
     var lena = A.length;
     var lenb = B.length;
     var knum;
     var arr = [];
     for(var i=0; i<lena; i++){
          for(var j=0; j<lenb; j++){
               if(A[i] == B[j]){
                   debugger;
                   if(n == k){
                        knum = A[i];
                        return knum;                          
                   }else{
                        n++;
                        break;
                   }     
                }
          }
     }
}

这里有一个问题,就是双重for循环的时候,如何跳出?

我在最初调试代码的时候发现,如果在里面的for循环中break,只能跳出当前的for循环,却跳不出外部的for循环。在网上并没有找到什么好的解决方案。后来,改用return,在chrome下debugger调试的时候发现,竟然可以直接跳出整个for循环。好用的return.

找个例子试一下:

  var A = [3,4,5,6,7,8,9];
    var B = [12,10,9,8,7,1];
    var n = getKnunmber(A,B,1);
    console.log(n)

可以正常执行啦。

其实连knum这个变量都是多余的,又改了一下,具体的演示地址:http://jsbin.com/lexaq/7/edit

posted on 2014-03-21 16:47  苏拉A梦  阅读(1029)  评论(1编辑  收藏  举报