【发布时间】:2018-11-28 15:42:06
【问题描述】:
这是我在一次采访中被问到的一个问题:
实现一个获取整数 n 并执行以下操作的函数:
1. 如果 n 为 3 -> 返回 7.
2. 如果 n 为 7,则返回 3.
3. 否则返回任何你喜欢的数字(未定义的行为)。
还要描述每种方式的运行时间和空间复杂度。
所以首先我给出了使用 if-else 语句的简单方法 - 并说它是 O(1) 运行时 + 空间复杂度。然后面试官说:“如果你不能使用 if 语句(包括 switch-case 和其他 if 语句的相似之处)怎么办?”
所以我建议使用按位运算:return n^=4。说是O(1)运行时+空间复杂度。然后面试官说:“不能按位运算怎么办?”
所以我建议使用这样的数组:
int mem[8] = {-1, -1, -1, 7, -1, -1, -1, 3};
return mem[n];
说它是 O(1) 运行时 + 空间复杂度,如果我们有大量数字而不是 3 和 7,它可能是非效率的。
然后面试官说:“不能用数组怎么办?” - 我在这里卡住了。
似乎还有第四种方式……有什么建议吗?
【问题讨论】:
-
面试不是问
what if you can't use +,-,*,/,%吗? -
@vivek_23 大声笑,在不使用数学运算的情况下添加了第二个解决方案
标签: algorithm performance time-complexity