寻找数组中和为0的子数组
class Solution {
public:
/**
* @param nums: A list of integers
* @retu rn: A list of integers includes the index of the first number
* and the index of the last number
*/
vector<int> subarraySum(vector<int> nums){
// write your code here
map<int, int> mymap;
mymap[0] = -1;
vector<int> result;
if( !nums.size() ) return result;
if( nums[0] == 0 )
{
result.push_back( 0 );
result.push_back( 0 );
return result;
}
int i = 0;
for( i = 1; i < nums.size(); i++ )
{
nums[i] += nums[ i - 1 ];
if( mymap.find( nums[i] ) == mymap.end() )
mymap[nums[i]] = i;
else
{
result.push_back( mymap[nums[i]] + 1 );
result.push_back( i );
return result;
}
}
return result;
}
};
当数据个数比较多时报错
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
看题主的算法的思想,应该是通过求和,当出现两个相同的和时,就可以判断中间连续子数组和为0.我已修改了回答。。
AC代码,我只修改了一个序号,改成一个tot辅助求和,可以过啊:
题主默默的把问题改了 = = ,QAQ, 都不告诉下我,序号为0的问题, 因为你map里面没有序号为0的那个位置的标记吧,我这次只加了一个序号为0的数组的位置。
AC代码,题主都不愿理我了= =:
排序,开始遍历,0-arr[i],二分这个数。