• + 0 comments

    My Java solution with o(n * m) time complexity and o(1) space complexity:

    public static int hourglassSum(List<List<Integer>> arr) {
            if(arr.size() < 3) return 0; //no possible hourglass
            
            int max = Integer.MIN_VALUE;
            
            //iterate over each row except the last two
            int i = 0;
            while(i < arr.size() - 2){
                //iterate over each col except the first & last
                int j = 1;
                while(j < arr.get(i).size() - 1){
                    int currMax = calcHourglassSum(arr, i, j); //get the curr max
                    max = Math.max(currMax, max); //update the max
                    j++;
                }
                i++;
            }
            return max;
        }
        
        public static int calcHourglassSum(List<List<Integer>> arr, int i, int j){
            return 
                arr.get(i).get(j) + arr.get(i).get(j-1) + arr.get(i).get(j+1)
                + arr.get(i+1).get(j) + arr.get(i+2).get(j) + arr.get(i+2).get(j-1) 
                + arr.get(i+2).get(j+1);
        }