[刷题]Subarray Sum Closest
2015-09-16 14:56
295 查看
[LintCode]Subarray Sum Closest
Version 1 O(n^2) 超时
Version 2 O(nlogn)
Version 1 O(n^2) 超时
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> subarraySumClosest(int[] nums) { // 2015-09-16 O(n^2) ArrayList<Integer> list = new ArrayList<>(); if (nums == null || nums.length < 1) { return list; } int[] sum = new int[nums.length + 1]; sum[0] = 0; int minSub = Math.abs(nums[0]); int start = 0; int end = 0; for (int i = 0; i < nums.length; i++) { sum[i + 1] = nums[i] + sum[i]; for (int j = 0; j < i + 1; j++) { int absSub = Math.abs(sum[i + 1] - sum[j]); if (absSub < minSub) { minSub = absSub; start = j; end = i; } } } list.add(start); list.add(end); return list; } }
Version 2 O(nlogn)
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 */ class Pair { int sum; int index; public Pair(int s, int i) { sum = s; index = i; } } public ArrayList<Integer> subarraySumClosest(int[] nums) { // write your code here ArrayList<Integer> res = new ArrayList<Integer> (); if (nums == null || nums.length == 0) { return res; } int len = nums.length; if(len == 1) { res.add(0); res.add(0); return res; } Pair[] sums = new Pair[len+1]; int prev = 0; sums[0] = new Pair(0, 0); for (int i = 1; i <= len; i++) { sums[i] = new Pair(prev + nums[i-1], i); prev = sums[i].sum; } // 排序 Arrays.sort(sums, new Comparator<Pair>() { public int compare(Pair a, Pair b) { return a.sum - b.sum; } }); int ans = Integer.MAX_VALUE; for (int i = 1; i <= len; i++) { if (ans > sums[i].sum - sums[i-1].sum) { ans = sums[i].sum - sums[i-1].sum; res.clear(); int[] temp = new int[] {sums[i].index - 1, sums[i - 1].index - 1}; Arrays.sort(temp); res.add(temp[0] + 1); res.add(temp[1]); } } return res; } }
相关文章推荐
- 豆瓣客户端(一)获取用户授权的access_token
- HDU 1850 Being a Good Boy in Spring Festival(博弈)
- 由汉诺塔引出各级数量单位的名称
- [Elasticsearch] 部分匹配 (四) - 索引期间优化ngrams及索引期间的即时搜索
- 打开MAT工具中Bitmap的原图
- 肆、js的DOM模型
- Zoie Merge Policy
- session的生命周期
- 位操作基础篇
- HBase深入分析之RegionServer
- 第三周—项目4 顺序表应用
- CUDA多线程
- leetcode Pascal's Triangle II
- [Elasticsearch] 部分匹配 (三) - 查询期间的即时搜索
- Android整机性能监控:多核CPU相关数据的获取(使用率、主频)
- iOS开发快速学会网络实时监听功能步骤
- HashSet与HasnMap区别和方法
- test2.9
- 浮躁的过去,开启的项目管理之路(四)
- 敏捷开发