File tree Expand file tree Collapse file tree 1 file changed +38
-14
lines changed
src/main/java/com/thealgorithms/devutils Expand file tree Collapse file tree 1 file changed +38
-14
lines changed Original file line number Diff line number Diff line change 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}
You can’t perform that action at this time.
0 commit comments