algorithm - 如果你得到 7 则返回 3 的所有方法,反之亦然 - 面试问题

标签 algorithm performance time-complexity

这是我在面试中被问到的一个问题:
实现一个获取整数 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

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

似乎还有第四种方法……有什么建议吗?

最佳答案

怎么样

def foo(n)
  return 10 - n
end


foo(3) => 7
foo(7) => 3

关于algorithm - 如果你得到 7 则返回 3 的所有方法,反之亦然 - 面试问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53523148/

相关文章:

algorithm - Supercover DDA算法

python - 从数字范围创建数字掩码

c++ - 当初始化列表可用时,为什么现在使用可变参数?

algorithm - 是否存在可以在 O(n) 时间复杂度和 O(1) 辅助空间复杂度下对二进制数组进行排序的稳定排序算法?

algorithm - 有效生成具有固定设置位和已知按位与结果的随机二进制数

algorithm - 复杂求根算法

c++ - 如何使用KDTree进行任意维度的top-k查询和范围查询

html - 浏览器如何部分加载DOM和CSSOM?

java - 算法的复杂性

algorithm - 为什么自上而下的堆构建方法效率低于自下而上,即使它的增长顺序低于 O(n)?