考え方
- 全体の数の合計値 / 全体の数の平均値より、最小の値は2個ずつの平均値、または3個ずつの平均値のどちらかに存在する
らしいです。あんまりしっくりきていないので完璧な方ぜひおしえてください。
まあ、一応下記例から読み取れるとしたら、確かに全体の平均値より2この平均値に最小値がきていますね..
slice (1, 2), whose average is (2 + 2) / 2 = 2; slice (3, 4), whose average is (5 + 1) / 2 = 3; slice (1, 4), whose average is (2 + 2 + 5 + 1) / 4 = 2.5.
上記の仮定については下記参照
コード
- まず与えられたarrayが2個以上じゃないなら何もしない、とするためにarray数-2引いた数でループする
- 2個の平均値、3個の平均値を割り出す
- 最小値があればindexをansとする
- コーナーケースの最後の2個の場合の考慮する
public class Solution { public static void main(String[] args) { System.out.println(solution(new int[] {4,2,2,5,1,5,8})); } public static int solution(int[] A) { int ans = 0; double minAvg = Double.MAX_VALUE; int sumFor2Values, sumFor3Values = 0; for(int i=0; i<A.length-2; i++) { sumFor2Values = A[i] + A[i+1]; if(sumFor2Values/2.0 < minAvg) { minAvg = sumFor2Values/2.0; ans = i; } sumFor3Values = sumFor2Values + A[i+2]; if(sumFor3Values/3.0 < minAvg) { minAvg = sumFor3Values/3.0; ans = i; } } if((A[A.length-2] + A[A.length-1]) / 2.0 < minAvg) { ans = A.length-2; } return ans; } }
algorithm/Solution.java at main · mankozooyork/algorithm · GitHub