Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

อาร์เรย์ย่อยผลรวมที่ใหญ่ที่สุดที่มีตัวเลขอย่างน้อย k ใน C++


มาดูขั้นตอนในการจบโปรแกรมกัน

  • เริ่มต้นอาร์เรย์
  • เริ่มต้นอาร์เรย์ max_sum ของขนาด n.
  • ค้นหาผลรวมสูงสุดของทุกดัชนีและเก็บไว้ในอาร์เรย์ max_sum
  • คำนวณผลรวมขององค์ประกอบทั้งหมดและเก็บไว้ในผลรวมตัวแปร
  • เขียนลูปที่วนซ้ำจาก i =k ถึง n.
    • เพิ่ม a[i] - a[i - k] ให้กับผลรวม
    • อัปเดตผลลัพธ์ด้วยผลลัพธ์สูงสุด ผลรวม
    • อัปเดตผลลัพธ์ด้วยผลลัพธ์สูงสุด sum + max_sum[i - k].

ตัวอย่าง

มาดูโค้ดกันเลย

#include<bits/stdc++.h>
using namespace std;
int getMaxSum(int a[], int n, int k) {
   int maxSum[n];
   maxSum[0] = a[0];
   int currentMax = a[0];
   for (int i = 1; i < n; i++) {
      currentMax = max(a[i], currentMax+a[i]);
      maxSum[i] = currentMax;
   }
   int sum = 0;
   for (int i = 0; i < k; i++) {
      sum += a[i];
   }
   int result = sum;
   for (int i = k; i < n; i++) {
      sum += a[i] - a[i-k];
      result = max(result, sum);
      result = max(result, sum + maxSum[i-k]);
   }
   return result;
}
int main() {
   int a[] = {5, 3, 7, -5, 6, 2, 1};
   int k = 6;
   cout << getMaxSum(a, 7, k) << endl;
   return 0;
}

ผลลัพธ์

หากคุณเรียกใช้โค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้

19

บทสรุป

หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น