一道關于數組的面試題
給定一個數組,當中有正負數,求當中的一段“子數組”(即任意長度,連續的數字),使得這個“子數組”的和是所有“子數組”和中最大的,
如給定的數組為12, -8, 5, 66, -21, 0 ,35, -44,7,則最大的和的子數組為{12, -8, 5, 66, -21, 0 ,35},最大的和為89.
package org.eline.core.utils;

/**
*
* @author supercrsky
*
*/
public class Test
{
public void findMax(int s[])
{
int add[] = new int[100];
int k = s[0];
int b = 0;// 標記開始位置
int p = 0;// 標記結束位置
int i;
int j;

for (i = 0; i <= s.length; i++)// 整體循環
{
for (j = i; j < s.length; j++)// 子數組循環
{
add[i] += s[j];
if (add[i] > k)
{
k = add[i];
b = i;// 獲得開始位置下標
p = j;// 獲得結束位置下標
}
}
}
System.out.print("max sub array:");
System.out.print("{");
for (i = b; i <= p; i++)
{
System.out.print(s[i] + " ");
}
System.out.println("}");
System.out.print("sum:" + k);
}

public static void main(String[] args)
{
int s[] =
{ 101, -100, 100, 100, 999, -222 - 100, 100 };
Test test = new Test();
test.findMax(s);
}
}
如給定的數組為12, -8, 5, 66, -21, 0 ,35, -44,7,則最大的和的子數組為{12, -8, 5, 66, -21, 0 ,35},最大的和為89.


















































posted on 2008-05-07 17:33 々上善若水々 閱讀(1756) 評論(0) 編輯 收藏 所屬分類: Java筆試與面試