Skip to content

Latest commit

 

History

History
99 lines (72 loc) · 4.34 KB

1652.Defuse_the_Bomb(Easy).md

File metadata and controls

99 lines (72 loc) · 4.34 KB

1652. Defuse the Bomb (Easy)

Date and Time: Nov 18, 2024, 13:32 (EST)

Link: https://leetcode.com/problems/defuse-the-bomb/


Question:

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


Walk-through:

Identify k is greater, equal, or less than 0. If k == 0, we change all code[i] to be 0.

If k > 0: we use % to get the correct index. If we start at the last index i = 3, we create a variable curr = 3 and get the first element by (curr + 1) % len(code) = 4 % 4 = 0, and we increment the curr to get the rest elements and append the curSum to res[].

For k < 0, we use (len(code) + curr) % len(code) to get the correct index, because in this case we are taking the sum of k previous numbers. So, if we start at the last index i = 0 and curr = 0 - 1 = -1 (we don't include current index), we can get the previous element by (len(code) + curr) % len(code) = (4 + -1) % 4 = 3 % 4 = 3, we then decrement curr to get all the other sum.


Python Solution:

class Solution:
    def decrypt(self, code: List[int], k: int) -> List[int]:
        # If k > 0: curr % len(code), curr += 1
        # If k == 0, replace every ith to be 0
        # If k < 0: (len(code) + curr) % len(code), curr -= 1

        # TC: O(n), n = len(code), SC: O(n)
        res = []
        for i in range(len(code)):
            curr, curSum = i, 0
            if k == 0:
                res.append(0)
            else:
                for _ in range(abs(k)):
                    if k > 0:
                        curr += 1
                        index = curr % len(code)
                    else:
                        curr -= 1
                        index = (len(code) + curr) % len(code)
                    curSum += code[index]
                res.append(curSum)
        return res

Time Complexity: $O(n)$, n = len(code), for each element in code, we run $O(k)$ to calculate the sum of others.
Space Complexity: $O(n)$


CC BY-NC-SABY: credit must be given to the creatorNC: Only noncommercial uses of the work are permittedSA: Adaptations must be shared under the same terms