查找使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
以上是 查找使C ++中的数组漂亮所需的最少操作 的全部内容, 来源链接: utcz.com/z/313892.html