0

0

将以下内容翻译为中文:最大化从数组中选择的数字的和,使其变为空

WBOY

WBOY

发布时间:2023-08-29 11:25:14

|

1146人浏览过

|

来源于tutorialspoint

转载

将以下内容翻译为中文:最大化从数组中选择的数字的和,使其变为空

我们将得到一个数组,必须从中选择一个元素并将该元素添加到总和中。将该元素添加到总和中后,我们必须从数组中删除三个元素(如果存在当前数字、当前数字 -1 和当前数字 + 1)。通过此方法,我们将使数组为空并得到总和。最后,我们必须使总和最大。

Input: [ 1, 2, 3]
Output: 4 

说明

一开始,我们可以有 3 步,删除 1、2 或 3。

  • 让我们删除 1,然后我们必须删除 0、1 和 2(如果存在其中任何一个,则必须至少存在其中一个)。我们将得到总和等于 1,数组将只剩下 3。删除 3 后,我们将得到总和等于 4。

  • 让我们删除 2,然后我们必须删除 1、2 和 3,最终的总和将为 2。

  • 先删除 3,那么 sum 为 3,数组为 1。删除 1 后,sum 为 4。

Input: [ 1, 2, 2, 2, 3, 3]
Output: 8

我们可以删除前两个三,这将给我们 6,然后两个二将被删除。

之后我们将删除剩下的两个中的一个并得到 8 作为答案。

方法 1

在这种方法中,我们将首先获取数组中存在的最大元素,以获取数组中存在的元素的频率。

稍后我们将创建一个数组来存储给定数组中存在的元素的频率。

XFUN
XFUN

小方智能包装设计平台

下载

我们将从频率数组的最后一个元素开始遍历,因为我们必须从数组中删除当前的一个减号和一个加号元素,这将始终保存比其大一的数字,从而得到最大总和:结果。

示例

#include 
using namespace std;
int maxElement(int arr[], int n){
   int mx = arr[0]; // defining variable to store the maximum element
   for(int i=1; i0; i--){
      if(freq[i] > 0){
         ans += freq[i]*i;
         freq[i-1] -= freq[i];
      }
   }
   return ans;
}
int main(){
   int n; // number of elements in the given array 
   int arr[] = { 1, 2, 2, 2, 3, 3}; // given array
   n = sizeof(arr)/sizeof(arr[0]);
   // calling the function to get the answer 
   cout<<"The maximum sum we can get by deleting the elements is: "<

输出

The maximum sum we can get by deleting the elements is: 8

时间和空间复杂度

上述代码的时间复杂度为 O(N),其中 N 是给定数组中存在的最大元素。

上述代码的空间复杂度与时间复杂度相同,均为 O(N),因为我们创建了一个数组来存储元素的频率。

前面给出的方法有一个问题,如果最大元素非常大,则需要大量时间和空间来解决问题。为了解决这个问题,我们有下一个方法。

地图方法

在这种方法中,我们将创建映射来存储元素的频率而不是数组,想法是相同的。

示例

#include 
using namespace std;
int maxSum(int arr[], int n){
   // sorting the array to travers over the map from last 
   sort(arr,arr+n);
   // creating the map 
   unordered_mapmp;
   // getting the frequecny of the elements 
   for(int i=n-1; i>=0; i--){
      mp[arr[i]]++;
   }
   int ans = 0; // variable to store the answer 
   // traversing over the array 
   for(int i=n-1; i>=0; i--){
      if (mp.count(arr[i])) {
         ans += arr[i];
         mp[arr[i]]--;
         // if element frequency in map become zero
         // than remove that element
         if (mp[arr[i]] == 0){
            mp.erase(arr[i]);
         }
         if (mp.count(arr[i] - 1)){
            mp[arr[i] - 1]--;
            if (mp[arr[i] - 1] == 0){
               mp.erase(arr[i] - 1);
            }
         }
      }
   }
   return ans;
}
int main(){
   int n; // number of elements in the given array 
   int arr[] = { 1, 2, 2, 2, 3, 3}; // given array
   n = sizeof(arr)/sizeof(arr[0]);
   // calling the function to get the answer 
   cout<<"The maximum sum we can get by deleting the elements is: "<

输出

The maximum sum we can get by deleting the elements is: 8

时间和空间复杂度

上述代码的时间复杂度为 O(N),其中 N 是给定数组中存在的元素数量。

上述代码的空间复杂度与时间复杂度相同,均为 O(N),因为我们创建了一个映射来存储元素的频率。

结论

在本教程中,我们实现了一个 C++ 程序,用于最大化数组中所选数字的总和,使其为空。我们必须从中选择一个元素并将该元素添加到总和中。将该元素添加到总和中后,如果存在当前数、当前数-1和当前数+1,我们必须从数组中删除三个元素。我们已经实现了两种具有线性时间和空间复杂度的频率基础方法。 p>

相关专题

更多
菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

56

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

51

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

397

2026.01.21

妖精漫画入口地址合集
妖精漫画入口地址合集

本专题整合了妖精漫画入口地址合集,阅读专题下面的文章了解更多详细内容。

118

2026.01.21

java版本选择建议
java版本选择建议

本专题整合了java版本相关合集,阅读专题下面的文章了解更多详细内容。

3

2026.01.21

Java编译相关教程合集
Java编译相关教程合集

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

16

2026.01.21

C++多线程相关合集
C++多线程相关合集

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

11

2026.01.21

热门下载

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

精品课程

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

共48课时 | 7.6万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

Excel 教程
Excel 教程

共162课时 | 12.9万人学习

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

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