Tất cả thử thách
Dễ 0 đã giải Tỷ lệ chấp nhận 0%

Quy tắc tài khoản ngân hàng

Bảo vệ số dư tài khoản bằng các quy tắc nạp và rút tiền, từ chối các thao tác không hợp lệ.

Bạn sẽ học được gì

  • Chỉ thay đổi trạng thái qua phương thức
  • Từ chối số tiền sai và rút quá số dư
  • Đếm số thao tác bị từ chối

Đề bài

Xem bản gốc (English)

Đóng gói giữ dữ liệu của một đối tượng ở trạng thái riêng tư và chỉ thay đổi nó thông qua các phương thức thực thi các quy tắc. Số dư của một tài khoản ngân hàng chỉ có thể thay đổi thông qua deposit và withdraw.

Bắt đầu với số dư là 0 và xử lý các thao tác, mỗi thao tác deposit <amount> hoặc withdraw <amount>:

  • Một số tiền bằng 0 hoặc âm sẽ bị từ chối.
  • Một lần rút lớn hơn số dư hiện tại sẽ bị từ chối.
  • Ngược lại thì số dư sẽ thay đổi.

Hãy triển khai bank_account_rules(operations).

Đầu vào

operations: Các thao tác, theo thứ tự.

Đầu ra

Trả về [final_balance, rejected_count].

Ràng buộc

0 ≤ số thao tác ≤ 100,000

−10^9 ≤ số tiền ≤ 10^9

Ví dụ

Ví dụ 1
Đầu vào:
operations = ["deposit 100", "withdraw 30", "withdraw 200"]

Kết quả mong đợi:
expected = [70, 1]
Đầu vào:
std::vector<std::string> operations = {"deposit 100", "withdraw 30", "withdraw 200"};

Kết quả mong đợi:
std::vector<long long> expected = {70, 1};
Đầu vào:
string[] operations = new string[] {"deposit 100", "withdraw 30", "withdraw 200"};

Kết quả mong đợi:
long[] expected = new long[] {70, 1};

Giải thích

100 − 30 còn lại 70; rút 200 sẽ làm tài khoản bị âm, nên bị từ chối: [70, 1].

Ví dụ 2
Đầu vào:
operations = ["deposit -5", "withdraw 0", "deposit 10"]

Kết quả mong đợi:
expected = [10, 2]
Đầu vào:
std::vector<std::string> operations = {"deposit -5", "withdraw 0", "deposit 10"};

Kết quả mong đợi:
std::vector<long long> expected = {10, 2};
Đầu vào:
string[] operations = new string[] {"deposit -5", "withdraw 0", "deposit 10"};

Kết quả mong đợi:
long[] expected = new long[] {10, 2};

Giải thích

Khoản nạp âm và lần rút bằng 0 đều bị từ chối; lần nạp cuối cùng thành công: [10, 2].

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

Giữ số dư ở chế độ riêng tư và chỉ đổi nó trong deposit và withdraw.

Gợi ý 2

Từ chối số tiền nhỏ hơn hoặc bằng 0 trước tiên.

Gợi ý 3

Lệnh rút không được làm số dư xuống dưới 0.

Độ phức tạp mong đợi

thời gian O(số thao tác), bộ nhớ phụ O(1)

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.