当前位置: 首页 > 知识库问答 >
问题:

连续子集数组求和是一种特定的整数算法

云默
2023-03-14

问题是:

给出一个由n个整数组成的数组A、一个分离整数M和一个整数d。求a的一个连续子数组S,使子数组的大小小于或等于d,S中所有元素的和为M。返回a的索引,使左索引和右索引成为子数组S。所有的数字都是正的。

在这一点上我有80%的把握这是不可能的...我一直在看它,我想不出一个单一的方法来使这个工作,这可能是一个巨大的诡计问题吗?

共有1个答案

罗韬
2023-03-14

如果A中的整数>=0,这就相对容易了,因为您只需维护几个指针,这些指针定义了一个和接近M的区间,并沿着数组从右向左滑动。有没有可能你在问题中漏掉了一些类似这样的额外信息?

好的,这里有一些扩展。你有一个左指针和一个右指针。将右手指针从右向左移动,保持不变量,即左手指针距离右手指针不超过d,两个指针所包含的元素之和是最大可能的数字<=m。重复地将右手指针向左移动一步,并将左手指针向左移动,直到达到d的极限,或者将其进一步移动将产生一个和>m,每次移动指针都可以递增或递减,以保持两个指针所包含的和的运行总数。

因为数字>=0,每次你移动右手指针时,你会减少和,或者它保持不变,所以你总是想让左手指针保持不变,或者把它移到左边。因为数字>=0,你知道,如果有一个答案从右手指针开始,你会发现它在左手指针位置--任何没有延伸到左手指针的东西都太小,任何延伸到更远的东西都太大,除了在有零的情况下,你会找到一个解决方案,只是有其他解决方案。

每个指针只在一个方向上移动,所以指针移动的最大次数是O(n),每个指针移动的代价是固定的,所以复杂度是O(n)

 类似资料:
  • 我有一个数组[1,2,3],总和为4。所以所有的连续子数组都是 [1],[1,2][2,3] 和 [1,2,3]。因此,小于或等于总和的最大长度子数组为 [1,2],长度为 2。 我用下面的方法找到了所有的子数组,并检查了子数组的和,如下所示。但是这种方法不适用于负数。{1,2,1,1,3,-2,-3,7,9};答:7

  • 本文向大家介绍求一个数组中连续子向量的最大和相关面试题,主要包含被问及求一个数组中连续子向量的最大和时的应答技巧和注意事项,需要的朋友参考一下 考察点:数组    

  • 我是爪哇新手,正在练习。我正在写一个程序来查找给定整数数组中的所有连续子数组。为了简单起见,我从键盘插入输入(每个数字在新的行中),表示数组末尾的是一个负整数。 最后,我试着用这个方法找到连续整数的第一个序列,这不完全是我的目标,但我从更简单的事情开始,然后我会用这个方法找到所有的连续序列: 这两种方法都在同一个类中声明和实现。 问题是我输入的序列是我希望是打印的,但我得到的输出是。我尝试使用pr

  • NowCoder 题目描述 {6, -3, -2, 7, -15, 1, 2, 2},连续子数组的最大和为 8(从第 0 个开始,到第 3 个为止)。 解题思路 // java public int FindGreatestSumOfSubArray(int[] nums) { if (nums == null || nums.length == 0) return 0;

  • 今年Spring我为一家IT公司写了实习入学考试。下面描述了一个问题。我不能解决它,所以我需要帮助(目前我要通过新的测试,所以我需要分析我的错误)。我很乐意为你效劳。 输入:一个数组arr,N个整数,arr的N个长度,数字K(K 对于offset的所有容许值,求s_arr(offset)的最小元素 算法复杂度应小于O(n*k) 输出:所有对(偏移量,最小(s_arr(偏移量)) 我的微不足道的解决

  • 我正在寻找以下问题的答案。 给定一组整数(无重复项)和一个和,找出集合元素的所有可能组合,并求和。解的顺序并不重要(解{2,2,3}和{3,2,2}是相等的)。 请注意,最终组合不需要是集合,因为它可以包含重复。 示例:集合{2,3,5}和10 结果:{2, 2, 2, 2, 2},{2,2,3,3},{2,3,5},{5,5} 我已经研究过子集和问题以及硬币兑换问题,但不能使它们适应我的需要。我