解题思路:
枚举以每个元素为终点,那么想要得分最大,需要找到位置小于该元素的最小值,可以用前缀最小值维护每个元素之前的最小值。
class Solution {public int maxScore(List<List<Integer>> grid) {int n=grid.size(),m=grid.get(0).size();int[][] premin=new int[n][m];int ans=Integer.MIN_VALUE;for(int i=0;i<n;i++){for(int j=0;j<m;j++){int left=Integer.MAX_VALUE,up=Integer.MAX_VALUE;if(i!=0){up=premin[i-1][j];}if(j!=0){left=premin[i][j-1];}ans=Math.max(ans,grid.get(i).get(j)-Math.min(left,up));premin[i][j]=Math.min(Math.min(left,up),grid.get(i).get(j));}}return ans;} }