此解决方案的空间复杂性是多少?此代码反转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)) {
ans += (1 << (31-i));
}
}
return ans;
}
答案 0 :(得分:1)
你的函数只接受unsigned int,所以算法受sizeof(unsigned int)限制,所以它总是相同的,所以O(1)。
答案 1 :(得分: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具有固定大小。据我说,你的方法在O(1)。
如果我建议:您应该避免在代码中使用32来代码并将其替换为sizeof(A)*8
,这应该更具可移植性。 sizeof()
返回对象的字节大小。更多信息here。