Minimize operations to reduce integer to zero
SalesforceSoftware Engineer · OnsiteLast updated
This problem tests your ability to optimize mathematical transformations on an integer using greedy strategies or dynamic programming by analyzing the parity and binary representation of the input.
Problem Statement
Given an integer n, you can perform the following two operations:
- If
nis even, divide it by 2:n = n / 2. - If
nis odd, you can either add 1 or subtract 1:n = n + 1orn = n - 1.
Return the minimum number of operations required to reduce n to 1.
Constraints
- `1 4 -> 2 -> 1 (3 operations).
Example 2:
Input: n = 7
Output: 4
Explanation: 7 -> 8 -> 4 -> 2 -> 1 (4 operations). Alternatively, 7 -> 6 -> 3 -> 2 -> 1 is also 4 operations.
Edge Cases
n = 1: Should return 0 operations.n = 3: Can go 3 -> 4 -> 2 -> 1 or 3 -> 2 -> 1 (both take 2 operations).
Function Signature
def min_operations(n: int) -> int:
pass
Hints
Hint 1
If the number is even, dividing by 2 is almost always better than adding or subtracting 1 because it reduces the magnitude of the number faster.
Hint 2
When the number is odd, consider the binary representation; adding 1 or subtracting 1 changes the number of trailing ones, which affects how many divisions by 2 you can perform subsequently.
Hint 3
For odd numbers, observe that n = 3 (binary 11) is a special case where subtracting 1 is strictly better than adding 1, while for other odd numbers ending in ...01, subtracting is generally better.
Follow-up questions
- How would your approach change if you were only allowed to subtract 1 instead of adding 1?
- Can you solve this problem iteratively without using recursion to avoid stack overflow for very large integers?
- What is the time complexity of your solution in terms of the number of bits in n?
Solution walkthrough is for members
Get the full walkthrough with reference code and complexity analysis, plus Kitty Coach at 300 messages a day. Hints, the code runner and community answers stay free.