Skip to content

Commit 4cd42c7

Browse files
committed
Solution to Pick from Both Sides
1 parent 3fd254d commit 4cd42c7

File tree

1 file changed

+84
-1
lines changed

1 file changed

+84
-1
lines changed

src/Arrays/PrefixSumProblems.java

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@
66
public class PrefixSumProblems {
77
public static void main(String[] args) {
88

9-
int [] array = {1,2,3,4,5};
9+
int [] array = {2, 3, -1, 4, 2, 1};
10+
int [] array_1 = {-533, -666, -500, 169, 724, 478, 358, -38, -536, 705, -855, 281, -173, 961, -509, -5, 942, -173, 436, -609, -396, 902, -847, -708, -618, 421, -284, 718, 895, 447, 726, -229, 538, 869, 912, 667, -701, 35, 894, -297, 811, 322, -667, 673, -336, 141, 711, -747, -132, 547, 644, -338, -243, -963, -141, -277, 741, 529, -222, -684, 35};
11+
System.out.println(pickFromBothSides(array_1,48));
12+
13+
14+
System.out.println(Arrays.toString(suffixArray(array)));
15+
1016
System.out.println(Arrays.toString(prefixSum(array)));
1117

1218
ArrayList<Integer> arrayList = new ArrayList<>(100);
@@ -41,6 +47,83 @@ public static void main(String[] args) {
4147
return prefixArray;
4248
}
4349

50+
static int prefixSumBetweenIndices(int [] A, int start, int end){
51+
int [] prefixArray = new int[A.length];
52+
53+
prefixArray[0] = A[start];
54+
int sum = prefixArray[0];
55+
56+
for (int i = start+1; i < end; i++){
57+
sum = sum + A[i];
58+
prefixArray[i] = sum;
59+
}
60+
61+
return sum;
62+
}
63+
64+
static int [] suffixArray(int [] array){
65+
int [] suffixArray = new int[array.length];
66+
67+
// suffixArray[array.length-1] = array[array.length-1];
68+
int sum = 0;
69+
70+
for (int i = array.length-1; i >= 0; i--){
71+
sum = sum + array[i];
72+
suffixArray[i] = sum;
73+
}
74+
75+
System.out.println(Arrays.toString(suffixArray));
76+
77+
return suffixArray;
78+
}
79+
80+
static int pickFromBothSides(int [] A, int B){
81+
82+
int N = A.length;
83+
84+
int [] prefixArray = new int[A.length];
85+
86+
prefixArray[0] = A[0];
87+
int totalSum = prefixArray[0];
88+
89+
for (int i = 1; i < A.length; i++){
90+
totalSum = totalSum + A[i];
91+
prefixArray[i] = totalSum;
92+
}
93+
94+
if (N == B){
95+
return totalSum;
96+
}
97+
98+
int [] suffixArray = suffixArray(A);
99+
100+
int start = B-1;
101+
int end = N-1;
102+
103+
int final_answer = Integer.MIN_VALUE;
104+
105+
while (start >= 0){
106+
int answer = 0;
107+
if (start == B-1){
108+
answer = prefixArray[start];
109+
start --;
110+
} else {
111+
answer = prefixArray[start] + suffixArray[end];
112+
System.out.println("Answer is "+ answer);
113+
start --;
114+
end --;
115+
}
116+
117+
final_answer = Math.max(answer,final_answer);
118+
}
119+
120+
if (end == N-B) {
121+
int answer_1 = suffixArray[end];
122+
final_answer = Math.max(answer_1,final_answer);
123+
}
124+
return final_answer;
125+
}
126+
44127
static int pickMaxSumFromBothSidesInArray(ArrayList<Integer>list){
45128

46129
int maxSum = list.get(0);

0 commit comments

Comments
 (0)