【问题标题】:All the ways to return 3 if you get 7 and vice versa – interview question如果你得到 7 则返回 3 的所有方法,反之亦然 – 面试问题
【发布时间】: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) 运行时 + 空间复杂度,如果我们有大量数字而不是 37,它可能是非效率的。

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

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

【问题讨论】:

  • 面试不是问what if you can't use +,-,*,/,%吗?
  • @vivek_23 大声笑,在不使用数学运算的情况下添加了第二个解决方案

标签: algorithm performance time-complexity


【解决方案1】:

怎么样

def foo(n)
  return 10 - n
end


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

【讨论】:

    【解决方案2】:

    这个怎么样

    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))

    【讨论】:

    • 不错,+1。但是我偏爱减法,因为当 n 为 0 时,这会导致错误。
    • 你是对的。我想知道为什么我首先考虑除法而不是减法大声笑
    • @ChristhoferNatalius Nice +1。
    【解决方案3】:

    另一个是。 (n + 4) % 8.

    “所有的方式”肯定是无限的。

    【讨论】:

      【解决方案4】:

      第四种方式:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-16
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-09
        • 2022-08-16
        相关资源
        最近更新 更多