0. Giới thiệu vấn đề chả hiểu làm h1 kiểu gì
Hãy bắt đầu với một vấn đề cụ thể để bạn dễ dàng hình dung kỹ thuật Sliding Window.v
df
v
dfv
df
fd
vfd
v
dfv
dfv
dfv
df
vfdvfdvfdvfdvdfv
dfv
dfv
Vấn đề cần giải quyết
Giả sử bạn có một mảng kích thước N và cần tìm tổng lớn nhất của một subarray có kích thước chính xác là K.vfd
v
fd
vfd
v
df
v
fdv
fdv
df
vdf
v
dfv
fd
v
dfv
dfv
df
vdf
vdfv
Cách tiếp cận đơn giản
Chúng ta có thể dùng 2 vòng lặp để lấy ra các subarray sau và so sánh tổng của các subarray : Dẫn đến Time Complexity là $O(N^2)$ ❌
vfd
v
df
v
dfv
df
v
dfv
dfv
df
v
df
vfd
vvfdWe content
haha
int maxSumSubarray(int arr[], int n, int k) {int maxSumSubarray(int arr[], int n, int k) {
int maxSum = INT_MIN;
for (int i = 0; i <= n - k; i++) {
int sum = 0;
for (int j = i; j < i + k; j++) {
sum += arr[j];
}
maxSum = max(maxSum, sum);
}
return maxSum;
}
Phan 2: int maxSumSubarray(int arr[], int n, int k) {int maxSumSubarray(int arr[], int n, int k) {
int maxSum = INT_MIN;
for (int i = 0; i <= n - k; i++) {
int sum = 0;
for (int j = i; j < i + k; j++) {
sum += arr[j];
}
maxSum = max(maxSum, sum);
}
return maxSum;
}
Phan 3:int maxSumSubarray(int arr[], int n, int k) {int maxSumSubarray(int arr[], int n, int k) {
Thân đẹp xza ahahihi
int maxSum = INT_MIN;
for (int i = 0; i <= n - k; i++) {
int sum = 0;
for (int j = i; j < i + k; j++) {
sum += arr[j];
}
maxSum = max(maxSum, sum);
}
return maxSum;
}