สมมติว่าเรามีอาร์เรย์ขององค์ประกอบ N องค์ประกอบเหล่านี้เป็น 0 หรือ 1 ค้นหาตำแหน่งของ 0 ที่จะแทนที่ด้วย 1 เพื่อให้ได้ลำดับที่ต่อเนื่องกันที่ยาวที่สุดของ 1 วินาที สมมติว่าอาร์เรย์เป็นเหมือน arr =[1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1] ดัชนีเอาต์พุตคือ 9 การแทนที่ 0 ด้วย 1 ที่ดัชนี 9 ทำให้ ลำดับต่อเนื่องกันสูงสุดของ 1s
เราต้องติดตามสามดัชนี ดัชนีปัจจุบัน (สกุลเงิน) ดัชนีศูนย์ก่อนหน้า (pz) และดัชนีศูนย์ก่อนหน้า (ppz) ตอนนี้ให้สำรวจอาร์เรย์เมื่อองค์ประกอบอาร์เรย์เป็น 0 จากนั้นคำนวณความแตกต่างระหว่าง curr และ ppz หากความแตกต่างมากกว่าค่าสูงสุด ให้อัปเดตค่าสูงสุด ในที่สุดก็ส่งคืนดัชนีของ prev_zero โดยมีค่าความแตกต่างสูงสุด
ตัวอย่าง
#include<iostream> using namespace std; int findIndex(bool arr[], int n) { int count_max = 0; int index; int pz = -1; int ppz = -1; for (int curr=0; curr<n; curr++) { if (arr[curr] == 0) { if (curr - ppz > count_max){ count_max = curr - ppz; index = pz; } ppz = pz; pz = curr; } } if (n-ppz > count_max) index = pz; return index; } int main() { bool arr[] = {1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1}; int n = sizeof(arr)/sizeof(arr[0]); cout << "Index of 0 to be replaced is "<< findIndex(arr, n); }
ผลลัพธ์
Index of 0 to be replaced is 9