commit 45170406deedd920af6ebe88b0e309f255d52c37
parent 1af9cba05269900677e23e3bbfedd3b7075e6d30
Author: Jack Sangdahl <jack@pngu.org>
Date: Fri, 7 Nov 2025 21:29:03 -0700
1611. minimum one bit operations to make integers zero
Diffstat:
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/min_one_bit_op_zero.c b/min_one_bit_op_zero.c
@@ -10,20 +10,20 @@
*/
int minimumOneBitOperations(int n) {
- int tmp = n, sign = 1, cnt = 0, pos = 0;
- while (tmp) {
- if (tmp & (1 << pos)) {
- cnt += sign * ((1 << (pos + 1)) - 1);
- tmp &= ~(1 << pos);
- sign *= -1;
+ if (!n)
+ return 0;
+ int acc = 0, sign = 1;
+ int highest = 31 - __builtin_clz(n);
+ for (int i = highest; i >= 0; --i) {
+ if ((n >> i) & 1) {
+ acc += sign * ((1 << (i + 1)) - 1);
+ sign = -sign;
}
- pos--;
}
- return cnt;
+ return acc;
}
int main() {
- printf("%d\n", minimumOneBitOperations(3)); // expect: 2
- printf("%d\n", minimumOneBitOperations(6)); // expect: 4
- printf("%d\n", minimumOneBitOperations(8174)); // expect: N/A
+ printf("%d\n", minimumOneBitOperations(3)); // expect: 2
+ printf("%d\n", minimumOneBitOperations(6)); // expect: 4
}