【问题标题】:Find the sum of the max values from all subarrays求所有子数组的最大值之和
【发布时间】:2017-09-26 20:16:56
【问题描述】:

问题是 - 从所有子数组中找到所有最大值的总和。例如,我有数组 {2, 8, 4, 3, 5},解将是 92。我所有的子数组都是:

{2},{8},{4},{3},{5},

{2,8},{8,4},{4,3},{3,5},

{2,8,4},{8,4,3},{4,3,5},

{2,8,4,3},{8,4,3,5},

{2,8,4,3,5}

所有子数组的最大值是:

2 - 8 - 4 - 3 - 5 -

8 - 8 - 4 - 5 -

8 - 8 - 5 -

8 - 8 -

8

你知道在线性时间复杂度上解决这个问题的方法吗?

【问题讨论】:

  • 是的,我们知道。但是你的尝试是什么?任何一段代码你都在纠结?
  • 问题是你是怎么解决的。
  • 好吧,我试图在 n^2 中解决这个问题,找到所有子数组并从每个子数组中获取最大值,但不幸的是,这里的关键是尝试在线性时间内解决这个问题
  • 对于给定的集合,我得到 192。你的意思是说 192 而不是 92?无论如何,我不知道解决方案,但一种方法是归纳地看待这个问题。从一组 1 个元素开始,无论是最大的还是最小的(我不知道哪种方式效果更好),然后一次添加一个更小或更大的元素,直到你得到整个集合。
  • 我投票结束这个问题,因为 StackOverflow 不是 HomeWorkSolutionFactory。 OP 没有提供他/她解决问题的尝试、他/她苦苦挣扎的实现或任何值得构建解决方案的想法。

标签: arrays subset


【解决方案1】:

它应该非常简单。见以下算法

sum = 0
max = 0
for every array 'arr' in the array of arrays
do
   for every element 'arri' in the array 'arr'
   do
      if arri >= max, max = arri
   end for
   max = 0
   sum = sum + max
end for

【讨论】:

  • 感谢您的回答,但不幸的是,我无法在 n^2 复杂度时间内解决此问题。我必须在线性时间内解决这个问题。
  • 这不是 n^2 复杂度。它只是n。
  • 但是从一个数组中获取所有子数组需要 n,并且从每个子数组中获取值需要其他 n,所以这是 n^2。在您的代码中,您有两个,这说明您正在 n^2 中尝试此操作。
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 2018-02-12
  • 2015-03-13
相关资源
最近更新 更多