首页 > 解决方案 > 如果我使用 (start+1,i) 而不是 (start, i-1) 会有什么变化吗?

问题描述

给定总和的子数组

printfofif语句的这段代码中,如果我使用(start+1,i)而不是,会有什么变化(start, i-1)吗?我很困惑,因为我得到了不同的子数组答案索引。

#include <stdio.h>

int subArraySum(int arr[], int n, int sum)
{
    int curr_sum = arr[0], start = 0, i;

    for (i = 1; i <= n; i++) {
        // If curr_sum exceeds the sum,
        // then remove the starting elements
        while (curr_sum > sum && start < i - 1) {
            curr_sum = curr_sum - arr[start];
            start++;
        }

        if (curr_sum == sum) {
            printf("Sum found between indexes %d and %d",
                start, i-1);
            return;
        }

        // Add this element to curr_sum
        if (i < n)
            curr_sum = curr_sum + arr[i];
    }
    printf("-1\n");

}

int main()
{
    int arr[] = {9, 5, 10, 23 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int sum = 15;
    subArraySum(arr, n, sum);
    return 0;
}

标签: arrayscsub-array

解决方案


推荐阅读