leetcodeの顔の質問17.16。マッサージ師
トピックをプログラミングし、ダイナミック
コア動的プログラミング式は通路に要約されています。
しかし、この質問は、再帰を使用する適切な方法は思えません。
だから、配列をループのために使用します。
class Solution {
public int massage(int[] nums) {
if(nums.length==0)return 0;
if (nums.length==1)return nums[0];
//动态规划,这个采用了分类讨论的思想
//[2,7,9,3,1]为例
//如果你在7的位置上.有两种情况1.工作2.不工作
//于是用数组表示就是len[i][1]与len[i][0]
//这个二维数组的值记录经过的路径的总值
int [][] len=new int[nums.length][2];
len[0][0]=0;
len[0][1]=nums[0];
//遍历这个数组,用二维数组的值作为记录
for(int i=1;i<=nums.length-1;i++){
//假如你在9位置上
//len[i][0]代表你不工作
//有两种可能1.昨天你工作了2.昨天你不工作
//那么我们只要找出两种可能中最大的一种就可以
len[i][0]=Math.max(len[i-1][0],len[i-1][1]);
//如果jin'tian'gong
len[i][1]=len[i-1][0]+nums[i];
}
return Math.max(len[nums.length-1][0],len[nums.length-1][1]);
}
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.massage(new int[]{2,7,9,3,1}));
}
}