标签:
1. 保存<sum[i + 1], i>,然后对sum[i + 1]排序,然后找出相邻值之间的最小差。
2. TreeMap:ceilingEntry返回一个键-值映射关系,它与大于等于给定键的最小键关联Value。floorEntry:返回小于等于给定键的最大键关联Value。
public ArrayList<Integer> subarraySumClosest(int[] nums) { // write your code here ArrayList<Integer> res = new ArrayList<Integer>(); if (nums == null || nums.length == 0) { return res; } TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>(); int sum = 0; int minDif = Integer.MAX_VALUE; res.add(0); res.add(0); for (int i = 0; i < nums.length; ++i) { sum += nums[i]; Map.Entry floor = map.floorEntry(sum); Map.Entry ceiling = map.ceilingEntry(sum); if (floor != null || ceiling != null) { if (floor == null || (ceiling != null && Math.abs((int) floor.getKey() - sum) > Math.abs((int) ceiling.getKey() - sum))) { if (Math.abs((int) ceiling.getKey() - sum) < minDif) { res.set(0, (int) ceiling.getValue() + 1); res.set(1, i); minDif = Math.abs((int) ceiling.getKey() - sum); } } else { if (Math.abs((int) floor.getKey() - sum) < minDif) { res.set(0, (int) floor.getValue() + 1); res.set(1, i); minDif = Math.abs((int) floor.getKey() - sum); } } } map.put(sum, i); } return res; }
标签:
原文地址:http://www.cnblogs.com/fripside/p/4621597.html