' P '

whatever I will forget

MinAvgTwoSlice

考え方

  • 全体の数の合計値 / 全体の数の平均値より、最小の値は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.

上記の仮定については下記参照

codesays.com

コード

  1. まず与えられたarrayが2個以上じゃないなら何もしない、とするためにarray数-2引いた数でループする
  2. 2個の平均値、3個の平均値を割り出す
  3. 最小値があればindexをansとする
  4. コーナーケースの最後の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