lintcode-子数组之和-138
2015-09-12 14:02
337 查看
给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置
样例
给出[-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].
第一种思路:利用两个for循环,每次取出一个元素依次与后面的元素相加,时间复杂度是O(n^2)。
第二种思路:利用一个map记录从第一个元素开始到当前元素之和以及当前元素的下标,如果后面的连续元素之和为零那么sum不变,此时就找到了和为零的连续序列,时间复杂度是O(n)
样例
给出[-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].
第一种思路:利用两个for循环,每次取出一个元素依次与后面的元素相加,时间复杂度是O(n^2)。
第二种思路:利用一个map记录从第一个元素开始到当前元素之和以及当前元素的下标,如果后面的连续元素之和为零那么sum不变,此时就找到了和为零的连续序列,时间复杂度是O(n)
class Solution { public: vector<int> subarraySum(vector<int> nums){ vector<int> ret; int n; if((n=nums.size())==0) return ret; map<int,int> mark; mark[0]=-1; //以防和为零的序列正好从第一个元素开始 int sum=0; for(int i=0;i<n;++i){ sum+=nums[i]; if(mark.count(sum)){ ret.push_back(mark[sum]+1); ret.push_back(i); return ret; } mark[sum]=i; } return ret; } };
相关文章推荐
- 大数相乘
- linux进程管理工具二
- 让IE6 ~IE11支持Bootstrap的解决方法
- 蓝懿学习之 练习日
- POJ 2533 Longest Ordered Subsequence(DP最长上升子序列O(n^2)&&O(nlogn))
- Delphi XE6,C++ Builder XE6,RAD Studio XE6 v20.0.16277.1276(With Update 1) 官方下载激活
- 添加ico图标
- iOS UItableview加载图片的时候的优化之lazy(懒加载)模式and异步加载模式
- [Java] 引用类型
- 中英文多字体的富文本
- Linux下常用命令-网络命令
- cron表达式详解
- C++ <利用指针翻转字符串>
- C++程序中尽量避免#define
- linux模块驱动之led(ioremap)
- spoj Distinct Substrings 后缀数组
- 软件测试初体验
- Win7电脑弹框提示Dpp Viewer Module停止工作怎么办?
- 采用maven 对tomcat 进行自动部署
- 游戏画面切换