LeetCode 2043. 简易银行系统

  • Post author:
  • Post category:其他




一、题目



1、题目描述

你的任务是为一个很受欢迎的银行设计一款程序,以自动化执行所有传入的交易(转账,存款和取款)。银行共有



n

n






n





个账户,编号从



1

1






1









n

n






n





。每个账号的初始余额存储在一个下标从 0 开始的整数数组

balance

中,其中第



(

i

+

1

)

(i + 1)






(


i




+








1


)





个账户的初始余额是

balance[i]



请你执行所有 有效的 交易。如果满足下面全部条件,则交易 有效 :

指定的账户数量在 1 和 n 之间,且取款或者转账需要的钱的总数 小于或者等于 账户余额。

实现 Bank 类:


Bank(long[] balance)

使用下标从



0

0






0





开始的整数数组

balance

初始化该对象。


boolean transfer(int account1, int account2, long money)

从编号为

account1

的账户向编号为

account2

的账户转帐

money

美元。如果交易成功,返回

true

,否则,返回

false




boolean deposit(int account, long money)

向编号为

account

的账户存款

money

美元。如果交易成功,返回

true

;否则,返回

false




boolean withdraw(int account, long money)

从编号为

account

的账户取款

money

美元。如果交易成功,返回

true

;否则,返回

false




样例输入:


X



样例输出:


X



2、基础框架

  • C++ 版本给出的基础框架代码如下:
class Bank {
public:
    Bank(vector<long long>& balance) {

    }
    
    bool transfer(int account1, int account2, long long money) {

    }
    
    bool deposit(int account, long long money) {

    }
    
    bool withdraw(int account, long long money) {

    }
};



3、原题链接


LeetCode 2043. 简易银行系统



二、解题报告



1、思路分析




(

1

)

(1)






(


1


)





首先,存款、取款都得满足范围在



[

1

,

n

]

[1, n]






[


1


,




n


]










(

2

)

(2)






(


2


)





其次,取款、转账的时候满足转账数目小于等于被取款人的当前值。



2、时间复杂度

每次操作的时间复杂度



O

(

1

)

O(1)






O


(


1


)







3、代码详解

class Bank {
    vector<long long> b;
public:
    Bank(vector<long long>& balance) {
        b.clear();
        b.push_back(-1);
        for(int i = 0; i < balance.size(); ++i) {
            b.push_back(balance[i]);
        }
    }
    
    bool transfer(int account1, int account2, long long money) {
        if(account1 > b.size()-1) return false;
        if(account2 > b.size()-1) return false;
        if(withdraw(account1, money) == false) return false;
        return deposit(account2, money);
    }
    
    bool deposit(int account, long long money) {
        if(account > b.size()-1) return false;
        b[account] += money;
        return true;
    }
    
    bool withdraw(int account, long long money) {
        if(account > b.size()-1) return false;
        if(money > b[account]) return false;
        b[account] -= money;
        return true;
    }
};



三、本题小知识

1、防御式编程

2、充分利用函数进行代码的精简




四、加群须知

相信看我文章的大多数都是


「 大学生 」


,能上大学的都是


「 精英 」


,那么我们自然要


「 精益求精 」


,如果你还是


「 大一 」


,那么太好了,你拥有大把时间,当然你可以选择


「 刷剧 」


,然而,


「 学好算法 」


,三年后的你自然


「 不能同日而语 」




那么这里,我整理了


「 几十个基础算法 」


的分类,点击开启:





🌌《

算法入门指引

》🌌





如果链接被屏蔽,或者有权限问题,可以私聊作者解决。

大致题集一览:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述





在这里插入图片描述





为了让这件事情变得有趣,以及


「 照顾初学者 」


,目前题目只开放最简单的算法


「 枚举系列 」


(包括:

线性枚举、双指针、前缀和、二分枚举、三分枚举

),当有 一半成员刷完


「 枚举系列 」


的所有题以后,会开放下个章节,等这套题全部刷完,你还在群里,那么你就会成为


「 夜深人静写算法 」专家团


的一员。

不要小看这个专家团,三年之后,你将会是别人


望尘莫及


的存在。如果要加入,可以联系我,考虑到大家都是学生,


没有「 主要经济来源 」


,在你成为神的路上,


「 不会索取任何 」




🔥联系作者,或者扫作者主页二维码加群,加入刷题行列吧🔥





🔥让天下没有难学的算法🔥






C语言免费动漫教程,和我一起打卡!






🌞《

光天化日学C语言

》🌞







让你养成九天持续刷题的习惯






🔥《

九日集训

》🔥







入门级C语言真题汇总






🧡《

C语言入门100例

》🧡







组团学习,抱团生长






🌌《

算法零基础100讲

》🌌







几张动图学会一种数据结构






🌳《

画解数据结构

》🌳







竞赛选手金典图文教程






💜《

夜深人静写算法

》💜





版权声明:本文为WhereIsHeroFrom原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。