Giả sử chúng ta có một mảng nhị phân, chúng ta phải tìm độ dài lớn nhất của một mảng con liền kề với số lượng bằng nhau là 0 và 1. Vì vậy, nếu đầu vào là [0,1,0], thì đầu ra sẽ là 2 là [0, 1] hoặc [1,0] là mảng liền kề lớn nhất với số lượng 0 và 1 bằng nhau.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- ret:=0, n:=kích thước của nums, sum:=0
- tạo bản đồ m, đặt m [0]:=- 1
- cho tôi trong phạm vi từ 0 đến kích thước của nums - 1
- sum:=sum + 1 khi nums [i] là 1, ngược lại sum:=sum - 1
- nếu tổng bằng m thì ret:=max của ret và i - m [sum], nếu không thì m [sum]:=i
- trả lời lại
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#include <bits/stdc++.h> using namespace std; class Solution { public: int findMaxLength(vector<int>& nums) { int ret = 0; int n = nums.size(); int sum = 0; map <int, int> m; m[0] = -1; for(int i = 0; i < nums.size(); i++){ sum += nums[i] == 1 ? 1: -1; if(m.count(sum)){ ret = max(ret, i - m[sum]); }else m[sum] = i; } return ret; } }; main(){ vector<int> v = {0,1,0,0,1}; Solution ob; cout << (ob.findMaxLength(v)); }
Đầu vào
[0,1,0,0,1]
Đầu ra
4