• [Intermediate Algorithm]


    题目

    队友该卖就卖,千万别舍不得。

    当你的队伍被敌人包围时,你选择拯救谁、抛弃谁非常重要,如果选择错误就会造成团灭。

    如果是AD或AP,优先拯救。

    因为AD和AP是队伍输出的核心。

    其次应该拯救打野。

    因为打野死了对面就可以无所顾虑地打龙。

    最后才是辅助或上单。

    因为辅助和上单都是肉,死了也不会对团队造成毁灭性影响,该卖就卖。

    但真实中的团战远比这要复杂,你的队伍很可能会被敌人分割成2个或3个部分。

    当你救了一个重要的人时,很可能其他队友也会因此获救。

    举个例子:

    辅助和AD经常是在一起的,打野和中单在一起,上单经常一个人。

    你救了AD,辅助也经常因此获救。

    让我们来丢弃数组(arr)的元素,从左边开始,直到回调函数return true就停止。

    第二个参数,func,是一个函数。用来测试数组的第一个元素,如果返回fasle,就从数组中抛出该元素(注意:此时数组已被改变),继续测试数组的第一个元素,如果返回fasle,继续抛出,直到返回true。

    最后返回数组的剩余部分,如果没有剩余,就返回一个空数组。

    提示

    Arguments object
    Array.shift()
    Array.slice()

    测试用例

    • drop([1, 2, 3, 4], function(n) {return n >= 3;}) 应该返回 [3, 4]。
    • drop([0, 1, 0, 1], function(n) {return n === 1;}) 应该返回 [1, 0, 1]。
    • drop([1, 2, 3], function(n) {return n > 0;}) 应该返回 [1, 2, 3]。
    • drop([1, 2, 3, 4], function(n) {return n > 5;}) 应该返回 []。
    • drop([1, 2, 3, 7, 4], function(n) {return n > 3;}) 应该返回 [7, 4]。
    • drop([1, 2, 3, 9, 2], function(n) {return n > 2;}) 应该返回 [3, 9, 2]。

    分析思路

    while() 循环,当 func(arr[0]) 不被满足时移除arr首项。然后继续遍历数组剩余部分。

    要注意的是,当 func(arr[0]) 一直不被满足时,arr首项将被无限多(浏览器最大值边界)次移除,即使arr为空数组也会循环此操作。为了保证效率,应加上限制条件 arr.length 阻止无限循环的发生。

    代码

    function drop(arr, func) {
      // Drop them elements.
      while(!func(arr[0]) && arr.length) {
        arr.shift();
      }
      
      return arr;
    }
    
    drop([1, 2, 3], function(n) {return n < 3; });
    
  • 相关阅读:
    浏览器中Javascript单线程分析
    AJAX原理及XMLHttpRequest对象分析
    for和foreach的执行效率的问题之新发现
    C# 2.0泛型初试
    Page常用方法
    自动提交问题,不知道这算不算是MS的一个BUG
    什么是爱情【转载】
    IE 7 BETA 3安装
    Ajax实现两级下拉框连动的应用
    IFame的另一种表现
  • 原文地址:https://www.cnblogs.com/water-moon/p/6904700.html
Copyright © 2020-2023  润新知