まとめ2043-シンプルな銀行システム

ディレクトリリンク:

Likouプログラミングの質問-ソリューションの概要-共有+記録-CSDNブログ

GitHub同期ブラッシングプロジェクト:

https://github.com/September26/java-algorithms

https://github.com/September26/java-algorithms

オリジナルタイトルリンク:フォースバックル


説明:

あなたの仕事は、人気のある銀行がすべての入金トランザクション(送金、預金、引き出し)を自動化するためのプログラムを設計することです。銀行には、1からnまでの番号が付けられた合計n個の口座があります。各アカウントの初期残高は、0ベースの整数配列の残高に格納されます。ここで、(i + 1)番目のアカウントの初期残高はbalance[i]です。

有効なトランザクションをすべて実行してください。次のすべての条件が満たされた場合、トランザクションは有効です。

指定された口座数は1からnであり
、引き出しまたは送金に必要な合計金額は口座残高以下です。
Bankクラスを実装します。

Bank(long [] balance)オブジェクトを0ベースの整数配列のバランスで初期化します。
boolean transfer(int account1、int account2、long money)口座番号account1から口座番号account2にドルを送金します。トランザクションが成功した場合はtrueを返し、それ以外の場合はfalseを返します。
ブール預金(intアカウント、ロングマネー)口座番号付き口座にドルを預金します。トランザクションが成功した場合はtrueを返し、それ以外の場合はfalseを返します。
boolean withdraw(int account、long money)口座番号付き口座からお金を引き出します。トランザクションが成功した場合はtrueを返し、それ以外の場合はfalseを返します。
 

例:

入入:
[「銀行」、「引き出し」、「送金」、「入金」、「送金」、「出金」]
[[[10、100、20、50、30]]、[3、10]、[5 、 1、20]、[5、20]、[
3、4、15]、[10、50]]外出:
[null、true、true、true、false、false]

説明:
Bank bank = new Bank([10、100、20、50、30]);
bank.withdraw(3、10); // trueを返し、アカウント3の残高は$ 20なので、$10を引き出すことができます。
                         //アカウント3の残高は$20-$10 =$10です。
bank.transfer(5、1、20); // trueを返し、口座5の残高は$ 30なので、$20を送金できます。
                         //アカウント5の残高は$30-$20 = $ 10で、アカウント1の残高は$ 10 + $ 20 =$30です。
bank.deposit(5、20); // trueを返し、$20をアカウント5に預けることができます。
                         //アカウント5の残高は$10+ $ 20 =$30です。
bank.transfer(3、4、15); // falseを返し、アカウント3の現在の残高は$10です。
                         //したがって、$15を転送することはできません。
bank.withdraw(10、50); // falseを返します。アカウント10が存在しないため、トランザクションは無効です。
 

ヒント:

n == balance.length
1 <= n、account、account1、account2 <= 105
0 <= balance [i]、money <= 1012
転送、入金、引き出し3つの関数、それぞれ最大104回の呼び出し

出典:LeetCode
リンク:https ://leetcode-cn.com/problems/simple-bank-system
著作権はLeetCode.comに帰属します。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。

問題解決のアイデア:

*問題解決のアイデア:
*ここでは比較的簡単です。
*データストレージに直接配列を使用します。送金の際は、順次実行する必要があります。つまり、残高が十分かどうかを判断してから、加算演算を実行する必要があります。

コード:

public class Solution2043 {

    public static class Bank {
        long[] balance;
        int size = 0;

        public Bank(long[] balance) {
            this.balance = balance;
            size = balance.length;
        }

        public boolean transfer(int account1, int account2, long money) {
            if (account1 > size || account2 > size) {
                return false;
            }
            boolean withdraw = withdraw(account1, money);
            if (withdraw) {
                deposit(account2, money);
                return true;
            }
            return false;
        }

        public boolean deposit(int account, long money) {
            if (account > size) {
                return false;
            }
            balance[account - 1] += money;
            return true;
        }

        public boolean withdraw(int account, long money) {
            if (account > size) {
                return false;
            }
            if (balance[account - 1] < money) {
                return false;
            }
            balance[account - 1] -= money;
            return true;
        }
    }

    /**
     * Your Bank object will be instantiated and called as such:
     * Bank obj = new Bank(balance);
     * boolean param_1 = obj.transfer(account1,account2,money);
     * boolean param_2 = obj.deposit(account,money);
     * boolean param_3 = obj.withdraw(account,money);
     */
}

おすすめ

転載: blog.csdn.net/AA5279AA/article/details/123569407