62,628
社区成员
发帖
与我相关
我的任务
分享
import java.util.ArrayList;
public class MumberSet {
//test
public static void main(String [] args){
int [] mumbers = {3,-12,12,-8,5,66,-21,0,35,-3,-44,100};
MumberSet aSet = new MumberSet(mumbers);
MumberSet bSet = aSet.getMaxSubSet();
System.out.println("A set is : " + aSet);
System.out.println("A set sum is : " + aSet.getSum());
System.out.println("Max sub set is : " + bSet);
System.out.println("Max sub set sum is : " + bSet.getSum());
}
private int sum = 0;
private ArrayList<Integer> list = new ArrayList<Integer>();
public MumberSet(){
}
public MumberSet(int mumber){
sum = mumber;
list.add(mumber);
}
public MumberSet(int [] mumber){
for(int i = 0 ; i < mumber.length ; i++){
sum = sum + mumber[i];
list.add(mumber[i]);
}
}
public int getSum(){
return sum;
}
public void addMumber(int mumber){
sum = sum + mumber;
list.add(mumber);
}
public void addMumberSet(MumberSet mumberSet){
sum = sum + mumberSet.sum;
list.addAll(mumberSet.list);
}
public void clear(){
sum = 0;
list.clear();
}
@SuppressWarnings("unchecked")
public MumberSet clone(){
MumberSet cloneSet = new MumberSet();
cloneSet.sum = sum;
cloneSet.list = (ArrayList<Integer>) list.clone();
return cloneSet;
}
public MumberSet getMaxSubSet(){
int n = list.size();
MumberSet temp = new MumberSet();
MumberSet maxSet = new MumberSet();
for(int i = 0 ; i < n ; i++){
temp.addMumber(list.get(i));
if(temp.getSum() < 0) temp.clear();
if(temp.getSum() > maxSet.getSum()) maxSet = temp.clone();
}
return maxSet;
}
public String toString(){
return list.toString();
}
}
A set is : [3, -12, 12, -8, 5, 66, -21, 0, 35, -3, -44, 100]
A set sum is : 133
Max sub set is : [12, -8, 5, 66, -21, 0, 35, -3, -44, 100]
Max sub set sum is : 142
=========================================
A set is : [3, -12, 12, -8, 5, 66, -21, 0, 35, -3, -44]
A set sum is : 33
Max sub set is : [12, -8, 5, 66, -21, 0, 35]
Max sub set sum is : 89
=========================================
A set is : [-12, 12, -8, 5, 66, -21, 0, 35, -3, -44]
A set sum is : 30
Max sub set is : [12, -8, 5, 66, -21, 0, 35]
Max sub set sum is : 89
=========================================
A set is : [12, -8, 5, 66, -21, 0, 35, -3]
A set sum is : 86
Max sub set is : [12, -8, 5, 66, -21, 0, 35]
Max sub set sum is : 89
/**
*
*
* @time: 下午02:32:10
* @author Sun Tao(suntao19830709@gmail.com)
*/
public class ChildArray {
private static int[] base = { 12, -8, 5, 66, -21, 0, 35, -44, 7 };
public static void main(String[] args) {
int left = -1;
int right = base.length;
for(int i = 0; i<base.length; i++){
if(base[i] < 0){
int value = base[i];
for(int j = i-1; j >=0;j--){
value = value + base[j];
if(value >=0){
break;
}
}
if(value < 0){
left = i;
}
}
if(base[base.length - 1 - i] < 0){
int value = base[base.length - 1 - i];
for(int j = base.length - i; j < base.length ;j++){
value = value + base[j];
if(value >=0){
break;
}
}
if(value < 0){
right = base.length - 1 - i;
}
}
}
for(int i = left + 1; i < right ; i++){
System.out.print(base[i]+" ");
}
}
}