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

เพิ่มจำนวน 0s ให้สูงสุดโดยพลิก subarray ใน C++


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

จากอาร์เรย์ไบนารี ให้ค้นหาจำนวนศูนย์สูงสุดในอาร์เรย์โดยอนุญาตให้อาร์เรย์ย่อยพลิกเพียงครั้งเดียว การดำเนินการพลิกเปลี่ยนทั้งหมด 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