ディレクトリリンク:
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);
*/
}