[Intermediate Algorithm] - Drop it
题目
队友该卖就卖,千万别舍不得。
当你的队伍被敌人包围时,你选择拯救谁、抛弃谁非常重要,如果选择错误就会造成团灭。
如果是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; });
[Intermediate Algorithm] - Drop it的更多相关文章
- [Intermediate Algorithm] - Arguments Optional
题目 创建一个计算两个参数之和的 function.如果只有一个参数,则返回一个 function,该 function 请求一个参数然后返回求和的结果. 例如,add(2, 3) 应该返回 5,而 ...
- [Intermediate Algorithm] - Everything Be True
题目 所有的东西都是真的! 完善编辑器中的every函数,如果集合(collection)中的所有对象都存在对应的属性(pre),并且属性(pre)对应的值为真.函数返回ture.反之,返回false ...
- [Intermediate Algorithm] - Steamroller
题目 对嵌套的数组进行扁平化处理.你必须考虑到不同层级的嵌套. 提示 Array.isArray() 测试用例 steamroller([[["a"]], [["b&qu ...
- [Intermediate Algorithm] - Finders Keepers
题目 写一个 function,它浏览数组(第一个参数)并返回数组中第一个通过某种方法(第二个参数)验证的元素. 提示 Array.filter() 测试用例 find([1, 3, 5, 8, 9, ...
- [Intermediate Algorithm] - Binary Agents
题目 传入二进制字符串,翻译成英语句子并返回. 二进制字符串是以空格分隔的. 提示 String.charCodeAt() String.fromCharCode() 测试用例 binaryAgent ...
- [Intermediate Algorithm] - Smallest Common Multiple
题目 找出能被两个给定参数和它们之间的连续数字整除的最小公倍数. 范围是两个数字构成的数组,两个数字不一定按数字顺序排序. 例如对 1 和 3 —— 找出能被 1 和 3 和它们之间所有数字整除的最小 ...
- [Intermediate Algorithm] - Sum All Primes
题目 求小于等于给定数值的质数之和. 只有 1 和它本身两个约数的数叫质数.例如,2 是质数,因为它只能被 1 和 2 整除.1 不是质数,因为它只能被自身整除. 给定的数不一定是质数. 提示 For ...
- [Intermediate Algorithm] - Sum All Odd Fibonacci Numbers
题目 给一个正整数num,返回小于或等于num的斐波纳契奇数之和. 斐波纳契数列中的前几个数字是 1.1.2.3.5 和 8,随后的每一个数字都是前两个数字之和. 例如,sumFibs(4)应该返回 ...
- [Intermediate Algorithm] - Spinal Tap Case
题目 将字符串转换为 spinal case.Spinal case 是 all-lowercase-words-joined-by-dashes 这种形式的,也就是以连字符连接所有小写单词. 提示 ...
随机推荐
- linux学习3-简单磁盘管理
简单的磁盘管理 下面涉及的命令具有一定的危险性,操作不当可能会丢失你的个人数据,初学者建议在虚拟环境中进行操作 通常情况下,这一小节应该直接将如何挂载卸载磁盘,如何格式化磁盘,如何分区,但如你所见,我 ...
- Mysql双主自增长冲突处理
Mysql双主自增长冲突处理 多主互备和主从复制有一些区别,因为多主中都可以对服务器有写权限,所以设计到自增长重复问题 出现的问题(多主自增长ID重复) 1:首先我们通过A,B的test表结 ...
- 最小生成树prime算法模板
#include<stdio.h> #include<string.h> using namespace std; int map[505][505]; int v, e; i ...
- 利用C语言中的函数指针实现c++中的虚函数
C语言中的函数指针 #include<stdio.h> int fun1(int a) { return a*a; } int fun2(int a) { return a*a*a; } ...
- Mac OSX:最简单的安装ant方法
安装ant最简单的方法就是通过brew.步骤如下:1. 安装brew(如果已经安装可以跳过这步).ruby -e "$(curl -fsSL https://raw.github.com/m ...
- 3.2 Piecewise Linear Interpolation(站点)
Newton Interpolation: https://www.youtube.com/watch? v=EyRQXA56asI Piecewise Linear Interpolation: h ...
- ORACLE11G 将dataguard的rman备份恢复到測试环境的单机oracle中的具体过程
. 也就是说此时数据库仅仅能进行不全然恢复了,在打开数据库时得使用resetlogs打开. recover database until scn 11412370952; RMAN> recov ...
- HDU4882ZCC Loves Codefires(贪心)
ZCC Loves Codefires Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- discuz新的单点论坛(不依赖UCenter)
discuz 本身提供UCENTER用户中心能够实现单点登录. 可是其它应用要单点登录到discuz还是存在若干问题: 须要2次激活.可能造成server无响应,论坛显示的最新注冊用户无法同步更新,官 ...
- 开源 免费 java CMS - FreeCMS1.9 移动APP生成栏目列表数据
项目地址:http://www.freeteam.cn/ 生成栏目列表数据 提取当前管理网站下同意移动APP訪问的栏目列表,生成json数据到/site/网站文件夹/mobile/channels.h ...