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

เพิ่มผลรวมของอาร์เรย์ย่อยสูงสุดหลังจากลบองค์ประกอบใน C++ . ไม่เกินหนึ่งรายการ


คำชี้แจงปัญหา

รับอาร์เรย์ arr[] ของจำนวนเต็ม N ภารกิจคือการค้นหาผลรวมของอาร์เรย์ย่อยสูงสุดก่อน จากนั้นจึงลบองค์ประกอบออกจากอาร์เรย์ย่อยไม่เกินหนึ่งรายการ นำองค์ประกอบออกไม่เกินองค์ประกอบเดียวเพื่อให้ผลรวมสูงสุดหลังการนำออกสูงสุด

หากอาร์เรย์อินพุตที่กำหนดคือ {1, 2, 3, -2, 3} ผลรวมของอาร์เรย์ย่อยสูงสุดคือ {2, 3, -2, 3} จากนั้นเราสามารถลบ -2 ได้ หลังจากลบอาร์เรย์ที่เหลือจะกลายเป็น−

{1, 2, 3, 3} โดยมีผลรวม 9 ซึ่งเป็นค่าสูงสุด

อัลกอริทึม

<ก่อน>1. ใช้อัลกอริทึมของ Kadane เพื่อค้นหาผลรวมของอาร์เรย์ย่อยสูงสุด2 เมื่อพบผลรวมแล้ว ให้ใช้อัลกอริทึมของ Kadane อีกครั้งเพื่อค้นหาผลรวมสูงสุดอีกครั้งโดยมีการเปลี่ยนแปลงเล็กน้อย)

ตัวอย่าง

#include ใช้เนมสเปซ std;int getMaxSubarraySum(int *arr, int n){ int max =INT_MIN; int ปัจจุบันสูงสุด =0; สำหรับ (int i =0; i