使用 C++ 重新排列数组以最大化 i*arr[i]

在本文中,我们将讨论重新排列给定的 n 个数字数组的问题。基本上,我们必须从数组中选择元素。为了选择每个元素,我们会得到一些点,这些点将通过当前元素的值 * 在当前元素之前选择的元素数量来评估。您应该选择元素以获得最高分。例如 -

Input : arr[ ] = { 3, 1, 5, 6, 3 }

If we select the elements in the way it is given, our points will be

   = 3 * 0 + 1 * 1 + 5 * 2 + 6 * 3 + 3 * 4

   = 41

To maximize the points we have to select the elements in order { 1, 3, 3, 5, 6 }

   = 1 * 0 + 3 * 1 + 3 * 2 + 5 * 3 + 6 * 4

   = 48(maximum)

Output : 48

Input : arr[ ] = { 2, 4, 7, 1, 8 }

Output : 63

寻找解决方案的方法

看这个例子,我们得到了最大点,我们需要从最小到最大选择元素。寻找解决方案的方法是,

  • 按升序对给定数组进行排序。

  • 从索引 0 开始选取元素到结尾。

  • 计算您从选择每个元素中获得的分数。

示例

#include <bits/stdc++.h>

#include <iostream>

using namespace std;

int main () {

   int arr[] = { 2, 4, 7, 1, 8 };

   int n = sizeof (arr) / sizeof (arr[0]);

   // 对数组进行排序

   sort (arr, arr + n);

   int points = 0;

   // 遍历数组并计算点

   for (int i = 0; i < n; i++) {

      points += arr[i] * i;

   }

   cout << "最高分: " << points;

   return 0;

}

输出结果
最高分: 63

上面代码的解释

这段 C++ 代码很容易理解。首先我们对数组进行排序,然后使用 for 循环遍历数组并计算通过从头到尾选择每个元素所获得的点数。

结论

在本文中,我们讨论了在数组中选择元素以获得最大点的问题,其中点由 i * arr[i] 计算。我们采用贪心的方法来解决这个问题并获得最高分。也讨论 C++ 代码来做同样的事情,我们可以用任何其他语言编写这些代码,比如 C、java、Python 等。希望你觉得这篇文章有帮助。

以上是 使用 C++ 重新排列数组以最大化 i*arr[i] 的全部内容, 来源链接: utcz.com/z/343734.html

回到顶部