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

具有给定和的子阵列

阎德义
2023-03-14

给定一个大小为N的非负整数的未排序数组,找到一个与给定数S相加的连续子数组。

输入:
输入的第一行包含一个整数T,表示测试用例的数量。接下来是T测试用例。每个测试用例由两行组成。每个测试用例的第一行是N和S,其中N是数组的大小,S是和。每个测试用例的第二行包含N个表示数组元素的空格分隔整数。

输出:
对于每个测试用例,在新行中,如果sum等于子数组,则从左侧打印第一个出现子数组的开始和结束位置(1索引),否则打印-1。

约束条件:

1 <= T <= 100
1 <= N <= 107
1 <= Ai <= 1010

示例:
输入:

2
5 12
1 2 3 7 5
10 15
1 2 3 4 5 6 7 8 9 10

输出:

2 4
1 5

我的代码:

#include <iostream>

using namespace std;

int main() {
    int t, n, s, a[1000], result[1000];
    cin >> t;
    for (int i = 0; i < t; i++) {
        result[i * 2] = -1;
        cin >> n >> s;
        for (int j = 0; j < n; j++) {
            cin >> a[j];
        }
        int flag = 0;
        for (int j = 0; j < n; j++) {
            if (flag == 0) {
                int sum = 0;
                for (int k = j; k < n && sum < s; k++) {
                    sum += a[k];
                    if (sum == s) {
                        result[i * 2] = j + 1;
                        result[(i * 2) + 1] = k + 1;
                        flag = 1;
                        break;
                    }
                }
            }
        }
    }
    for (int i = 0; i < t * 2; i += 2) {
        if (result[i] != -1) {
            cout << result[i] << " " << result[i + 1] << endl;
        } else {
            cout << result[i];
        }
    }
}

结果:
错误答案。!!!错误答案

对于多个测试用例(TCs),您的代码可能无法正常工作。

代码失败的第一个测试用例:

输入:

4 225
9 45 10 190

其正确输出为:

-1

您的代码输出为:

-1-1-1-138 42

共有1个答案

骆文华
2023-03-14

我刚刚发现了这个:https://www.youtube.com/watch?v=G0ocgTgW464但是我相信时间复杂度是O(n*log(n)),因为map::find是O(log(n))

 类似资料:
  • 问题陈述如下: 当帖子说解决方案对负数不起作用时,它指的是哪些输入情况?

  • 问题内容: 我正在尝试编写一种算法,用于在给定的子矩阵中查找子矩阵。为了解决这个问题,我编写了以下代码: 这段代码可以正常工作,但是我不确定这是问题的确切解决方案还是可以解决。请提供您的专家意见。提前致谢。 问题答案: 该算法对4×4矩阵和2×2子矩阵进行了硬编码。否则,它看起来像蛮力算法。 我会这样表示: 如果您想要更有效的方法,建议您将它们压扁,如下所示: 并在此序列中搜索以下模式: 使用标准

  • 我知道一个O(n2)soln,它能以更好的方式实现吗,因为数组中元素的数量限制非常大

  • 我正在练习一些动态规划问题,并试图解决用给定的和打印所有子集的问题。例如:对于和,我应该得到以下结果: 我在不使用表的情况下得到了所需的结果,我使用表来防止重复调用相同的表和求和。但是,当使用表时,我在输出中没有得到。 请帮忙!

  • 我试图找到一种算法(不是matlab命令)来枚举所有可能的NxM矩阵,其约束条件是每个单元格中只有正整数(或0)以及每行和每列的固定和(这些是算法的参数)。 例:枚举所有2x3矩阵,行总计为2,1,列总计为0,1,2: 这是一个相当简单的例子,但是随着N和M的增加,以及总和的增加,可能会有很多可能性。 编辑1 我可能有一个有效的安排来启动算法: target_row_sum[i]是第一行的预期金额

  • 给定矩阵(大小by)和幂,(例如,4),产生矩阵,其中每个-th矩阵包含所有中的列在该程度上的可能组合。 在我当前的方法中,我生成-th矩阵,然后在下一次调用中使用它来生成th矩阵。对于给定的功率,这是否可以“自动”完成,而不是手动完成? 说到R,我是一个新手,我明白有可能比下面的尝试更有效、更优雅地实现这个解决方案。。。 有人能提供一些建议吗?我的目标是为给定的矩阵创建一个函数,并以更“自动化”