在 C++ 中查詢排序後的 0 和 1 陣列中第一個 1 的索引


在這個問題中,我們得到一個由布林值(只有 0 和 1)組成的排序陣列 bin[]。我們的任務是查詢排序後的 0 和 1 陣列中第一個 1 的索引

讓我們來看一個例子來理解這個問題:

Input : bin[] = {0, 0, 0, 1, 1}
Output : 3

解釋

First 1 of the binary array is encountered at index 3.

解決方案方法

為了解決這個問題,我們基本上需要找到陣列中第一個 1 的索引。為此,我們可以使用搜尋技術

一種方法可以使用線性搜尋,我們將從索引 0 遍歷到陣列的末尾。並返回陣列中第一個 1 的索引,否則列印 -1。

示例

程式演示了我們解決方案的工作原理

#include <iostream>
using namespace std;
double find1stOneInArray(int bin[], int n) {
   for (int i = 0; i < n; i++)
      if (bin[i] == 1)
         return i;
      return -1;
}
int main() {
   int bin[] = { 0, 0, 0, 1, 1, 1 };
   int n = sizeof(bin) / sizeof(bin[0]);
      cout<<"The index of 1st occurrence of 1 in array is "<<find1stOneInArray(bin,n);
      return 0;
}

輸出

The index of 1st occurrence of 1 in array is 3

另一種可以使用的搜尋技術二分查詢,因為陣列已排序。

示例

程式演示了我們解決方案的工作原理

#include <iostream>
using namespace std;
double find1stOneInArray(int bin[], int n) {
   int low = 0;
   int high = (n - 1);
   int mid;
   while (low <= high) {
      mid = (low + high) / 2;
      if (bin[mid] == 1 && (mid == 0 || bin[mid - 1] == 0))
         return mid;
      else if (bin[mid] == 1)
         high = mid - 1;
      else
         low = mid + 1;
   }
   return -1;
}
int main() {
   int bin[] = { 0, 0, 0, 1, 1, 1, 1 };
   int n = sizeof(bin) / sizeof(bin[0]);
      cout<<"The index of 1st occurrence of 1 in array is "<<find1stOneInArray(bin,n);
   return 0;
}

輸出

The index of 1st occurrence of 1 in array is 3

更新於:2022-01-28

447 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.