郑州做网站和域名,treeson wordpress,wordpress vip付费,优化关键词的方法包括颠倒给定的 32 位无符号整数的二进制位。
提示#xff1a;
请注意#xff0c;在某些语言#xff08;如 Java#xff09;中#xff0c;没有无符号整数类型。在这种情况下#xff0c;输入和输出都将被指定为有符号整数类型#xff0c;并且不应影响您的实现#xff0c;因…颠倒给定的 32 位无符号整数的二进制位。
提示
请注意在某些语言如 Java中没有无符号整数类型。在这种情况下输入和输出都将被指定为有符号整数类型并且不应影响您的实现因为无论整数是有符号的还是无符号的其内部的二进制表示形式都是相同的。
解法一
#include stdint.huint32_t reverseBits(uint32_t n) {uint32_t res 0;int i;for (i 0; i 32; i) {res 1;res | n 1;n 1;}return res;
}
从给定的 32 位无符号整数 n 的最低位开始逐位取出并存放到结果 res 的最高位然后 n 向右移动一位res 向左移动一位直到 n 的所有位都取完
时间复杂度分析
原始算法中我们需要遍历给定的 32 位无符号整数的所有位进行逐位的颠倒操作。 由于只有固定的 32 位因此遍历的时间复杂度为 O(32)即 O(1)。
空间复杂度分析
原始算法并没有使用额外的空间只使用了几个整型变量来保存中间结果因此空间复杂度为 O(1)。
解法二
#include stdint.huint32_t reverseBits(uint32_t n) {n (n 16) | (n 16);n ((n 0xFF00FF00) 8) | ((n 0x00FF00FF) 8);n ((n 0xF0F0F0F0) 4) | ((n 0x0F0F0F0F) 4);n ((n 0xCCCCCCCC) 2) | ((n 0x33333333) 2);n ((n 0xAAAAAAAA) 1) | ((n 0x55555555) 1);return n;
}
通过位运算来同时颠倒相邻的位
时间复杂度分析
优化后的算法通过位运算来同时颠倒相邻的位而不是逐位进行操作。 通过多次使用位移和按位与运算将原始的 32 位整数颠倒。 优化后算法的时间复杂度取决于位运算的时间复杂度位运算的时间复杂度通常为 O(1)。 空间复杂度分析
优化后算法仍然只使用了几个整型变量来保存中间结果因此空间复杂度也为 O(1)。