/**
* Question: Given an array of positive numbers, find the maximum sum of a subsequence with the constraint that no 2 numbers in the sequence should be adjacent in the array.
*/
val inputArray
= Array
( 5 ,
15 ,
10 ,
40 ,
50 ,
35 ) print( getMaxAlternativeElementSum( 0 , 0 , inputArray( 0 ) ) )
def getMaxAlternativeElementSum
( tracker
: Int, prevSum
: Int, curSum
: Int
) : Int
= tracker
match { case _ if tracker
== 0 => getMaxAlternativeElementSum
( tracker+
1 ,
0 , inputArray
( tracker
) ) case _ if tracker
>= inputArray.
length => curSum
case _ => val maxSum
= curSum.
max ( prevSum
) getMaxAlternativeElementSum( tracker+1 , maxSum, prevSum+inputArray( tracker) )
}
}
LyoqCiAqIFF1ZXN0aW9uOiBHaXZlbiBhbiBhcnJheSBvZiBwb3NpdGl2ZSBudW1iZXJzLCBmaW5kIHRoZSBtYXhpbXVtIHN1bSBvZiBhIHN1YnNlcXVlbmNlIHdpdGggdGhlIGNvbnN0cmFpbnQgdGhhdCBubyAyIG51bWJlcnMgaW4gdGhlIHNlcXVlbmNlIHNob3VsZCBiZSBhZGphY2VudCBpbiB0aGUgYXJyYXkuIAogKi8Kb2JqZWN0IE1haW4gZXh0ZW5kcyBBcHAgewogIHZhbCBpbnB1dEFycmF5ID0gQXJyYXkoNSwgMTUsIDEwLCA0MCwgNTAsIDM1KQogIHByaW50KGdldE1heEFsdGVybmF0aXZlRWxlbWVudFN1bSgwLCAwLCBpbnB1dEFycmF5KDApKSkKICBkZWYgZ2V0TWF4QWx0ZXJuYXRpdmVFbGVtZW50U3VtKHRyYWNrZXI6IEludCwgcHJldlN1bTogSW50LCBjdXJTdW06IEludCk6SW50ID0gdHJhY2tlciBtYXRjaCB7CiAgICBjYXNlIF8gaWYgdHJhY2tlciA9PSAwICA9PiBnZXRNYXhBbHRlcm5hdGl2ZUVsZW1lbnRTdW0odHJhY2tlcisxLCAwLCBpbnB1dEFycmF5KHRyYWNrZXIpKQogIAljYXNlIF8gaWYgdHJhY2tlciA+PSBpbnB1dEFycmF5Lmxlbmd0aCA9PiBjdXJTdW0gICAgCiAgICBjYXNlIF8gPT4gdmFsIG1heFN1bSA9IGN1clN1bS5tYXgocHJldlN1bSkgICAgCQkgICAKICAgIAkJICBnZXRNYXhBbHRlcm5hdGl2ZUVsZW1lbnRTdW0odHJhY2tlcisxLCBtYXhTdW0sIHByZXZTdW0raW5wdXRBcnJheSh0cmFja2VyKSkKICB9Cn0=