一、题目
二、思路(自己)
- 这道题跟前天的那个设计链表的题目相似,都是自己设计一个类,不过那个要难挺多,因为要求要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;
}
}