子数组之和
来源:互联网 发布:手机cad画图软件 编辑:程序博客网 时间:2024/04/30 07:44
给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置。
样例
给出[-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].
class Element implements Comparable<Element>{ int val; int index; public Element(int v, int i) { val=v; index=i; } public int compareTo(Element other) { return this.val-other.val; } public int getIndex() { return index; } public int getValue() { return val; }}public class Solution { /** * @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 */ public ArrayList<Integer> subarraySum(int[] nums) { ArrayList<Integer> res=new ArrayList<Integer>(); if(nums.length==0) return res; Element[] sums=new Element[nums.length+1]; sums[0]=new Element(0,-1); int sum=0; for (int i=0;i<nums.length;i++) { sum+=nums[i]; sums[i+1]=new Element(sum,i); } Arrays.sort(sums); int min=Math.abs(sums[0].getValue()-sums[1].getValue()); int start=Math.min(sums[0].getIndex(),sums[1].getIndex())+1; int end=Math.max(sums[0].getIndex(),sums[1].getIndex()); for(int i=1;i<nums.length;i++){ int diff=Math.abs(sums[i].getValue()-sums[i+1].getValue()); if (diff<min) { min=diff; start=Math.min(sums[i].getIndex(),sums[i+1].getIndex())+1; end =Math.max(sums[i].getIndex(),sums[i+1].getIndex()); } } res.add(start); res.add(end); return res; }}
0 0
- 子数组之和
- 最大子数组之和
- 最大子数组之和
- 最大子数组之和
- 子数组之和
- 子数组之和
- 题目:子数组之和
- 题目:子数组之和
- 子数组之和
- (138)子数组之和
- LintCode_子数组之和
- 子数组之和_LintCode
- 子数组之和
- 子数组之和
- LintCode:子数组之和
- lintcode ----子数组之和
- 子数组之和
- 子数组之和
- Go语言学习示例
- codeforces #308 D.Vanya and Triangles(枚举+斜率分块)
- 获取本地照片和拍照上传并裁剪的实现
- 变量
- LeetCode 之 Merge Intervals — C++ 实现
- 子数组之和
- eclipse中文字体大小修改,让中英文字体协调
- PostgreSql初探(2)-创建数据库
- 1小时 1分钟之前 java 处理
- dyld:Expected in: /System/Library/Frameworks/CFNetwork.framework/CFNetwork
- POJ 1769
- myeclipse2013 建的web项目没有web.xml
- MySQL优化之——查看字段长度
- robotium—Errors running builder 'Android Resource Managager