使用 C++ 查找给定矩阵中唯一元素数量最多的行

c++server side programmingprogramming

程序员经常会遇到必须检查和管理矩阵或多维数组中保存的数据的情况。一个普遍的任务是识别矩阵中包含最大数量不平行组件的行,这对于涉及表格数据排序、图像处理和数据分析的任务非常有用。我们的文章探讨了如何使用 C++ 来实现这一目标。

语法

为了避免歧义和混淆,建议我们先检查所选方法,熟悉即将使用的代码中的语法。

int findRowWithHighestUniqueElements(const std::vector<std::vector<int>>& matrix)

这种方法需要采用由整数和向量组成的矢量化矩阵,并确定包含最多唯一元素的行的索引。如果多行具有可比计数,则此技术将选择第一个遇到的实例。

算法

要确定给定矩阵中哪一行具有最多唯一元素,我们建议执行以下算法程序 -

  • 初始化变量 maxCount 以跟踪找到的唯一元素的最大计数。

  • 初始化变量 rowIndex 以存储计数最高的行的索引。

  • 遍历矩阵中的每一行 -

  • 创建一个集合来存储当前行中遇到的唯一元素。

  • 为了准确捕获数据集中的所有元素,我们需要逐一检查给定行中包含的每个条目。如果元素当前不在我们建立的集合中。此时需要添加。

  • 如果集合的尺寸超过 maxCount,请确保正确调整 maxCount 和 rowIndex

  • 返回 rowIndex。

方法 1:使用集合

使用集合来监控各个行中包含的唯一元素是此方法中执行的策略。

示例

#include <iostream>
#include <vector>
#include <set>

int findRowWithHighestUniqueElements(const std::vector<std::vector<int>>& matrix) {
   int maxCount = 0;
   int rowIndex = -1;

   for (int i = 0; i < matrix.size(); ++i) {
      std::set<int> uniqueElements;
      for (int j = 0; j < matrix[i].size(); ++j) {
         uniqueElements.insert(matrix[i][j]);
      }
      if (uniqueElements.size() >= maxCount) {  // 修改条件以包括相等计数
         maxCount = uniqueElements.size();
         rowIndex = i;
      }
   }
   return rowIndex;
}

int main() {
   std::vector<std::vector<int>> matrix = {{1, 2, 3, 4},
                                          {4, 5, 6, 7},
                                          {1, 2, 3, 8},
                                          {9, 10, 11, 12},
                                          {13, 14, 15, 16}};  // 添加了具有独特元素的额外行

   int rowWithHighestUniqueElements = findRowWithHighestUniqueElements(matrix);
   std::cout << "唯一元素数量最多的行: " << rowWithHighestUniqueElements << std::endl;

   return 0;
}

输出

唯一元素数量最多的行: 4

解释

在确定给定矩阵的哪一行包含其中存在的唯一元素数量最多之前,必须初始化两个参数 - 一个表示迄今为止的最大计数(maxCount),另一个表示哪一行占据此位置(rowIndex)。有了这些基础知识,我们就可以开始迭代矩阵中找到的每一行。

每一行都要收集迄今为止在名为"uniqueElements"的空集中看到的不同值。然后,每个索引位置的内容将在插入时评估其唯一性,然后根据先前的存在进行存储或忽略。如果将新输入添加到我们日益完整的集合中,然后使其大小超出 maxCount 的现有值 - 需要更新 - getMax 和 rowIndex 都必须立即分配相应调整的值,以免歪曲最终输出。一旦成功遍历了所有必要的行,并且没有进行任何如上所述的更改,则结果正式准备就绪,并且可以返回 rowIndex 以获得正确的答案输出。

方法 2:使用映射

另一种方法是使用映射来记录每行中每个不同项目的出现次数。通过比较映射中保存的值来确定所有行中不同元素频率最高的行 -

示例

#include <iostream>
#include <vector>
#include <map>

int findRowWithHighestUniqueElements(const std::vector<std::vector<int>>& matrix) {
   int maxCount = 0;
   int rowIndex = -1;

   for (int i = 0; i < matrix.size(); ++i) {
      std::map<int, int> elementCount;
      for (int j = 0; j < matrix[i].size(); ++j) {
         elementCount[matrix[i][j]]++;
      }
      if (elementCount.size() >= maxCount) {  // 修改条件以包括相等计数
         maxCount = elementCount.size();
         rowIndex = i;
      }
   }

   return rowIndex;
}

int main() {
   std::vector<std::vector<int>> matrix = {{1, 2, 3, 4},
                                          {4, 5, 6, 7},
                                          {1, 2, 3, 8},
                                          {9, 10, 11, 12},
                                          {13, 14, 15, 16}};  // 添加了具有独特元素的额外行

   int rowWithHighestUniqueElements = findRowWithHighestUniqueElements(matrix);
   std::cout << "唯一元素数量最多的行: " << rowWithHighestUniqueElements << std::endl;

   return 0;
}

输出

唯一元素数量最多的行: 4

解释

我们的代码旨在确定哪个特定索引位置对应于矩阵行,这些行包含前所未有的唯一元素计数。我们可以通过启动两个关键变量跟踪器来实现这一点 - maxCount 和 rowIndex。这将使我们能够跟踪迄今为止遇到的唯一计数实例的最大数量,以及它们在矩阵中的相应行位置。在每次新的循环迭代开始时,都会创建一个空的"elementCount"映射来容纳该行中出现的每个唯一元素的计数。通过对单行数据集中的每个元素进行检查,我们可以迭代更新"elementCount"值,并在整个脚本逻辑流中继续动态记录制表。每当我们的映射达到超过当前 maxCount 值限制的大小计数(新的本地记录)时,我们都会相应地调整分配给 maxCoun 和 rowIndex 的值,以便在所有输入处理流程中记录保持最新。最终,我们通过返回更新的 rowIndex 作为最终输出数据结果来完成。

结论

本文通过示例代码和下面详述的解释,利用 C++ 编程语言探讨了两种确定所提供矩阵中稀有项目数量最多的行的方法。

第一种策略侧重于通过使用集合来抽查独家项目,而另一种方法中使用了映射,该方法计算了在我们的测试阶段发现的所有单个项目出现所需的频率。

这两种程序都根据我们设定的目标提供了有利的结果,即识别矩阵中的奇异行;尽管如此,在它们之间进行选择很大程度上取决于您的开发项目需要什么特定需求。

通过高度理解 C++ 中的语法结构,程序员可以根据其项目的规范形成独特的算法和方法。 演示的可执行代码示例是将这些想法集成到应用程序中的绝佳起点。

借助我们的各种技术,您可以自信地解决任何与矩阵相关的问题,这些问题涉及在 C++ 中使用矩阵,方法是应用我们经过验证的策略并使用正确的语法。


相关文章