执行给定操作后值为 1 的索引数量


我们的目标是通过确定连续操作后值为 1 的索引数量来成功应对提出的问题。我们计划通过利用 C++ 作为我们首选的编程语言,以顺序和有条理的方式执行每个操作来完成此任务。

然而,为了实现永久性解决方案,我们必须制定一个有效且编码适当的算法蓝图。

语法

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

// Syntax for the method used in the following codes
int countIndicesWithOne(const vector& nums) {
   // Implementation of the method
}

算法

为了解决这个问题,我们将遵循一个分步算法。算法方法将帮助我们系统地执行所需的操作并计算值为 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,然后在出现此类情况时相应地增加 count。在检查我们在方法一中最初声明的数组中包含的所有单个元素后,我们将满足我们标准的每个实例汇总到“count”中,最终在完成时返回,同时为解决此类问题提供了一种简单而可靠的方法,同时降低了复杂性;在尝试开发想法时非常理想。

方法 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

解释

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

结论

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

更新于: 2023-07-25

73 次查看

开启你的 职业生涯

通过完成课程获得认证

开始
广告