簡體   English   中英

函數正確返回,但即使條件最終變為假,也會在while循環中超時

[英]Function returns correctly, but times out in while loop even though condition eventually becomes false

嘗試做一個kata ,我的函數正確地返回了所有內容,但是盡管所有測試都通過並完成了,但測試輸出卻出現錯誤,告訴我它在12000 ms超時。 我懷疑while循環是罪魁禍首,但是我在兩個地方放置了while循環條件將變為false並停止的地方。 有人可以指出為什么該功能除了超時之外還能正常工作嗎?

function beggars(values, n){
  // Case if only one beggar
  if (n == 1) {
    const reducer = (accumulator, currentValue) => accumulator + currentValue;
    let finalArr = [values.reduce(reducer)]
    return finalArr;
  }

  // Case if more beggars than handouts
  let remainder;
  if (n > values.length) {
    remainder = n - values.length;
    n = values.length;
  }

  // Object creation
  let obj = {};
  let final = [];
  for (var i = 1; i <= n; i++) {
    obj[i] = 0;
  }

  // Populating object with data
  let running = true;
  while (running) {
    for (var i = 1; i <= n; i++) {
      let shift = values.shift()
      obj[i] = obj[i] + shift;
    }
    if (values.length < n) {
      for (var i = 1; i <= values.length + 1; i++) {
        let shift = values.shift();
        if (shift) {
          obj[i] = obj[i] + shift;
        }
        running = false;
      }
    }
    if (values.length == 0) {
      running = false;
    }
  }

  // Values of object into array
  for (var key in obj) {
    final.push(obj[key]);
  }

  // Pushing 0's for the left over beggars
  if (remainder) {
    for (var i = 0; i < remainder; i++) {
      final.push(0);
    }
  }

  return final;
}

基本上,kata依賴於速度,這意味着最好不要使用數組方法,例如reduce或數組變異函數(如shift

速度(694 ms)來自簡單的for循環。

 function beggars(values, n) { var result = Array.from({ length: n }).fill(0), // prefill array with zero i, l; for (i = 0, l = values.length; i < l; i++) { result[i % n] += values[i]; } return result; } console.log(beggars([1, 2, 3, 4, 5], 1)); // [15] console.log(beggars([1, 2, 3, 4, 5], 2)); // [9, 6] console.log(beggars([1, 2, 3, 4, 5], 3)); // [5, 7, 3] console.log(beggars([1, 2, 3, 4, 5], 6)); // [1, 2, 3, 4, 5, 0] console.log(beggars([1, 2, 3, 4, 5], 0)); // [] 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM