[Intermediate Algorithm] - Drop it

題目

隊友該賣就賣,千萬別捨不得。數組

當你的隊伍被敵人包圍時,你選擇拯救誰、拋棄誰很是重要,若是選擇錯誤就會形成團滅。瀏覽器

若是是AD或AP,優先拯救。函數

由於AD和AP是隊伍輸出的核心。測試

其次應該拯救打野。code

由於打野死了對面就能夠無所顧慮地打龍。ip

最後纔是輔助或上單。element

由於輔助和上單都是肉,死了也不會對團隊形成毀滅性影響,該賣就賣。get

但真實中的團戰遠比這要複雜,你的隊伍極可能會被敵人分割成2個或3個部分。回調函數

當你救了一個重要的人時,極可能其餘隊友也會所以獲救。io

舉個例子:

輔助和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; });
相關文章
相關標籤/搜索