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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值