Maximum Average Subarray
Important Reference:
http://stackoverflow.com/questions/13093602/finding-subarray-with-maximum-sum-number-of-elements
http://www.jiuzhang.com/qa/2942/
public class Solution { /** * @param nums an array with positive and negative numbers * @param k an integer * @return the maximum average */ public double maxAverage(int[] nums, int k) { // Write your code here double l = Integer.MAX_VALUE; double r = Integer.MIN_VALUE; for (int i = 0; i < nums.length; i++) { if (nums[i] < l) { l = nums[i]; } if (nums[i] > r){ r = nums[i]; } } while (r -l > 1e-6) { double mid = l + (r - l) / 2.0; if (valid(nums, mid, k)) { //TODO l = mid; } else { r = mid; } } return l; } private boolean valid(int nums[], double mid, int k) { int n = nums.length; double[] sum = new double[n + 1]; sum[0] = 0.0; double minPre = 0.0; for (int i = 1; i < n + 1; i++) { sum[i] = sum[i - 1] + nums[i - 1] - mid; //nums[i - 1] because i start with 1, eg. sum[3] means from nums[0] ~ nums[2] if (i >= k && sum[i] - minPre >= 0) { return true; } if (i >= k) { minPre = Math.min(minPre, sum[i - k + 1]); } } return false; } }
posted on 2017-05-11 04:43 codingEskimo 阅读(115) 评论(0) 收藏 举报
浙公网安备 33010602011771号