Given an NxM (N rows and M columns) integer matrix with non-negative values (0..MAX_INT inclusive). What is the maximum sum from going top left (0, 0) to bottom right (N-1, M-1) ? The condition is that when you're at point (p, q), you can only move to either right (p, q+1) or down (p+1, q).
Expected time complexity O(N*M)
Expected space complexity O(N+M)
about space complexity, need elaborate on it.
package com.zhuyu_deng.test; public class Test { private static int findOptPath(int[][] a) { int d[][] = new int[a.length][a[0].length]; int m = a.length; int n = a[0].length; d[0][0] = a[0][0]; for (int i = 1; i < m; ++i) d[i][0] = d[i - 1][0] + a[i][0]; for (int j = 1; j < n; ++j) d[0][j] = d[0][j - 1] + a[0][j]; for (int i = 1; i < m; ++i) { for (int j = 1; j < n; ++j) { if (d[i-1][j] > d[i][j-1]) d[i][j] = a[i][j] + d[i-1][j]; else d[i][j] = a[i][j] + d[i][j-1]; } } for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) System.out.print(a[i][j] + " "); System.out.println(); } System.out.println(); for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) System.out.print(d[i][j] + " "); System.out.println(); } return d[m - 1][n - 1]; } public static void main(String args[]) { // int[] a = {-2,11,-4,13,-5,-2}; int[][] b = { { 0, -2, -7, 0 }, { 9, 2, -6, 2 }, { -4, 1, -4, 1 }, { -1, 8, 0, -2 } }; int [][] matrix = { {2,3,4,1}, {1,1,3,9}, {2,2,3,1}, {2,2,3,1} }; System.out.println(findOptPath(matrix)); } }