給定一個整數數組,找到非相鄰元素的最大總和。 例如,輸入[1,0,3,9,2,-1]應返回10(1 + 9)。一維陣列中非相鄰元素的最大總數
應該避免3,2,因爲9是相鄰的3,2。最大值在數組中+最大值在9的非相鄰元素中(數組中的最大元素)。
由於最大元素爲9,下一個最大值應該是不相鄰的。導致這個9 + 1 = 10(因爲1是最大的非相鄰元素中的最大值)。
我在O(n)+ O(Max_index-1)+ O(Array.length-Max_index + 2)中試過這種方法。
有沒有其他方法可以根據時間複雜性優化這些代碼。
import java.io.*;
import java.util.*;
//Maximum Sum of Non-adjacent Elements
public class Test{
public static void main(String args[])
{
int[] a={1, 0, 3, 9, 2,-1,-2,-7};
int max=a[0];
int max_index=0;
for(int i=1;i<a.length;++i)
{
if(max<a[i])
{
max=a[i];
max_index=i;
}
}
int m1=a[0];
for(int i=1;i<max_index-1;++i) //get maximum in first half from 0 to max_index-1
{
if(m1<a[i])
m1=a[i];
}
int m2=a[max_index+2];
for(int i=max_index+2;i<a.length;i++)//get maximum in second half max_index+2 to end in array.
{
if(a[i]>m2)
m2=a[i];
}
int two_non_adj_max=max+Math.max(m1,m2);
System.out.println(two_non_adj_max);
}
}
該解決方案並不總是包含最大元素。考慮序列'0,8,9,8,0'。你在尋找恰好兩個元素還是任意數量的非相鄰元素的總和? –
@NicoSchertler感謝您的回覆,但在{0,8,9,8,0}的情況下,最大值爲9,兩半中的非相鄰最大值爲0,因此答案將爲0 + 9 = 9。 – ShreePool
但是最大總和是8 + 8,對吧? –