0

0

使用C++编写,将以下内容翻译为中文:在删除数组的一部分后,计算K个数组的最小公共和

王林

王林

发布时间:2023-09-12 11:41:07

|

948人浏览过

|

来源于tutorialspoint

转载

使用c++编写,将以下内容翻译为中文:在删除数组的一部分后,计算k个数组的最小公共和

在使用C++数组时,我们有时需要计算多个数组中的最小公共和,同时删除它们后缀的一部分。在本文中,我们将使用C++探讨这个问题的有效解决方案。

语法

让我们首先分析我们选择的方法的语法,然后再继续在我们的代码中实现它 -

int findMinimumCommonSum(vector>& arrays, int suffixToRemove);

算法

这里是解决删除部分数组后缀后求最小公和问题的分步算法 -

  • 首先定义函数findMinimumCommonSum,该函数接受两个参数 - arrays,一个表示数组的二维向量,和suffixToRemove,一个表示要从每个数组的后缀中删除的元素数量的整数。

    立即学习C++免费学习笔记(深入)”;

  • 初始化一个变量minimumSum来存储最小公共和,并将其初始值设置为一个较大的值。

  • 迭代遍历数组向量中的每个数组。

  • 确定当前数组的大小。

  • 为了避免以空数组结束,应考虑跳过 suffixToRemove 超过或等于当前数组总大小的迭代。在这种情况下删除所有字符不会产生任何有意义的输出。

  • 计算从索引 0 到 size - suffixToRemove - 1 的数组元素之和,并将其存储在变量 currentSum 中。

  • 如果currentSum小于minimumSum,则使用currentSum的值更新minimumSum。

  • 在遍历所有数组后,minimumSum将包含在删除指定后缀后数组中的最小公共和。

方法 1:暴力破解

在这种方法中,我们将生成要删除的后缀的所有可能组合,并计算每个组合的总和。所有组合中最小的和就是最小公和。

示例

#include 
#include 
#include 
#include 

using namespace std;

int findMinimumCommonSum(vector>& arrays, int suffixToRemove) {
   int minimumSum = INT_MAX;
   int k = arrays.size();

   for (int i = 0; i < k; i++) {
      int size = arrays[i].size();

      if (suffixToRemove >= size)
         continue;

      vector suffix(size, false);
      fill(suffix.begin() + size - suffixToRemove, suffix.end(), true);

      do {
         int currentSum = 0;
         
         for (int j = 0; j < k; j++) {
            int arraySum = 0;
            for (int l = 0; l < size; l++) {
               if (!suffix[l])
                  arraySum += arrays[j][l];
            }
            currentSum += arraySum;
         }

         if (currentSum < minimumSum)
            minimumSum = currentSum;

      } while (next_permutation(suffix.begin(), suffix.end()));
   }

   return minimumSum;
}

int main() {
   vector> arrays = {{1, 2, 3},
                                 {4, 5, 6},
                                 {7, 8, 9}};

   int suffixToRemove = 1;

   int minimumCommonSum = findMinimumCommonSum(arrays, suffixToRemove);

   cout << "Minimum Common Sum: " << minimumCommonSum << endl;

   return 0;
}

输出

Minimum Common Sum: 27

说明

在暴力法中,我们的目标是找到在从它们的后缀中移除指定数量的元素后,多个数组之间的最小公共和。该方法涉及生成所有可能的要移除的后缀的组合,并计算每个组合的和。所有组合中的最小和将是最小公共和。

为了实现这种方法,我们定义了一个名为 findMinimumCommonSum 的函数,它接受两个参数:数组(表示数组的 2D 向量)和 suffixToRemove(表示要从每个数组后缀中删除的元素数量的整数)。

Revid AI
Revid AI

AI短视频生成平台

下载

在函数内部,我们初始化一个变量minimumSum来存储最小的公共和,初始值设置为int类型的最大可能值。然后我们遍历数组向量中的每个数组。对于每个数组,我们确定其大小并检查suffixToRemove值是否小于大小。

如果条件满足,我们使用布尔向量生成所有可能的后缀组合。我们将最后suffixToRemove个元素填充为true,其余元素填充为false。对于每个数组,我们确定其大小,并检查suffixToRemove值是否小于大小。

我们通过计算与后缀向量中的假指示符对应的数组值的总和来进行处理,对于每个组合。我们针对所有数组重复此过程,相应地更新currentSum。

最后,我们将currentSum与minimumSum进行比较,如果currentSum较小,则更新minimumSum。在遍历所有数组和组合之后,minimumSum将包含在删除指定后缀后的最小公共和。

方法2:高效排序

在这种方法中,我们将按非递减顺序对数组进行排序,并计算每个数组的前size - suffixToRemove个元素的总和。所有数组中的最小总和将是最小公共总和。

示例

#include 
#include 
#include 
#include 

using namespace std;

int findMinimumCommonSum(vector>& arrays, int suffixToRemove) {
   int minimumSum = INT_MAX;
   int k = arrays.size();

   for (int i = 0; i < k; i++) {
      int size = arrays[i].size();

      if (suffixToRemove >= size)
         continue;

      sort(arrays[i].begin(), arrays[i].end());

      int currentSum = 0;
      for (int j = 0; j < size - suffixToRemove; j++)
         currentSum += arrays[i][j];

      if (currentSum < minimumSum)
         minimumSum = currentSum;
   }

   return minimumSum;
}

int main() {
   vector> arrays = {{1, 2, 3},
                                 {4, 5, 6},
                                 {7, 8, 9}};

   int suffixToRemove = 1;

   int minimumCommonSum = findMinimumCommonSum(arrays, suffixToRemove);

   cout << "Minimum Common Sum: " << minimumCommonSum << endl;
   
   return 0;
}

输出

Minimum Common Sum: 3

说明

在高效排序方法中,我们的目标是在从后缀中删除指定数量的元素后找到多个数组之间的最小公和。这种方法利用了这样一个事实:对数组进行排序可以简化最小和的计算。

为了实现这种方法,我们定义了一个名为 findMinimumCommonSum 的函数,它接受两个参数:数组(表示数组的 2D 向量)和 suffixToRemove(表示要从每个数组后缀中删除的元素数量的整数)。

在函数内部,我们初始化一个变量minimumSum来存储最小的公共和,初始值设置为int类型的最大可能值。然后我们遍历数组向量中的每个数组。对于每个数组,我们确定其大小并检查suffixToRemove值是否小于大小。

当满足了这个先决条件后,我们的下一步之一将是按升序排列我们数组中的所有个别组件;这种方法主要有助于确保较小的对象位于其初始部分,以提高排列和可读性。

接下来,我们计算排序数组中前 size - suffixToRemove 个元素的和。这对应于从后缀中删除指定数量的元素。我们相应地更新 currentSum。

最后,我们将currentSum与minimumSum进行比较,如果currentSum较小,则更新minimumSum。在遍历所有数组之后,minimumSum将包含在删除指定后缀后的最小公共和。

这种方法非常高效,因为它不需要像暴力方法那样生成和迭代所有可能的组合。相反,它利用排序属性来简化最小和的计算,从而提高性能。

结论

在本文中,我们探讨了一种在C++中找到K个数组中最小公共和的高效方法,该方法在删除它们的后缀的一部分后进行。我们讨论了两种方法-暴力法和高效排序法。暴力法涉及生成所有后缀的组合,而高效排序法对数组进行排序并计算前几个元素的和。根据数组的大小和要删除的后缀元素的数量,高效排序法通常更高效。通过在C++程序中实现这些方法,您可以轻松地从多个数组中找到最小的公共和,并且能够高效地处理后缀的删除。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

312

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

522

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

48

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

190

2025.08.29

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

387

2023.08.14

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

4

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 5.7万人学习

C 教程
C 教程

共75课时 | 3.8万人学习

C++教程
C++教程

共115课时 | 10.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号