如果您得到7,所有返回3的方法,反之亦然–面试问题

时间:2018-11-28 15:42:06

标签: algorithm performance time-complexity

这是我在采访中被问到的一个问题:
实现一个获取整数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)运行时+空间复杂度,但是如果我们有大量数字而不是37,它可能会变得无效。

然后,面试官说:“如果不能使用数组怎么办?” -在这里我被卡住了。

似乎有第四种方式...有什么建议吗?

4 个答案:

答案 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
  1. 对于n = 7,foo(7)返回10-7 = 3。
  2. 对于n = 3,foo(3)返回10-3 = 7。
  3. 对于n的其他任何值,我都可以返回自己喜欢的任何数字,因此我返回10-n

因此,时间复杂度:O(1)和空间复杂度:O(1)

免责声明:我不是面试官。 :P