-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMax_Non_Negativ_SubArray.java
More file actions
68 lines (57 loc) · 1.75 KB
/
Max_Non_Negativ_SubArray.java
File metadata and controls
68 lines (57 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import java.util.ArrayList;
/**
* Created by Lumpy on 02.06.2016.
*/
public class Max_Non_Negativ_SubArray {
public static void main(String[] args) {
ArrayList<Integer> test = new ArrayList<>();
test.add(756898537);
test.add(-1973594324);
test.add(-2038664370);
test.add(-184803526 );
test.add(1424268980);
System.out.println(maxset(test));
}
public static ArrayList<Integer> maxset(ArrayList<Integer> a) {
ArrayList<Integer> subArray = new ArrayList<>();
ArrayList<Integer> subArray2 = new ArrayList<>();
long sumSub1 = 0;
long sumSub2 = 0;
boolean once = false;
for(int i = 0; i < a.size(); i++){
if(a.get(i) < 0){
if(sumSub2 <= sumSub1){
sumSub2 = sumSub1;
subArray2 = subArray;
once = true;
}
subArray = new ArrayList<>();
sumSub1 = 0;
}else {
subArray.add(a.get(i));
sumSub1 += a.get(i);
}
}
if(subArray2.size() == 0){
if (subArray.size() == 0)
return new ArrayList<>();
else
if(once == true)
return subArray;
}
if(sumSub2 > sumSub1){
return subArray2;
}
if(sumSub1 == sumSub2){
if(subArray.size() < subArray2.size()){
return subArray2;
}else if(subArray.size() > subArray2.size()){
return subArray;
}else{
if(subArray.get(0) > subArray2.get(0))
return subArray2;
}
}
return subArray;
}
}