คำชี้แจงปัญหา
จากอาร์เรย์ไบนารี ให้ค้นหาจำนวนศูนย์สูงสุดในอาร์เรย์โดยอนุญาตให้อาร์เรย์ย่อยพลิกเพียงครั้งเดียว การดำเนินการพลิกเปลี่ยนทั้งหมด 0s เป็น 1s และ 1s เป็น 0s
ถ้า arr1={1, 1, 0, 0, 0, 0, 0}
หากเราพลิก 2 1 เป็น 0 แรก เราจะได้ subarray ขนาด 7 ดังนี้ −
{0, 0, 0, 0, 0, 0, 0}
อัลกอริทึม
<ก่อน>1. พิจารณาอาร์เรย์ย่อยทั้งหมดและค้นหาอาร์เรย์ย่อยที่มีค่าสูงสุด (นับ 1 วินาที) – (จำนวน 0 วินาที)2 ถือว่าค่านี้เป็น maxDiff ในที่สุดก็คืนค่าจำนวนศูนย์ในอาร์เรย์ดั้งเดิม + maxDiffตัวอย่าง
#includeใช้เนมสเปซ std;int getMaxSubArray(int *arr, int n){ int maxDiff =0; int zeroCnt =0; สำหรับ (int i =0; i ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ดังต่อไปนี้−
ขนาดอาร์เรย์ย่อยสูงสุด =7