lintcode--子数组之和
2017-07-16 10:01
169 查看
给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置
注意事项
There is at least one subarray that it's sum equals to zero.
您在真实的面试中是否遇到过这个题?
Yes
样例
给出
/*
子树的和是0,根据给的例子:[-3, 1, 2, -3, 4],
其累加和【-3,-2,0,-3,1】中心出现了一个数0 ,
同时发现两个-3,第一个-3开始到第二个-3之前的部分就是这个子数组
数组【1,2,3,-5,3】,其累加和【1,3,6,1,5】,
两个1之间的部分就是答案,根据元素数组:不包括第一个1的位置,包括第二个1的位置
所以:计算累加和,当和的值之前已经出现了,这个区间内的数就是子数组的起始id
注意:
当包括0位置的时候,包括0位置,不包括最后一个位置
当不包括0位置的时候,包括上一个数位置,不包括当前位置
这个时候需要加入一个值防止是第一个数,
put(0,-1),表示还没有数的时候数是0,
起始位置是-1,这样当包括0位置的情况,转化为不包括0的情况
思路:
1.先累加得到新数组,存入map
2.比较新数组中相同的两个数,相同则为之间的数
*/
public class Solution {
public ArrayList<Intege
96f5
r> subarraySum(int[] nums) {
// write your code here
int numslen = nums.length;
ArrayList<Integer> result = new ArrayList<Integer>();
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
map.put(0,-1);//起始位置为-1
int sum = 0;
for(int i=0;i<numslen;i++){
sum+=nums[i];//累加
if(map.containsKey(sum)){
result.add(map.get(sum) + 1);//前
result.add(i);//后
return result;
}
//没有相同就存入
map.put(sum,i);
}
return result;
}
}
注意事项
There is at least one subarray that it's sum equals to zero.
您在真实的面试中是否遇到过这个题?
Yes
样例
给出
[-3, 1, 2, -3, 4],返回
[0, 2]或者
[1, 3].
/*
子树的和是0,根据给的例子:[-3, 1, 2, -3, 4],
其累加和【-3,-2,0,-3,1】中心出现了一个数0 ,
同时发现两个-3,第一个-3开始到第二个-3之前的部分就是这个子数组
数组【1,2,3,-5,3】,其累加和【1,3,6,1,5】,
两个1之间的部分就是答案,根据元素数组:不包括第一个1的位置,包括第二个1的位置
所以:计算累加和,当和的值之前已经出现了,这个区间内的数就是子数组的起始id
注意:
当包括0位置的时候,包括0位置,不包括最后一个位置
当不包括0位置的时候,包括上一个数位置,不包括当前位置
这个时候需要加入一个值防止是第一个数,
put(0,-1),表示还没有数的时候数是0,
起始位置是-1,这样当包括0位置的情况,转化为不包括0的情况
思路:
1.先累加得到新数组,存入map
2.比较新数组中相同的两个数,相同则为之间的数
*/
public class Solution {
public ArrayList<Intege
96f5
r> subarraySum(int[] nums) {
// write your code here
int numslen = nums.length;
ArrayList<Integer> result = new ArrayList<Integer>();
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
map.put(0,-1);//起始位置为-1
int sum = 0;
for(int i=0;i<numslen;i++){
sum+=nums[i];//累加
if(map.containsKey(sum)){
result.add(map.get(sum) + 1);//前
result.add(i);//后
return result;
}
//没有相同就存入
map.put(sum,i);
}
return result;
}
}
相关文章推荐
- lintcode-44-最小子数组
- LintCode_63_搜索旋转排序数组 II
- lintcode 中等题:search in rotated sorted arrayII 搜索旋转排序数组II
- Lintcode——100. 删除排序数组中的重复数字
- LintCode-数组剔除元素后的乘积
- LintCode:两数组的交
- lintcode--41. 最大子数组
- Lintcode-贪心-最大子数组和最小子数组
- LINTCODE——最大子数组III
- LintCode 6.合并排序数组 II
- LintCode-删除排序数组中的重复数字
- LintCode:搜索旋转排序数组 II
- Lintcode 数组划分
- lintcode 容易题:Recover Rotated Sorted Array恢复旋转排序数组
- lintcode 42 最大子数组 II 解析
- lintcode,寻找旋转排序数组中的最小值
- Lintcode python之两数组的交
- 日常练习:lintcode 39. 恢复旋转排序数组
- lintcode&九章算法——Google 面试题 | 3个非重复子数组最大和
- lintcode循环数组之连续子数组求和