題目:你是一名專業(yè)強(qiáng)盜氨距,計(jì)劃沿著一條街打劫精偿。每間房屋都儲(chǔ)存有一定金額的錢,唯一能阻止你打劫的約束條件就是房屋之間有安全系統(tǒng)相連击费,如果同一個(gè)晚上有兩間相鄰的房屋被闖入拢蛋,它們就會(huì)自動(dòng)聯(lián)絡(luò)警察,因此不可以打劫相鄰的房屋蔫巩。
給出一個(gè)表示每個(gè)房子的金額的非負(fù)整數(shù)的列表谆棱,確定你今天晚上可以搶救的最大金額快压,而不提醒警察。
例如:給定一個(gè)整數(shù)數(shù)組a[]={-1, 2, 3, -5, 9, 4, 10}垃瞧,求出不相鄰元素組成的子集中元素之和最大是多少蔫劣。那么子集{2,9,10}的元素之和最大。
思路:rob方法是求子集最大和的方法个从,最終結(jié)果是max(a[i]+rob(a脉幢,i+2), rob(a,i+1)),采用遞歸直到i++到數(shù)組的尾部嗦锐。
public static void main(String[] args) {
? ??int[] a = {2,3,5, -2, -6,9,10,5, -10,20,30,40,35};
????System.out.println(rob2(a,0));
}
static int rob2(int[] a,int i) {
????if(i> a.length-1) {
????????return 0;
????}
????if(i == a.length-1) {
????????return max(a[a.length-1],0);
????}
????int include = a[i] +rob2(a, i+2);
????int exclude =rob2(a, i+1);
????return max(include, exclude);
}
static int max(int a,int b) {
????return a>b?a:b;
}