3766. Minimum Operations to Make Binary Palindrome
SourceBiweekly Contest 171 Q2DifficultyMediumRating1656
Description
You are given an integer array nums.
For each element nums[i], you may perform the following operations any number of times (including zero):
- Increase
nums[i]by 1, or - Decrease
nums[i]by 1.
A number is called a binary palindrome if its binary representation without leading zeros reads the same forward and backward.
Your task is to return an integer array ans, where ans[i] represents the minimum number of operations required to convert nums[i] into a binary palindrome.
Example 1:
Input: nums = [1,2,4]
Output: [0,1,1]
Explanation:
One optimal set of operations:
nums[i] | Binary(nums[i]) | Nearest Palindrome | Binary (Palindrome) | Operations Required | ans[i] |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | Already palindrome | 0 |
| 2 | 10 | 3 | 11 | Increase by 1 | 1 |
| 4 | 100 | 3 | 11 | Decrease by 1 | 1 |
Thus, ans = [0, 1, 1].
Example 2:
Input: nums = [6,7,12]
Output: [1,0,3]
Explanation:
One optimal set of operations:
nums[i] | Binary(nums[i]) | Nearest Palindrome | Binary (Palindrome) | Operations Required | ans[i] |
|---|---|---|---|---|---|
| 6 | 110 | 5 | 101 | Decrease by 1 | 1 |
| 7 | 111 | 7 | 111 | Already palindrome | 0 |
| 12 | 1100 | 15 | 1111 | Increase by 3 | 3 |
Thus, ans = [1, 0, 3].
Constraints:
1 <= nums.length <= 50001 <= nums[i] <= 5000
Solutions
Solution 1: Preprocessing + Binary Search
Thinking
\(nums[i]\le 5000\), so the nearest binary palindrome stays in a modest range. We precompute every binary palindrome below \(2^{14}\) and, for each \(x\), binary-search the two neighbors and take the smaller absolute difference.
We observe that the range of numbers given in the problem is only \([1, 5000]\). Therefore, we directly preprocess all binary palindromic numbers in the range \([0, 2^{14})\) and store them in an array, denoted as \(\textit{p}\).
Next, for each number \(x\), we use binary search to find the first palindromic number greater than or equal to \(x\) in the array \(\textit{p}\), denoted as \(\textit{p}[i]\), as well as the first palindromic number less than \(x\), denoted as \(\textit{p}[i - 1]\). Then, we calculate the number of operations required to convert \(x\) to these two palindromic numbers and take the minimum value as the answer.
The time complexity is \(O(n \times \log M)\), and the space complexity is \(O(M)\). Where \(n\) is the length of the array \(\textit{nums}\), and \(M\) is the number of preprocessed binary palindromic numbers.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | |