查找使C ++中的数组漂亮所需的最少操作

在这个问题中,我们给了一个二进制数组bin [],它包含n个二进制值,它们恰好是0和1。我们的任务是找到使Array美丽的数组所需的最小操作。

漂亮的数组是一种特殊类型的二进制数组,由交替的0和1组成。

问题描述-我们需要找到使数组美观所需的数字运算。操作包括以下步骤-

步骤1-将阵列切成两半。

步骤2-反转两个半部中的任何一个。

步骤3-加入然后减半。

我们将计算确保数组变成漂亮数组所需的操作数。

让我们举个例子来了解这个问题,

输入

bin[] = {1, 0, 1, 0, 0, 1}
输出结果
1

解释

我们将剪切数组,创建一个子数组bin [4,5],将其反转并重新加入。

解决方法

该问题的解决方案基于找到等于连续零个数的最小开关操作数。基本情况是-

如果数组的大小为1,则它是一个漂亮的数组。如果数组的大小是奇数,则它永远不可能是漂亮的数组。

对于所有偶数长度,我们将检查连续的零或一的总数,这将是要执行的操作数。

算法

初始化-zeroCount,oneCount,consZero = 0

步骤1-如果(n = 1),则返回0

步骤2-如果(n%2!= 0),则返回-1。

步骤3-循环i-> 0到n-1。

步骤3.1-如果bin [i] == bin [i + 1] == 0,请置零。

步骤4-如果bin [n-1] == bin [0] == 0,则为consZero ++。

步骤5-返回consZero。

该程序说明了我们解决方案的工作原理,

示例

#include <iostream>
using namespace std;
int minOperations(int bin[], int n) {
   if(n == 1)
      return 0;
   if(n%2 != 0)
      return -1;
      int consZero = 0;
   for (int i = 0; i < n; ++i) {
      if (i + 1 < n) {
         if (bin[i] == 0 && bin[i + 1] == 0)
            consZero++;
      }
   }
   if (bin[0] == bin[n - 1] && bin[0] == 0)
      consZero++;
      return consZero;
}
int main() {
   int bin[] = { 1, 0, 1, 0, 0, 1};
   int n = sizeof(bin) / sizeof(bin[0]);
   cout<<"使数组美观所需的最少操作是 "<<minOperations(bin, n);
   return 0;
}
输出结果
使数组美观所需的最少操作是 1