1652. Defuse the Bomb

You have a bomb to defuse, and your time is running out! Your informer will provide you with a circular array code of length of n and a key k.

To decrypt the code, you must replace every number. All the numbers are replaced simultaneously.

  • If k > 0, replace the ith number with the sum of the next k numbers.
  • If k < 0, replace the ith number with the sum of the previous k numbers.
  • If k == 0, replace the ith number with 0.

As code is circular, the next element of code[n-1] is code[0], and the previous element of code[0] is code[n-1].

Given the circular array code and an integer key k, return the decrypted code to defuse the bomb!

Example 1:

Input: code = [5,7,1,4], k = 3
Output: [12,10,16,13]
Explanation: Each number is replaced by the sum of the next 3 numbers. The decrypted code is [7+1+4, 1+4+5, 4+5+7, 5+7+1]. Notice that the numbers wrap around.

Example 2:

Input: code = [1,2,3,4], k = 0
Output: [0,0,0,0]
Explanation: When k is zero, the numbers are replaced by 0. 

Example 3:

Input: code = [2,4,9,3], k = -2
Output: [12,5,6,13]
Explanation: The decrypted code is [3+9, 2+3, 4+2, 9+4]. Notice that the numbers wrap around again. If k is negative, the sum is of the previous numbers.

Constraints:

  • n == code.length
  • 1 <= n <= 100
  • 1 <= code[i] <= 100
  • -(n - 1) <= k <= n - 1

Approach 01:

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    vector<int> decrypt(vector<int>& code, int k) {
        int n = code.size();
        vector<int> result(n, 0);

        // If k is 0, return an array of zeros
        if (k == 0) {
            return result;
        }

        // For positive k, sum the next k elements
        if (k > 0) {
            for (int i = 0; i < n; ++i) {
                int total = 0;
                for (int j = 1; j <= k; ++j) {
                    total += code[(i + j) % n];
                }
                result[i] = total;
            }
        } else {
            // For negative k, sum the previous k elements
            k = abs(k);
            for (int i = 0; i < n; ++i) {
                int total = 0;
                for (int j = 1; j <= k; ++j) {
                    total += code[(i - j + n) % n];
                }
                result[i] = total;
            }
        }

        return result;
    }
};
from typing import List

class Solution:
    def decrypt(self, code: List[int], k: int) -> List[int]:
        n = len(code)
        
        # If k is 0, return an array of zeros
        if k == 0:
            return [0] * n

        result = [0] * n
        if k > 0:
            # For positive k, sum the next k elements
            extendedCode = code + code[:k]
            for i in range(n):
                result[i] = sum(extendedCode[i + 1:i + k + 1])
        else:
            # For negative k, sum the previous k elements
            k = abs(k)
            extendedCode = code[-k:] + code
            for i in range(n):
                result[i] = sum(extendedCode[i:i + k])

        return result

Time Complexity

  • Initialization:

    Creating the result vector of size n takes \( O(n) \) time.

  • When k == 0:

    If k is zero, the function returns an array of zeros in \( O(n) \) time.

  • When k > 0:

    For each element in the array (n elements), the function sums up the next k elements using a loop that runs \( O(k) \) times.

    Thus, the overall time complexity is \( O(n \times k) \).

  • When k < 0:

    Similarly, for negative k, the function sums up the previous k elements, which also takes \( O(n \times k) \) time.

  • Overall Time Complexity:

    The overall time complexity is \( O(n \times |k|) \).

Space Complexity

  • Result Vector:

    The algorithm uses a result vector of size n to store the output, which takes \( O(n) \) space.

  • Auxiliary Variables:

    Other variables such as n, k, and total require constant space \( O(1) \).

  • Overall Space Complexity:

    The overall space complexity is \( O(n) \) due to the result vector.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top