Làm sao để có câu trả lời hay nhất?
29/03/2025
hahahihi
29/03/2025
Timi sum(a[:k]) mình chx học
29/03/2025
1. Ý tưởng:
Duyệt qua tất cả các đoạn con liên tiếp có độ dài k trong dãy a.
Tính tổng của mỗi đoạn con.
Tìm đoạn con có tổng lớn nhất.
2. Thuật toán:
Đọc số nguyên n và k từ đầu vào.
Đọc dãy a từ đầu vào.
Khởi tạo biến max_sum để lưu tổng lớn nhất, ban đầu đặt max_sum là một giá trị nhỏ nhất có thể (ví dụ: -vô cùng).
Duyệt qua các đoạn con liên tiếp từ vị trí 0 đến n-k:
Tính tổng current_sum của đoạn con từ vị trí i đến i+k-1.
Nếu current_sum lớn hơn max_sum, cập nhật max_sum = current_sum.
In ra max_sum.
3. Mã giả:
Đọc n, k
Đọc dãy a
max_sum = -vô cùng
for i từ 0 đến n - k:
current_sum = 0
for j từ i đến i + k - 1:
current_sum = current_sum + a[j]
if current_sum > max_sum:
max_sum = current_sum
In ra max_sum
4. Cài đặt Python:
Python
def max_subarray_sum(n, k, arr):
max_sum = float('-inf')
for i in range(n - k + 1):
current_sum = sum(arr[i:i + k])
max_sum = max(max_sum, current_sum)
return max_sum
n, k = map(int, input().split())
arr = list(map(int, input().split()))
print(max_subarray_sum(n, k, arr))
5. Độ phức tạp:
Độ phức tạp thời gian: O(n*k)
Độ phức tạp không gian: O(1)
6. Tối ưu hóa:
Để giảm độ phức tạp thời gian xuống O(n), ta có thể sử dụng phương pháp "sliding window" (cửa sổ trượt).
Tính tổng của đoạn con đầu tiên (từ vị trí 0 đến k-1).
Sau đó, duyệt qua các vị trí từ k đến n-1, mỗi lần duyệt, ta trừ phần tử đầu tiên của đoạn con cũ và cộng phần tử mới vào cuối đoạn con.
7. Mã Python tối ưu hóa:
Python
def max_subarray_sum_optimized(n, k, arr):
current_sum = sum(arr[:k])
max_sum = current_sum
for i in range(k, n):
current_sum = current_sum - arr[i - k] + arr[i]
max_sum = max(max_sum, current_sum)
return max_sum
n, k = map(int, input().split())
arr = list(map(int, input().split()))
print(max_subarray_sum_optimized(n, k, arr))
Nếu bạn muốn hỏi bài tập
Các câu hỏi của bạn luôn được giải đáp dưới 10 phút
CÂU HỎI LIÊN QUAN
Top thành viên trả lời