मान लीजिए, हमारे पास N तत्वों का एक सरणी है। ये तत्व या तो 0 या 1 हैं। 0 की स्थिति ढूंढें जिसे 1 से बदलकर 1s का सबसे लंबा सन्निकट अनुक्रम प्राप्त किया जा सके। मान लीजिए सरणी arr = [1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1] की तरह है, आउटपुट सूचकांक 9 है। सूचकांक 9 पर 0 को 1 से बदलने से 1s का अधिकतम सन्निकट अनुक्रम होता है।
हमें तीन सूचकांकों को ट्रैक करना होगा। वर्तमान सूचकांक (curr), पिछला शून्य सूचकांक (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