在这个问题中,我们给了一个二进制数组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