Skip to content

Commit 6d4dfbe

Browse files
authored
Add MaxAlternatingSum algorithm implementation
Refactored maxAlternatingSum method to use squared values and improved variable naming.
1 parent ff6602c commit 6d4dfbe

File tree

1 file changed

+38
-14
lines changed

1 file changed

+38
-14
lines changed
Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,43 @@
1-
import java.util.*;
2-
class Solution {
1+
package com.thealgorithms.devutils;
2+
3+
import java.util.Arrays;
4+
5+
/**
6+
* Computes the maximum alternating sum based on the squared values of the input array.
7+
*
8+
* Steps:
9+
* 1. Convert nums[i] to nums[i]^2
10+
* 2. Sort the squared array
11+
* 3. Select the largest (n + 1) / 2 elements
12+
* 4. Use formula: result = 2 * sum(selected) - totalSum
13+
*
14+
* Time Complexity: O(n log n)
15+
* Space Complexity: O(n)
16+
*/
17+
public class MaxAlternatingSum {
18+
319
public long maxAlternatingSum(int[] nums) {
4-
int n=nums.length;
5-
long[] a=new long[n];
6-
for(int i=0;i<n;i++){
7-
a[i]=(long)nums[i]*nums[i];
20+
int n = nums.length;
21+
long[] squared = new long[n];
22+
23+
for (int i = 0; i < n; i++) {
24+
squared[i] = (long) nums[i] * nums[i];
825
}
9-
Arrays.sort(a);
10-
int k=(n+1)/2;
11-
long total=0;
12-
for(long v : a) total+=v;
13-
long sum=0;
14-
for(int i=n-1;i>=n-k;i--){
15-
sum +=a[i];
26+
27+
Arrays.sort(squared);
28+
29+
int k = (n + 1) / 2;
30+
31+
long total = 0;
32+
for (long v : squared) {
33+
total += v;
1634
}
17-
return 2*sum-total;
35+
36+
long maxHalf = 0;
37+
for (int i = n - 1; i >= n - k; i--) {
38+
maxHalf += squared[i];
39+
}
40+
41+
return 2 * maxHalf - total;
1842
}
1943
}

0 commit comments

Comments
 (0)