这是我在采访中被问到的一个问题:
实现一个获取整数n并执行以下操作的函数:
1.如果n为3->返回7.
2.否则,如果n为7->返回3.
3.否则返回您喜欢的任何数字(未定义的行为)。
还描述每种方式的运行时间和空间复杂度。
因此,我首先给出了使用if-else语句的简单方法-并说它是O(1)
运行时+空间复杂度。然后面试官说:“如果不能使用if语句(包括切换用例和其他if语句相似性)怎么办?”
因此,我建议使用按位运算:return n^=4
。说是O(1)
运行时+空间复杂度。然后面试官说:“如果不能使用按位运算怎么办?”
所以我建议使用这样的数组:
int mem[8] = {-1, -1, -1, 7, -1, -1, -1, 3};
return mem[n];
假设是O(1)
运行时+空间复杂度,但是如果我们有大量数字而不是3
和7
,它可能会变得无效。
然后,面试官说:“如果不能使用数组怎么办?” -在这里我被卡住了。
似乎有第四种方式...有什么建议吗?
答案 0 :(得分:8)
怎么样
def foo(n)
return 10 - n
end
foo(3) => 7
foo(7) => 3
答案 1 :(得分:7)
怎么样
function myfunc(n) {
return 21 / n
}
console.log(myfunc(7))
console.log(myfunc(3))
更新:#2解决方案
function myfunc(n) {
return "37".replace(n, "")
}
console.log(myfunc(7))
console.log(myfunc(3))
答案 2 :(得分:2)
另一个是。 (n + 4) % 8
。
“所有方式”肯定是无限的。
答案 3 :(得分:0)
第四种方式:
def foo(n):
return 10-n
10-n
。因此,时间复杂度:O(1)
和空间复杂度:O(1)
。
免责声明:我不是面试官。 :P