LeetCode Entry
2043. Simple Bank System
Design a bank
2043. Simple Bank System medium blog post substack youtube
https://assets.leetcode.com/users/images/537d3343-674d-4aca-855d-70851800629b_1761473639.0489593.webp
Join me on Telegram
https://t.me/leetcode_daily_unstoppable/1154
Problem TLDR
Design a bank #medium
Intuition
Reuse transfer = withdraw & deposit.
Approach
- carefull with off-by-ones
Complexity
-
Time complexity: \(O(n)\)
-
Space complexity: \(O(n)\)
Code
// 144ms
class Bank(val b: LongArray) {
fun transfer(a1: Int, a2: Int, m: Long) =
a2 <= b.size && withdraw(a1, m) && deposit(a2, m)
fun deposit(a: Int, m: Long) =
a <= b.size && { b[a-1] += m; true }()
fun withdraw(a: Int, m: Long) =
a <= b.size && b[a-1] >= m && { b[a-1] -= m; true }()
}
// 13ms
struct Bank(Vec<i64>); impl Bank {
fn new(b: Vec<i64>) -> Self { Self(b) }
fn transfer(&mut self, a1: i32, a2: i32, m: i64) -> bool
{ a2 as usize <= self.0.len() && self.withdraw(a1, m) && self.deposit(a2, m) }
fn deposit(&mut self, a: i32, m: i64) -> bool
{ let a = a as usize - 1; a < self.0.len() && { self.0[a] += m; true }}
fn withdraw(&mut self, a: i32, m: i64) -> bool {
let a = a as usize - 1;
a < self.0.len() && self.0[a] >= m && { self.0[a] -= m; true }
}
}