当前位置: 首页 > 编程笔记 >

在C ++中精确地进行k次更改后可获得的最大数组和

笪波鸿
2023-03-14
本文向大家介绍在C ++中精确地进行k次更改后可获得的最大数组和,包括了在C ++中精确地进行k次更改后可获得的最大数组和的使用技巧和注意事项,需要的朋友参考一下

我们给了一个带有正负整数的数组以及一个数字K。任务是在元素的K更改后找到该数组的最大和。单个更改操作在此将单个元素乘以-1。

使用的方法是将每个负数转换为正数。如果有N个负数,那么为此我们将对数组进行排序-

  • 如果N <K,则在执行N次运算后,每个元素都是正数,剩下的就是KN次运算

  • 现在,如果KN变为偶数,那么对于其余的KN操作,更改符号将无效,则不执行任何操作。

  • 如果KN为奇数,则对于其余的KN操作,请更改最小数的符号(它将变为负数),但总和将为最大。

    要么

    如果N> K,则更改K个负数的符号并添加数组。总和为最大。

输入项

Arr[]= { 0,-2,6,4,8,2,-3 } K=4

输出结果

Maximum array sum is : 25

说明-元素的4个变化是

1. 0,2,6,4,8,2,-3 -2 changed to 2
2. 0,2,6,4,8,2,3 -3 changed to 3
3. 0,-2,6,4,8,2,3 2 changed to -2
4. 0,2,6,4,8,2,3 -2 changed to 2

Maximum sum is 25

输入项

Arr[]= { -1,-2,-3,-4,-5,-6,-7 } K=4

输出结果

Maximum array sum is : 16

说明-元素的4个变化是

1. -1,-2,-3,-4,-5,-6,7 -7 changed to 7
2. -1,-2,-3,-4,-5,6,7 -6 changed to 6
3. -1,-2,-3,-4,5,6,7 -5 changed to 5
4. -1,-2,-3,4,5,6,7 -4 changed to 4
Maximum sum is 16

以下程序中使用的方法如下

  • 整数数组Arr []用于存储整数。

  • 整数“大小”存储数组的长度,并初始化K。

  • 函数returnSum(int arr [],int n,int k)将数组,数组的大小和k作为输入,并在精确地执行k次操作后返回其元素的最大和。

  • 首先,我们将使用sort(arr,arr + n)对数组进行排序

  • 现在,我们将对所有否定元素应用操作arr [i] *-1,直到到达最后一个索引或k变为0。

  • 如果k小于负数元素的数量,则上述步骤将更改k-ve个元素。

  • 如果k较大,则将检查k的剩余值是否为奇数或偶数。

  • 如果剩余的k是奇数,那么我们将通过应用arr [i] *-1一次来更改最小元素的值,其中至少找到arr [i]。(乘以-1的奇数倍等于一次)

  • 如果剩余k为偶数,则arr [i] *-1将无效。没做什么。

  • 计算整个数组的总和并返回结果。

示例

#include <bits/stdc++.h>
using namespace std;
int returnSum(int arr[], int n, int k){
   // Sort the array elements
   sort(arr, arr + n);
   // Change signs of the negative elements
   // starting from the smallest
   //this loop will change the sign of -ve elements
   //for each k one -ve element is turned positive
   for(i=0;i<n;i++)
      if(k>0 && arr[i]<0){
         arr[i]=arr[i]*-1;
   k--;
}
//if k is non zero and odd change sign of minimum element
//once as it is same as changing its sign odd times
if (k % 2 == 1) {
   int min = arr[0];
   int pos=0; //index of minimum element
   for (i = 1; i < n; i++)
      if (arr[i]<min){
         min = arr[i];
         pos=i;
      }
      arr[pos] *= -1;
   }
   int sum = 0;
   for (int i = 0; i < n; i++)
      sum += arr[i];
   return sum;
}
int main(){
   int Arr[] = { -3, 4, -3, 6, 8 };
   int size =5;
   int K = 4;
   cout <<"Maximum array sum that can be obtained after exactly k changes"
   returnSum(Arr, size, K) << endl;
   return 0;
}

输出结果

Maximum array sum that can be obtained after exactly k changes : 24
 类似资料:
  • 我试图找到最大的双倍数组,但困难的部分是,你必须把数组分成两个切片,但在那之后,你需要计算2个子切片的最大值,并返回2个值中的最大值,这需要使用递归。 你能给我一个如何开始的建议吗。

  • 我最近接受了一次采访,被问到了这个问题。让我适当地解释一下问题: 给定一个数M(n位整数)和K个交换操作(一个交换操作可以交换2位),设计一个算法来得到最大可能的整数? 示例: M=132 K=1输出=312 M=132 K=2输出=321 M=7899 K=2输出=9987 我的解决方案(伪代码中的算法)。我使用max-heap在每个k操作中从n个数字中获得最大的数字,然后适当地交换它。 时间复

  • 问题内容: 这个问题已经在这里有了答案 : 有浮点任意精度吗? (5个答案) 4个月前关闭。 当我运行程序时,将返回: 我需要的是x2等于-1e-9。 问题似乎出在 因为它给出的结果是10,显然是因为4 (10 ^ -8)(10 ^ -8)几乎等于0,并且被python认为是0。 结果是: 任何帮助将不胜感激 问题答案: 使用十进制模块: 结果是

  • 我正在尝试创建一个程序,它将生成斐波那契序列中的数字,直到它找到序列中的1000位数字。我使用的代码运行良好并提供有效的输出,但是,我在检索每个数字的长度时遇到了麻烦;使用我已将转换为并使用方法获取长度,但是,我发现这并没有给出真正的长度,我看不出为什么。 有没有更好的方法来获取的长度?我已经读到了thBigInteger这个问题:在一个可伸缩的方法中计算小数位数 更新运行程序后输出的文本文本为:

  • 本文向大家介绍C ++中最小K总和最短的子数组,包括了C ++中最小K总和最短的子数组的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个数组A。我们必须找到A的最短,非空,连续子数组的长度,其总和至少为K。如果没有这样的子数组,则返回-1。 因此,如果输入类似于[5,3,-2,2,1]且k = 6,则输出将为2,如我们所见(5 + 3)> = 6 为了解决这个问题,我们将遵循以下步骤- n:

  • 本文向大家介绍在C ++中查找数组编号的乘积的最后k位,包括了在C ++中查找数组编号的乘积的最后k位的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个由n个元素组成的数组,称为A。我们还有另一个数字k。我们的任务是查找数组A中元素乘积的最后k位。假设A = [15、22、13、19、17],则乘积为1385670,最后k = 3位为670。 为了解决这个问题,我们将模10 k下的数字相乘。