加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 最大连续子阵列(具有大多数元素)

发布时间:2020-12-16 07:35:18 所属栏目:百科 来源:网络整理
导读:给定一个自然数和另一个自然T的数组,如何找到小于或等于T的连续子阵列但该子阵列中的元素数量最大化? 例如,如果给定的数组是: {3,1,2,1}和T = 5.然后最大的重叠子阵列是{1,1},因为它将包含5个元素,并且总和等于5. 另一个例子:{10,3,6,7},T = 8.那么最大的
给定一个自然数和另一个自然T的数组,如何找到小于或等于T的连续子阵列但该子阵列中的元素数量最大化?

例如,如果给定的数组是:

{3,1,2,1}和T = 5.然后最大的重叠子阵列是{1,1},因为它将包含5个元素,并且总和等于5.

另一个例子:{10,3,6,7},T = 8.那么最大的连续子阵是${1,3} $

我可以用O(n ^ 2)操作来做.但是,我正在寻找这个问题的线性时间解决方案.有任何想法吗?

解决方法

应该可以用O(n)来做到这一点.我没试过这个,但看起来还不错:

int start = 0,end = 0;
int beststart = 0,bestend = 0;
int sum = array[0];

while (end + 1 < arraysize) {
  if (array[end + 1] + sum <= T)
    sum += array[end++];
  else
    sum -= array[start++];
  if ((end - start) > (bestend - beststart)) {
    beststart = start;
    bestend = end;
  }
}

因此,基本上,它沿着数组移动一个滑动窗口,并记录结束 – 开始最大的点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读