[20190331]

题目描述

给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置

样例

样例 1:
输入: [-3, 1, 2, -3, 4]
输出: [0,2] 或 [1,3]

样例解释:
返回任意一段和为0的区间即可。

样例 2:
输入: [-3, 1, -4, 2, -3, 4]
输出: [1,5]

注意事项:

至少有一个子数组的和为 0

题解

可以通过暴力搜索的方法:

class Solution {public:/*** @param nums: A list of integers* @return: 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 herefor (int i = 0; i < nums.size(); i++) {int res = 0;for (int j = i; j < nums.size(); j++) {res += nums[j];if (res == 0) {return vector<int> {i,j};}}}return {};}
};

也可以通过前缀数组的方式来做。

子数组[left, right]的和为0,则presum[left - 1] == presum[r]

理解了这个,就可以写出下面的代码了:

class Solution {public:/*** @param nums: A list of integers* @return: A list of integers includes the index of the first number and the index of the last number*/vector<int> subarraySum(vector<int> &nums) {unordered_map<int, int> mp;mp[0] = -1;int temp = 0;for (int i = 0; i < nums.size(); i++) {temp += nums[i];if (mp.find(temp) != mp.end()) {vector<int> res;res.push_back(mp[temp] + 1);res.push_back(i);return res;}mp[temp] = i;}return {};}
};

但是在每次find时耗时很长,所以总体用时两个方法在测试用例上差别不大。

END.

Lintcode 138. 子数组之和 [Easy]相关推荐

  1. LintCode 138.子数组之和

    描述 给定一个整数数组,找到和为零的子数组.你的代码应该返回满足要求的子数组的起始位置和结束位置 样例 样例 1: 输入: [-3, 1, 2, -3, 4] 输出: [0,2] 或 [1,3] 样例 ...

  2. 算法题 子数组之和为零

    lintcode 138 子数组之和为零 给定一个整数数组,找到和为零的子数组.你的代码应该返回满足要求的子数组的起始位置和结束位置 这里给定是思路是这样的,依次求数组nums的前缀和,其前缀和的数组 ...

  3. lintcode:子数组之和为0

    题目: 子数组之和 给定一个整数数组,找到和为零的子数组.你的代码应该返回满足要求的子数组的起始位置和结束位置 样例 给出[-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3]. 解 ...

  4. 编程之美2.14 求数组的子数组之和的最大值

          这是一个在面试中出现概率很高的一道题目,就拿我来说吧,面试了5家公司中,两家公司问了这道题目,可见,这道题目是非常经典的.       解题思想也不是很难,我熟悉的有:两种解题办法:   ...

  5. 《团队开发一(求一个数组的连续的子数组之和的最大值)》

    <团队开发一(求一个数组的连续的子数组之和的最大值)> (1)设计思想:一般的,求一个数组的最大子数组之和即是按数组顺序依次让前几个数的和与下一个数进行比较,设一变量来装每次比较后的较大的 ...

  6. 编程之美-2.14-求数组的子数组之和的最大值

    这个以前写过,见求数组的最长子数组之和的最大值 这里说一下后面扩展题目. 1. 简述 1) 如果数组首尾相连,即允许找到一组数字(A[i],···,A[n-1], A[0],···, A[j]),请使 ...

  7. 求数组的子数组之和的最大值

    一个有N个整数元素的一维数组( A[0], A[1], ... , A[n-2], A[n-1]),子数组之和的最大值是什么?(要求子数组的元素是连续的) 例子:有数组( -2, 5, 3, -6, ...

  8. 编程之美 2.14求数组的子数组之和的最大值

    对于一个有N个元素的数组,a[0]~a[n-1],求子数组最大值. 如:数组A[] = [−2, 1, −3, 4, −1, 2, 1, −5, 4],则连续的子序列[4,−1,2,1]有最大的和6. ...

  9. 【C】课堂结对联系-求整数数组的子数组之和的最大值(党云龙、黄为)

    测试题目 求整数数组的子数组之和的最大值. 题目分析 首先是明确题目的目的:求最大值:其次是考虑子数组求和.这里将求最大值写成一个单独的函数.主函数未测试函数.这里用到了二重循环,时间复杂度为N^2. ...

最新文章

  1. Fedora20下安装编译环境
  2. des加密解密JAVA与.NET互通实例
  3. java调度:(三)Timer中的单线程守护
  4. 详细解析SELECT模型
  5. LDA-Latent Dirichlet Allocation 学习笔记
  6. 如何使用 SQL Server FILESTREAM 存储非结构化数据?这篇文章告诉你!
  7. oracle应收模块核销点不上,详解EBS接口开发之应收款处理
  8. NLP《语言模型(三)-- 基于循环神经网络的RNNLM语言模型》
  9. 58天 -算法 openJudge百炼 2787-凑24 - 递归
  10. java gui 布局 旋转_JAVA GUI编程之布局管理器
  11. java 明华读卡器_Java调用明华RF读写器DLL文件过程解析
  12. linux opendir路径_opendir与readdir函数使用示例(获得指定目录下所有文件名
  13. QT应用编程: 基于FFMPEG设计的流媒体播放器(播放rtmp视频流)
  14. Python爬虫:让“蜘蛛”帮我们工作
  15. SYN_RECV状态相关
  16. 让你细思极恐的社会潜规则
  17. java实现多元线性回归
  18. 在centos7中基于nginx-rtmp模块的mp4播放
  19. 蓝桥杯-基础练习 查找整数
  20. [转载]湘教版高中地理必修三:2011年五校第一学期高二

热门文章

  1. 数字化方法基础(三)_导入本地模型
  2. [冲啊!!!!!]小白SLAM相关基础知识
  3. word拼写检查自定义词典下载_取消或开启Word拼写检查和语法(去掉红波浪线)...
  4. java开发工作找不到要放弃吗,这样学习Java,才能找到一份Java开发的工作。不要盲目的学!...
  5. linux下syslog命令,syslog命令
  6. python 序列化模块_Python进阶-XII serialize(序列化)、序列化模块
  7. python数字组合算法_python猜数字游戏快速求解解决方案
  8. vscode 设置整体界面字体的大小
  9. python 使窗口前置
  10. linux islower_Python字符串islower()