Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Độ dài mảng con lớn nhất có tổng bằng 0 C++


Cho mảng số nguyên, tìm độ dài mảng con (subarray) liên tiếp dài nhất có tổng bằng 0. Nếu không có, trả về 0. Ví dụ:

Đầu vào 1: {15, -5, -1, 5, 1, 4} → Đầu ra: 4 (mảng con {-5,-1,5,1}).

Đầu vào 2: {3, 2, 4, 8, -1} → Đầu ra: 0.

Phương pháp: Hashmap lưu tổng tiền tố

  • Duyệt mảng, tính tổng tiền tố sum.
  • Dùng unordered_map<int,int> lưu sum -> chỉ số đầu tiên xuất hiện.
  • Nếu sum == 0 → cập nhật maxlen = i+1.
  • Nếu sum đã có trong map → mảng con từ map[sum]+1 đến i có tổng 0, độ dài i - map[sum]. Cập nhật maxlen.
  • Nếu sum chưa có → lưu vào map.

Ví dụ mã nguồn

#include <bits/stdc++.h>
using namespace std;

int lenMax(int *arr, int size) {
    unordered_map<int,int> mp;
    int sum = 0, maxlen = 0;
    for (int i=0;i

Kết quả

5

Phức tạp O(n) thời gian, O(n) không gian.