【问题标题】:Subarray with given sum给定总和的子数组
【发布时间】:2020-11-25 09:38:55
【问题描述】:

给定一个大小为N的非负整数的未排序数组A,找到一个连续子数组,它与给定数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];
        }
    }
}

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

您的代码可能无法在多个测试用例 (TC) 中正常工作。

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

输入:

4 225
9 45 10 190

它的正确输出是:

-1

你的代码的输出是:

-1-1-1-138 42

【问题讨论】:

  • 如果你的输入导致输出错误,很容易做这些比赛网站没有教你的事情:调试!不同的调试技术和能够使用调试器对任何程序员都至关重要,即使对于业余爱好者也是如此。
  • 关于比赛场地和教学……它们应该不被视为教学或学习资源!他们真正教的只是坏习惯。坏习惯(以及好习惯)往往会坚持下去。所以在使用竞赛网站作为培训资源之前,请阅读some good books,上几节课,并正确并养成良好的习惯学习C++。
  • 第一步:将这段代码分割成更小的函数,分离:main、读取数据、计算结果和打印。第二步:考虑是否可以通过只遍历表两次来找到答案。

标签: c++


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2017-01-12
    • 1970-01-01
    • 2020-06-30
    • 2016-05-27
    • 2015-08-09
    • 1970-01-01
    相关资源
    最近更新 更多