D17 LeetCode 2043.简易银行系统(中等)
一、题目
二、思路(自己)
-
这道题跟前天的那个设计链表的题目相似,都是自己设计一个类,不过那个要难挺多,因为要求要O(1)的时间复杂度。 挺简单的,就比详述自己的一些思路啥的,就普通设计类,也没有涉及多线程。
class Bank { List<Long> list= new ArrayList<>(); int count; public Bank(long[] balance) { for(long l:balance){ list.add(l); } count=balance.length; } public boolean transfer(int account1, int account2, long money) { if(account1>count||account2>count||list.get(account1-1)<money) return false; list.set(account1-1,list.get(account1-1)-money); list.set(account2-1,list.get(account2-1)+money); return true; } public boolean deposit(int account, long money) { if(account>count) return false; else { list.set(account-1,list.get(account-1)+money); return true; } } public boolean withdraw(int account, long money) { if(account>count||money>list.get(account-1)) return false; else { list.set(account-1,list.get(account-1)-money); return true; } } }
-
不过值得提一嘴的是,在判断转账的时候,应该要把账户输入的合理性放在判断钱够不够之前,否则会造成数组越界,这是我第一次提交时候的疏忽!
三、题解(官方)
官方代码贴一下,听简单的
class Bank { long[] balance; public Bank(long[] balance) { this.balance = balance; } public boolean transfer(int account1, int account2, long money) { if (account1 > balance.length || account2 > balance.length || balance[account1 - 1] < money) { return false; } balance[account1 - 1] -= money; balance[account2 - 1] += money; return true; } public boolean deposit(int account, long money) { if (account > balance.length) { return false; } balance[account - 1] += money; return true; } public boolean withdraw(int account, long money) { if (account > balance.length || balance[account - 1] < money) { return false; } balance[account - 1] -= money; return true; } }