2897. Apply Operations on Array to Maximize Sum of Squares LeetCode Solution

In this guide, you will get 2897. Apply Operations on Array to Maximize Sum of Squares LeetCode Solution with the best time and space complexity. The solution to Apply Operations on Array to Maximize Sum of Squares problem is provided in various programming languages like C++, Java, and Python. This will be helpful for you if you are preparing for placements, hackathons, interviews, or practice purposes. The solutions provided here are very easy to follow and include detailed explanations.

Table of Contents

  1. Problem Statement
  2. Complexity Analysis
  3. Apply Operations on Array to Maximize Sum of Squares solution in C++
  4. Apply Operations on Array to Maximize Sum of Squares solution in Java
  5. Apply Operations on Array to Maximize Sum of Squares solution in Python
  6. Additional Resources
2897. Apply Operations on Array to Maximize Sum of Squares LeetCode Solution image

Problem Statement of Apply Operations on Array to Maximize Sum of Squares

You are given a 0-indexed integer array nums and a positive integer k.
You can do the following operation on the array any number of times:

Choose any two distinct indices i and j and simultaneously update the values of nums[i] to (nums[i] AND nums[j]) and nums[j] to (nums[i] OR nums[j]). Here, OR denotes the bitwise OR operation, and AND denotes the bitwise AND operation.

You have to choose k elements from the final array and calculate the sum of their squares.
Return the maximum sum of squares you can achieve.
Since the answer can be very large, return it modulo 109 + 7.

Example 1:

Input: nums = [2,6,5,8], k = 2
Output: 261
Explanation: We can do the following operations on the array:
– Choose i = 0 and j = 3, then change nums[0] to (2 AND 8) = 0 and nums[3] to (2 OR 8) = 10. The resulting array is nums = [0,6,5,10].
– Choose i = 2 and j = 3, then change nums[2] to (5 AND 10) = 0 and nums[3] to (5 OR 10) = 15. The resulting array is nums = [0,6,0,15].
We can choose the elements 15 and 6 from the final array. The sum of squares is 152 + 62 = 261.
It can be shown that this is the maximum value we can get.

See also  3076. Shortest Uncommon Substring in an Array LeetCode Solution

Example 2:

Input: nums = [4,5,4,7], k = 3
Output: 90
Explanation: We do not need to apply any operations.
We can choose the elements 7, 5, and 4 with a sum of squares: 72 + 52 + 42 = 90.
It can be shown that this is the maximum value we can get.

Constraints:

1 <= k <= nums.length <= 105
1 <= nums[i] <= 109

Complexity Analysis

  • Time Complexity: O(30n) = O(n)
  • Space Complexity: O(n)

2897. Apply Operations on Array to Maximize Sum of Squares LeetCode Solution in C++

class Solution {
 public:
  int maxSum(vector<int>& nums, int k) {
    constexpr int kMod = 1'000'000'007;
    constexpr int kMaxBit = 30;
    int ans = 0;
    // minIndices[i] := the minimum index in `optimalNums` that the i-th bit
    // should be moved to
    vector<int> minIndices(kMaxBit);
    vector<int> optimalNums(nums.size());

    for (const int num : nums)
      for (int i = 0; i < kMaxBit; ++i)
        if (num >> i & 1)
          optimalNums[minIndices[i]++] |= 1 << i;

    for (int i = 0; i < k; ++i)
      ans = (ans + static_cast<long>(optimalNums[i]) * optimalNums[i]) % kMod;

    return ans;
  }
};
/* code provided by PROGIEZ */

2897. Apply Operations on Array to Maximize Sum of Squares LeetCode Solution in Java

class Solution {
  public int maxSum(List<Integer> nums, int k) {
    final int kMod = 1_000_000_007;
    final int kMaxBit = 30;
    int ans = 0;
    // minIndices[i] := the minimum index in `optimalNums` that the i-th bit
    // should be moved to
    int[] minIndices = new int[kMaxBit];
    int[] optimalNums = new int[nums.size()];

    for (final int num : nums)
      for (int i = 0; i < kMaxBit; i++)
        if ((num >> i & 1) == 1)
          optimalNums[minIndices[i]++] |= 1 << i;

    for (int i = 0; i < k; i++)
      ans = (int) (((long) ans + (long) optimalNums[i] * optimalNums[i]) % kMod);

    return ans;
  }
}
// code provided by PROGIEZ

2897. Apply Operations on Array to Maximize Sum of Squares LeetCode Solution in Python

class Solution:
  def maxSum(self, nums: list[int], k: int) -> int:
    kMod = 1_000_000_007
    kMaxBit = 30
    ans = 0
    # minIndices[i] := the minimum index in `optimalNums` that the i-th bit
    # should be moved to
    minIndices = [0] * kMaxBit
    optimalNums = [0] * len(nums)

    for num in nums:
      for i in range(kMaxBit):
        if num >> i & 1:
          optimalNums[minIndices[i]] |= 1 << i
          minIndices[i] += 1

    for i in range(k):
      ans += optimalNums[i]**2
      ans %= kMod

    return ans
# code by PROGIEZ

Additional Resources

See also  2244. Minimum Rounds to Complete All Tasks LeetCode Solution

Happy Coding! Keep following PROGIEZ for more updates and solutions.