arrays - 如果我使用 (start+1,i) 而不是 (start, i-1) 会有什么变化吗?
问题描述
给定总和的子数组
在printf
ofif
语句的这段代码中,如果我使用(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;
}
解决方案
推荐阅读
- php - 发送包含来自表单输入和数据库数据的混合数据的电子邮件
- java - .class 文件是字节码吗?或 .class 文件是否包含字节码?
- node.js - 护照的身份验证功能如何知道要验证哪个请求?
- android-studio - 如何将库添加到 android studio 而不是单个项目
- python - 正则表达式:re.match 不起作用,但 re.search 起作用
- twilio-api - Twilio 验证 API 验证调用返回 curl 错误
- python - 美丽的汤 div 数据解析错误
- mysql - 多sql选择语句
- swift - 覆盖弱 var 属性?
- java - 如何使包含的组件始终位于顶部