Giúp mình với!Giúp mình với!python nha

rotate image
ADS
thumb up 0
thumb down
Trả lời câu hỏi của hahahihi

Làm sao để có câu trả lời hay nhất?

  • Luôn có GIẢI THÍCH các bước giải
  • Không copy câu trả lời của Timi
  • Không sao chép trên mạng
  • Không spam câu trả lời để nhận điểm
  • Spam sẽ bị khóa tài khoản
ADS
CÂU TRẢ LỜI
avatar
Timi

29/03/2025

Trợ lý học tập AI - Câu trả lời này chỉ mang tính tham khảo
Để giải bài toán này, bạn có thể sử dụng phương pháp "trượt cửa sổ" (sliding window). Ý tưởng là tính tổng của k phần tử đầu tiên, sau đó di chuyển cửa sổ một vị trí và cập nhật tổng bằng cách trừ đi phần tử ra khỏi cửa sổ và cộng thêm phần tử mới vào cửa sổ. Dưới đây là mã Python để thực hiện điều này: ```python def max_sum_subarray(n, k, a): # Tính tổng của k phần tử đầu tiên current_sum = sum(a[:k]) max_sum = current_sum # Trượt cửa sổ qua dãy a for i in range(k, n): current_sum += a[i] - a[i - k] # Cập nhật tổng max_sum = max(max_sum, current_sum) # Cập nhật tổng lớn nhất return max_sum # Đọc dữ liệu đầu vào n, k = map(int, input().split()) a = list(map(int, input().split())) # Tính và in ra kết quả result = max_sum_subarray(n, k, a) print(result) ``` ### Giải thích mã: 1. Hàm `max_sum_subarray` nhận vào số lượng phần tử `n`, kích thước đoạn `k` và dãy số `a`. 2. Tính tổng của k phần tử đầu tiên và gán cho `current_sum` và `max_sum`. 3. Sử dụng vòng lặp để trượt cửa sổ từ phần tử thứ k đến phần tử cuối cùng của dãy: - Cập nhật `current_sum` bằng cách cộng phần tử mới và trừ phần tử cũ. - Cập nhật `max_sum` nếu `current_sum` lớn hơn `max_sum` hiện tại. 4. Cuối cùng, in ra tổng lớn nhất tìm được. Bạn có thể chạy đoạn mã này với dữ liệu đầu vào tương ứng để tìm tổng lớn nhất của đoạn k phần tử liên tiếp trong dãy.
Hãy giúp mọi người biết câu trả lời này thế nào?
0/5 (0 đánh giá)
thumb up 0
thumb down
1 bình luận
Bình luận
avatar
level icon

hahahihi

29/03/2025

Timi sum(a[:k]) mình chx học


avatar
level icon
Tkhang

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))

Hãy giúp mọi người biết câu trả lời này thế nào?
0/5 (0 đánh giá)
thumb up 0
thumb down
0 bình luận
Bình luận
ADS

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

Ảnh ads

CÂU HỎI LIÊN QUAN

logo footer
FQA.vn Nền tảng kết nối cộng đồng hỗ trợ giải bài tập học sinh trong khối K12. Sản phẩm được phát triển bởi CÔNG TY TNHH CÔNG NGHỆ GIA ĐÌNH (FTECH CO., LTD)
Điện thoại: 1900636019 Email: info@fqa.vn
Location Địa chỉ: Số 21 Ngõ Giếng, Phố Đông Các, Phường Ô Chợ Dừa, Quận Đống Đa, Thành phố Hà Nội, Việt Nam.
Tải ứng dụng FQA
app store ch play
Người chịu trách nhiệm quản lý nội dung: Nguyễn Tuấn Quang Giấy phép thiết lập MXH số 07/GP-BTTTT do Bộ Thông tin và Truyền thông cấp ngày 05/01/2024
Copyright © 2023 fqa.vn All Rights Reserved
gift-box
survey
survey
Đặt câu hỏi