问题描述
问题陈述:
给定大小为 n 个非负整数的未排序数组 arr ,请找到一个连续的子数组,该数组将添加给定数量 s 。
我已经使用滑动窗口技术来计算子数组的总和,然后将其与给定的数字进行比较。
这是我的代码,其使用大小为 n 的数组 arr ,用户的要求总和 s ,并在以下情况下返回子数组的开始和结束位置:它存在;如果不存在,则 -1 :
注意:在所需的输出中,数组元素的位置从1开始。因此,对于索引说i = 0,位置将为(i + 1)
vector<int> subarraySum(int arr[],int n,int s){
int l=0,r=0;
vector<int>v;
long long sum=0;
while(r<n)
{
sum=sum+arr[r];
if(sum==s)
{
v.push_back(l+1);
v.push_back(r+1);
break;
}
else if(sum<s)
{
r++;
}
else{
sum-=arr[l];
l++;
if(sum==s)
{
v.push_back(l+1);
v.push_back(r+1);
break;
}
r++;
}
}
if(v.empty())
{
v.push_back(-1);
}
return v;
}
此代码失败的第一个测试用例是
Input:
42 468 //n=42,s=468 and rest of the values are the array elements
135 101 170 125 79 159 163 65 106 146 82 28 162 92 196 143 28 37 192 5 103 154 93 183 22 117 119 96 48 127 172 139 70 113 68 100 36 95 104 12 123 134
Its Correct output is:
38 42
And above Code's output is:
-1
预期时间复杂度:O(N)
预期辅助空间:O(1)
约束: 1
有人可以以此来启发我吗,哪里出了问题?而且解决这些问题的最佳方法是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)