Sort by

recency

|

3677 Discussions

|

  • + 0 comments

    I’m new to Python and couldn’t find a more intuitive solution for this problem, so I thought I’d share mine. Feedback or improvements are very welcome!

    My Pyhton solution:

    def hourglassSum(arr): # Write your code here

    evey_sum_hourglass_1 = []
    evey_sum_hourglass_2 = []
    evey_sum_hourglass_3 = []
    evey_sum_hourglass_4 = []
    
    for i in range(0,4, +1):
    
        line_sum_1 = arr[i +1][1]
        for j in range(0, 3, +1):
            line_sum_1 += arr[i][j] + arr[i+2][j]
        evey_sum_hourglass_1.append(line_sum_1)    
    
    for i in range(0,4, +1):
    
        line_sum_2 = arr[i +1][2]
        for j in range(1, 4, +1):
            line_sum_2 += arr[i][j] + arr[i+2][j]
        evey_sum_hourglass_2.append(line_sum_2)
    
    for i in range(0,4, +1):
    
        line_sum_3 = arr[i +1][3]
        for j in range(2, 5, +1):
            line_sum_3 += arr[i][j] + arr[i+2][j]
        evey_sum_hourglass_3.append(line_sum_3) 
    
    for i in range(0,4, +1):
    
        line_sum_4 = arr[i +1][4]
        for j in range(3, 6, +1):
            line_sum_4 += arr[i][j] + arr[i+2][j]
        evey_sum_hourglass_4.append(line_sum_4)   
    
    all_sum = evey_sum_hourglass_1 + evey_sum_hourglass_2 + evey_sum_hourglass_3 + evey_sum_hourglass_4
    
    max_sum = max(all_sum)
    
    
    return max_sum
    
  • + 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);
        }
    
  • + 0 comments

    Here is my c++ solution you can watch video explanation here : https://www.youtube.com/watch?v=aJv6KLHL3Qk

    int hourglassSum(vector<vector<int>> arr) {
        int result = -63;
        for(int r = 1; r <= 4; r++){
            for(int c = 1; c <= 4; c++){
              int s = arr[r][c] + arr[r-1][c] + arr[r-1][c-1] + arr[r-1][c+1];
              s += arr[r+1][c] + arr[r+1][c-1] + arr[r+1][c+1];
              result = max(result,s);
            }
        }
        
        return result;
    }
    
  • + 0 comments

    c++

    int hourglassSum(vector<vector<int>> arr) {
        vector<int>vek;
        int now    =0;
        for (int i=2;i<arr.size();i++) {
            for (int j=2;j<arr.size();j++) {
            now =
            arr.at(i-2).at(j-2) + arr.at(i-2).at(j-1) + arr.at(i-2).at(j)+
                                 arr.at(i-1).at(j-1) +
            arr.at(i).at(j-2) + arr.at(i).at(j-1) + arr.at(i).at(j);
                vek.push_back(now);
            }
        }
        vector<int>::iterator result = max_element(vek.begin(),vek.end());
        return *result;
    }
    
  • + 0 comments

    JAVA

        /*
         * Complete the 'hourglassSum' function below.
         *
         * The function is expected to return an INTEGER.
         * The function accepts 2D_INTEGER_ARRAY arr as parameter.
         */
    
        public static int hourglassSum(List<List<Integer>> arr) {
        // Write your code here
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < 4; i++) {
            int actual = 0;
            for (int j = 0; j < 4; j++) {
                actual = arr.get(i).get(j) + arr.get(i).get(j+1)+ arr.get(i).get(j+2)+
                         arr.get(i+1).get(j+1)+
                         arr.get(i+2).get(j)+arr.get(i+2).get(j+1)+arr.get(i+2).get(j+2);
                if(actual > max){
                    max = actual;
                }             
                
            }
        }
        return max;
    
        }