C++程序查找移除最大值后的数组


假设我们有一个包含n个元素的数组A和另一个值k。我们想要执行k次以下操作。一个操作如下:

  • 设d为数组的最大值

  • 对于从1到n的每个索引i,将A[i]替换为d - A[i]

我们需要找到最终序列。

问题类别

在数据结构中,数组是特定类型元素的有限集合。数组用于将相同类型的元素存储在连续的内存位置中。数组被分配一个特定的名称,并在各种编程语言中通过该名称进行引用。要访问数组的元素,需要索引。我们使用术语“name[i]”来访问数组“name”中位置“i”处的特定元素。各种数据结构,如堆栈、队列、堆、优先队列,都可以使用数组实现。数组上的操作包括插入、删除、更新、遍历、搜索和排序操作。请访问下面的链接以了解更多信息。

https://tutorialspoint.com/data_structures_algorithms/array_data_structure.htm

因此,如果我们问题的输入类似于A = [5, -1, 4, 2, 0];k = 19,则输出将为[0, 6, 1, 3, 5],因为d为5。

步骤

为了解决这个问题,我们将遵循以下步骤:

n := size of A
m := -inf
t := -inf
for initialize i := 0, when i < n, update (increase i by 1), do:
   m := maximum of m and A[i]
for initialize i := 0, when i < n, update (increase i by 1), do:
   A[i] := m - A[i]
   t := maximum of t and A[i]
if k mod 2 is same as 1, then:
   for initialize i := 0, when i < n, update (increase i by 1), do:
      print A[i]
   Otherwise
      for initialize i := 0, when i < n, update (increase i by 1), do:
         A[i] := t - A[i]
         print A[i]

示例

让我们看看以下实现以更好地理解:

#include <bits/stdc++.h>
using namespace std;
void solve(vector<int> A, int k){
   int n = A.size();
   int m = -999;
   int t = -999;
   for (int i = 0; i < n; i++)
      m = max(m, A[i]);
   for (int i = 0; i < n; i++)
      A[i] = m - A[i], t = max(t, A[i]);
   if (k % 2 == 1)
      for (int i = 0; i < n; i++)
         cout << A[i] << ", ";
   else
      for (int i = 0; i < n; i++)
         A[i] = t - A[i], cout << A[i] << ", ";
}
int main(){
   vector<int> A = { 5, -1, 4, 2, 0 };
   int k = 19;
   solve(A, k);
}

输入

{ 5, -1, 4, 2, 0 }, 19

输出

0, 6, 1, 3, 5,

更新于: 2022年4月8日

95次浏览

开启你的职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.