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


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

    先说下题目:

    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

  • 相关阅读:
    C++ 虚函数表解析
    Zend Studio使用
    Java的位运算符具体解释实例——与(&amp;)、非(~)、或(|)、异或(^)
    史上最简单的Hibernate入门简单介绍
    Ubuntu下很给力的下载工具
    hdu1698 Just a Hook 线段树:成段替换,总区间求和
    STL vector使用方法介绍
    Linux守护进程的编程实现
    PDO--PHP Data Objects
    经常使用的android弹出对话框
  • 原文地址:https://www.cnblogs.com/lxin/p/3616243.html
Copyright © 2020-2023  润新知