按顺序执行给定操作后,值为 1 的索引数

c++server side programmingprogramming

我们的目标是通过确定连续操作后值为 1 的索引数来成功解决所提出的问题。我们计划通过使用 C++ 作为我们的首选编程语言,按顺序、有条不紊地执行每个操作来完成此任务。

但是,要实现永久解决方案,我们必须制定一个有效的算法蓝图并进行适当编码。

语法

为了更好地为算法做好准备。建议熟悉编码语法。接下来的代码片段将使用如下所示的特定方法 -

// 以下代码中使用的方法的语法
int countIndicesWithOne(const vector& nums) {
    // 方法的实现
}

算法

为了解决这个问题,我们将遵循一步一步的算法。算法方法将帮助我们系统地执行所需的操作并计算值为 1 的索引。以下步骤概述了算法 -

  • 初始化一个变量,我们称之为 count,以跟踪值为 1 的索引的数量。

  • 遍历给定的数组 nums。

  • 对于 nums 中的每个元素,执行以下操作 -

  • 如果元素等于 1,则将 count 变量增加 1。

  • 遍历所有元素后返回 count 的值。

  • 有了定义的算法,现在让我们回顾两种不同的方法来熟练地解决手头的问题。

方法

现在,让我们讨论两种不同的方法方法 −

方法 1:线性扫描

为了计算数组中有多少个索引包含值 1,我们将使用基本的线性扫描过程。通过系统地遍历所有索引,并精确定位那些仅包含一个存储"1"的元素的索引,可以统计出准确的最终计数。下面提供的部分概述了此解决方案的一部分 −

示例

#include <iostream>
#include <vector>

using namespace std;

int countIndicesWithOne(const vector<int>& nums) {
   int count = 0;
   for (int num : nums) {
      if (num == 1) {
         count++;
      }
   }
   return count;
}

int main() {
vector<int> nums = {1, 0, 1, 1, 0, 1};
int result = countIndicesWithOne(nums);
cout << "Count of indices with value 1: " << result << endl;
return 0;
}

输出

Count of indices with value 1: 4

说明

对数组中值为 1 的索引进行计数的初始方法要求采用线性扫描方法。该过程从启动"count"开始,它在整个代码中充当计数器变量。接下来,通过 for 循环构造开始对数组中包含的每个元素进行迭代。对于在此探索阶段遇到的每个元素,我们先测试其值是否等于 1,然后每当出现这种情况时,相应地增加计数。在检查方法 1 中最初声明的数组中的所有单个元素之后,我们将满足我们标准的每个实例加到"计数"中,最终在完成时返回,同时提供一种简单但合理的方法来处理此类问题并降低复杂性;非常适合尝试开发理念。

方法 2:位操作

计算索引中 1 的流行率的有效方法是利用各种位操作方法,这有助于我们快速而系统地跟踪。在同时管理多个整数时,使用这种特定技术非常有用。查看以下示例代码,旨在演示我们如何使用我们的创新方法将它们组合在一起 -

示例

#include <iostream>
#include <vector>

using namespace std;

int countIndicesWithOne(const vector<int>& nums) {
   int count = 0;
   for (int num : nums) {
      count += __builtin_popcount(num);
   }
   return count;
}

int main() {
    vector<int> nums = {1, 0, 1, 1, 0, 1};
    int result = countIndicesWithOne(nums);
    cout << "Count of indices with value 1: " << result << endl;
    return 0;
}

输出

Count of indices with value 1: 4

说明

我们的第二种方法使用位操作技术来成功计算输入数组中有多少个索引的值等于一。这是通过初始化一个名为"count"的变量来完成的,该变量的目的是跟踪有多少个值被算作具有等于一的值。与我们的第一种方法类似,我们使用 for 循环遍历数组中的所有元素。我们采用一种高效的方法,使用"__builtin_popcount"而不是直接条件检查"if (value==1)",通过仅计算该元素下二进制表示中的设置位或 1,并将其迭代地添加到我们之前使用的初始化变量"count"中。一旦在当前循环中检查了所有元素,我们就会返回其最终索引"1"值的位置,以"counts"表示。总之,我们现在可以得出结论,这种方法在处理数组时为我们提供了更好的优化解决方案,因为它也利用了按位运算。

结论

我们使用既定程序进行了全面调查,以解决计算值为 1 的 C++ 索引数量的艰巨任务。我们熟练地介绍了两种高效方法 - 线性扫描和位操作 - 每种策略都配有功能代码,可以轻松集成到您的项目中。我们的方法需要定义布局这些方法所需的语法和算法。通过利用这些技术,您将能够准确地统计必要的指标,并在多种情况下扩展这些知识。


相关文章