1.1、題目1
劍指 Offer 42. 連續子陣列的最大和
1.2、解法
得到轉移方程後,單次遍歷。
當前面的連續子陣列的和比較是否大於0,是則加起來,
若小於零,則當前的值就可當子陣列的開頭。
判斷每次的大小則取出最大值。
1.3、程式碼
class Solution {
public int maxSubArray(int[] nums) {
int res=nums[0];
for(int i=1;i<nums.length;i++){
nums[i]+=Math.max(nums[i-1],0);
res=Math.max(nums[i],res);
}
return res;
}
}
2.1、題目2
劍指 Offer 47. 禮物的最大價值
2.2、解法
這裡禮物的最大價值,分情況討論。
噹噹前座標在第一層時,它之前只可能是一直向右移動,
噹噹前座標在第一列時,它之前只可能是一直向下移動,
其他情況下,則比較該位置的上一層值與該位置左一列的值進行比較,
誰比較大,則加當前的值,成為當前位置的值。
2.3、程式碼
class Solution {
public int maxValue(int[][] grid) {
int m = grid.length, n = grid[0].length;
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if(i == 0 && j == 0) continue;
if(i == 0) grid[i][j] += grid[i][j - 1] ;
else if(j == 0) grid[i][j] += grid[i - 1][j];
else grid[i][j] += Math.max(grid[i][j - 1], grid[i - 1][j]);
}
}
return grid[m - 1][n - 1];
}
}