簡體   English   中英

給定兩家銀行之間的轉賬清單,確定進行給定轉賬所需的每家銀行的最低初始賬戶余額

[英]Given a list of transfers between two banks, determine the minimum initial account balance of each bank required for the given transfers to be carried

我有一個我試圖解決的問題。 一些測試用例是成功的,而另一些則不是。

要求:

您將獲得兩個銀行之間的 N 次轉賬(編號從 0 到 N-1)的列表:銀行 A 和銀行 B。第 K 次轉賬由兩個值描述:

  • R[K](“A”或“B”)代表收款人(匯款被發送到的銀行);
  • V[K] 表示通過傳輸發送的值。

所有轉移都按照它們在列表中出現的順序完成。 銀行不想負債(換句話說,他們的賬戶余額可能不會低於 0)。 為了完成轉賬,每家銀行的最低初始賬戶余額是多少?

寫一個函數:

function solution(R, V);

即,給定一個字符串 R 和一個長度為 N 的整數數組 V,返回一個由兩個整數組成的數組。 整數應按以下順序表示銀行 A 和 B 的最小初始賬戶余額:[銀行 A,銀行 B]。

結果數組應作為整數數組返回。

為以下假設編寫一個有效的算法:

  • 字符串 R 和數組 V 的長度均為 N;
  • N 是 [1..100,000] 范圍內的整數;
  • 數組 V 的每個元素都是 [1..10,000] 范圍內的整數;
  • 字符串 R 僅由字符“A”和/或“B”組成。

我通過了以下測試用例:

  • 給定 R = "BAABA" 和 V = [2, 4, 1, 1, 2],函數應該返回 [2, 4]。
  • 給定 R = "ABAB" 和 V = [10, 5, 10, 15],函數應該返回 [0, 15]。
  • 給定 R = "B" 和 V = [100],函數應該返回 [100, 0]。
  • 給定 R = "ABBA" 和 V = [1, 1, 1, 1],函數應該返回 [1, 1]。

我未能通過以下測試用例:

失敗的測試用例

你能告訴我如何復制這些測試用例嗎?

我的測試已經完成,但我很想學習如何復制這些結果。 這不是作業

提前致謝。

 function solution(R, V) { let min_A = 0; let min_B = 0; let balance = 0; let arr = []; let final = []; R = R.split(''); for (var i = 0; i < R.length; i++) { arr.push({ receiver: R[i], amount: V[i], }); } arr.map((k) => { if (k.receiver == 'A') { balance += k.amount; min_B = Math.min(-balance, min_B); } else { balance -= k.amount; min_A = Math.min(balance, min_A); } }); final.push(Math.abs(min_A), Math.abs(min_B)); console.log(final); console.log(min_A, min_B); } solution('ABBA', [1, 1, 1, 1]);

據我所知,您的問題源於您如何定義最小值。 您將min_amin_b定義為0 ,您應該將它們定義為它們的第一個匹配值(並通過將它們設置為超出其有效范圍的占位符值來做到這一點,以便您可以輕松檢查)。 以下是您應該如何修改代碼:

let min_A = "";
let min_B = "";
...
balance += k.amount;
if (min_B === "") {
    min_B = -balance;
} else {
    min_B = Math.min(-balance, min_B);
}
...
balance -= k.amount;
if (min_A === "") {
    min_A = balance;
} else {
    min_A = Math.min(balance, min_A);
}

暫無
暫無

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

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