C++ 位反转的空间复杂度
此解决方案的空间复杂度是多少?此代码反转32位无符号整数的位。我不确定空格是否为O(N),因为在返回答案之前复制所有位,或者这是否被视为O(1),因为答案的大小不取决于输入a的大小C++ 位反转的空间复杂度,c++,bit-manipulation,space-complexity,C++,Bit Manipulation,Space Complexity,此解决方案的空间复杂度是多少?此代码反转32位无符号整数的位。我不确定空格是否为O(N),因为在返回答案之前复制所有位,或者这是否被视为O(1),因为答案的大小不取决于输入a的大小 unsigned int Solution::reverse(unsigned int A) { unsigned int ans = 0; for (unsigned int i = 0; i < 32 ; ++i) { if (A & (1 << i)) {
unsigned int Solution::reverse(unsigned int A) {
unsigned int ans = 0;
for (unsigned int i = 0; i < 32 ; ++i) {
if (A & (1 << i)) {
ans += (1 << (31-i));
}
}
return ans;
}
unsigned int解决方案::反向(unsigned int A){
无符号整数ans=0;
for(无符号整数i=0;i<32;++i){
如果(A&(1你的函数只取无符号整数,那么算法是以sizeof(unsigned int)为界的,所以它总是一样的,所以O(1)。你的函数只取无符号整数,算法是以sizeof(unsigned int)为界的,所以它总是一样的,所以O(1)。如果我们试图逐行分析你的代码:
unsigned int Solution::reverse(unsigned int A) {
unsigned int ans = 0; // O(1)
for (unsigned int i = 0; i < 32 ; ++i) { // O(1)
if (A & (1 << i)) { // O(1)
ans += (1 << (31-i)); // O(1)
}
}
return ans;
}
unsigned int解决方案::反向(unsigned int A){
无符号整型ans=0;//O(1)
对于(无符号整数i=0;i<32;++i){//O(1)
如果(A&(1如果我们试图逐行分析您的代码:
unsigned int Solution::reverse(unsigned int A) {
unsigned int ans = 0; // O(1)
for (unsigned int i = 0; i < 32 ; ++i) { // O(1)
if (A & (1 << i)) { // O(1)
ans += (1 << (31-i)); // O(1)
}
}
return ans;
}
unsigned int解决方案::反向(unsigned int A){
无符号整型ans=0;//O(1)
对于(无符号整数i=0;i<32;++i){//O(1)
如果(A&(1)如果A
是64位,那么使用的空间会如何变化?在我看来,它会加倍,因此O(n)
似乎是合适的。如果您从未更改输入大小,那么O(1)
用于32位输入。这是没有意义的,没有更多信息。对于单个值来说,它的复杂度是常数。如果对N
值调用它,这显然是线性复杂度。如果a
是64位,使用的空间会如何变化?在我看来,它会加倍,所以O(N)
似乎是合适的。如果您从未更改输入大小,则对于32位输入而言,O(1)
。这是毫无意义的,没有更多信息。对于单个值来说,这是常数复杂性。如果对N
值调用,这显然是线性复杂性。