算法题 子数组之和为零
lintcode 138
子数组之和为零
给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置
这里给定是思路是这样的,依次求数组nums的前缀和,其前缀和的数组为S,
对于S[i],S[j],(i>j)如果S[i],S[j],相等,这说明nums[i+1],nums[i+2]....nums[j]的子数组的和为0;
这里利用hash表来检查两个前缀数组,将将前缀数组的值存入hash表中,每次存入是检查是否有重复的碰撞,存在重复表明后缀数组中两个数相等.
另外还有一种情况,那就是对于类似1,-1,2这样的后缀数组,从nums[0],nums[1]....nums[i],这样的后缀数组是无法检测的.因此我们在哈希表中加入一个特殊值,s[-1] = 0,表示从0位开始的和为0.这样就可以检查从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 herehash_map<int, int> Sum;int NowSum = 0;int Count = 0;//计数值vector<int> Result;Sum.insert(pair<int, int>(0, -1));//插入for(; Count != nums.size(); Count++){NowSum += nums[Count];if(Sum.find(NowSum) == Sum.end())//检查是否存在NowSum相等的键Sum.insert(pair<int, int>(NowSum, Count));//插入else//存在前缀相等{hash_map<int,int>::iterator ite = Sum.find(NowSum);Result.push_back(ite->second +1);Result.push_back(Count);return Result;}}return Result;}
};
算法题 子数组之和为零相关推荐
- leetcode算法题--子数组按位或操作
原题链接:https://leetcode-cn.com/problems/bitwise-ors-of-subarrays/ 动态规划 dp[i]表示A[:i]的所有子数组按位或的结果 状态转移 d ...
- 算法-求数组的子数组之和的最大值
一个一维int数组,这个数组有很多子数组,那么子数组之和的最大值是什么呢? 思考 1.题目说的子数组是连续的: 2.题目只需要求和,并不需要返回子数组的具体位置: 3.数组的元素是整数,所以数组可能包 ...
- 编程之美-2.14-求数组的子数组之和的最大值
这个以前写过,见求数组的最长子数组之和的最大值 这里说一下后面扩展题目. 1. 简述 1) 如果数组首尾相连,即允许找到一组数字(A[i],···,A[n-1], A[0],···, A[j]),请使 ...
- 求数组的子数组之和的最大值
一个有N个整数元素的一维数组( A[0], A[1], ... , A[n-2], A[n-1]),子数组之和的最大值是什么?(要求子数组的元素是连续的) 例子:有数组( -2, 5, 3, -6, ...
- 【C】课堂结对联系-求整数数组的子数组之和的最大值(党云龙、黄为)
测试题目 求整数数组的子数组之和的最大值. 题目分析 首先是明确题目的目的:求最大值:其次是考虑子数组求和.这里将求最大值写成一个单独的函数.主函数未测试函数.这里用到了二重循环,时间复杂度为N^2. ...
- lintcode:子数组之和为0
题目: 子数组之和 给定一个整数数组,找到和为零的子数组.你的代码应该返回满足要求的子数组的起始位置和结束位置 样例 给出[-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3]. 解 ...
- 编程之美2.14 求数组的子数组之和的最大值
这是一个在面试中出现概率很高的一道题目,就拿我来说吧,面试了5家公司中,两家公司问了这道题目,可见,这道题目是非常经典的. 解题思想也不是很难,我熟悉的有:两种解题办法: ...
- 《团队开发一(求一个数组的连续的子数组之和的最大值)》
<团队开发一(求一个数组的连续的子数组之和的最大值)> (1)设计思想:一般的,求一个数组的最大子数组之和即是按数组顺序依次让前几个数的和与下一个数进行比较,设一变量来装每次比较后的较大的 ...
- 编程之美 2.14求数组的子数组之和的最大值
对于一个有N个元素的数组,a[0]~a[n-1],求子数组最大值. 如:数组A[] = [−2, 1, −3, 4, −1, 2, 1, −5, 4],则连续的子序列[4,−1,2,1]有最大的和6. ...
最新文章
- pyton中的self具体含义,加self与不加self有什么区别?
- java图形旋转动画_Java动画:旋转图像
- Windows与Linux下tftp服务的使用
- 排序算法之二路归并排序
- Kconfig配置文件
- Aspose.words之插入水印
- python代码图片头像_Python爬取堆糖网优美古风头像(附源码)
- python中index函数_python的index函数用法 详解python中的index函数用法
- 【大白话学习】UniApp 微信小程序与APP应用 开发零基础入门教程(一)---基础页面框架搭建
- [评估指标] 敏感性/特异性/PPV/NPV等指标原理与计算方法
- 全国省级常住人口搜集指南
- 浮躁的社会 浮躁的人
- .NET Core 和 ASP.NET 5 RC1 发布
- 计算机专业怎么考aqf,今年的全国计算机等级考试是采用什么系?
- 死亡的意思就是没有任何意义
- python百度地图标注_利用python和百度地图API实现数据地图标注
- MYSQL学习笔记(自用)第三章
- 用户访谈提纲设计注意事项
- 菱形五角星html,长方形、正方形、圆形、三角形、菱形、五角星分别用英语怎么说?...
- 电脑系统32位和64位有哪些区别 32位和64位是什么意思