充值网站源码php,重庆建设网站的公司简介,外贸建站需要花多少钱,网站建设与营销服务Problem: 面试题 05.03. 翻转数位 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.将十进制数转换为二进制数#xff08;每次按位与1求与#xff0c;并且右移#xff09;#xff1b; 2.依次求取二进制数中每一位的前缀1的数量和#xff0c;和后缀1的数量和… Problem: 面试题 05.03. 翻转数位 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.将十进制数转换为二进制数每次按位与1求与并且右移 2.依次求取二进制数中每一位的前缀1的数量和和后缀1的数量和代码实现时可以先用一个变量记录当当前位为1时将该变量加一否则置为0 3.依次循环查询每一个二进制数的前后缀1的和再加上1并从中取出最大值 复杂度
时间复杂度: O ( 1 ) O(1) O(1) 空间复杂度: O ( 1 ) O(1) O(1) Code
class Solution {
public:/*** Prefix and suffix sum* * param num Given array* return int*/int reverseBits(int num) {if (num 0) {return 1;}vectorint nums(32);for (int i 0; i 32; i) {nums[i] (num 1);num 1;}vectorint leftCounts(32);int count 0;for (int i 0; i 32; i) {leftCounts[i] count;if (nums[i] 1) {count;} else {count 0;}}count 0;vectorint rightCount(32);for (int i 31; i 0; --i) {rightCount[i] count;if (nums[i] 1) {count;} else {count 0;}}int maxOne leftCounts[0] rightCount[0] 1;for (int i 1; i 32; i) {if ((leftCounts[i] rightCount[i] 1) maxOne) {maxOne leftCounts[i] rightCount[i] 1;}}return maxOne;}
};