【面经】京东搜索广告算法一面

一面面了 2 个小时,把项目问了个底朝天

1. 项目

面试官问的超级细,问到底朝天的那种,一个项目问了一个小时

  1. 激活函数选啥
  2. 调参

2. 手撕代码

1、 删除字符串中连续重复的字符
只保留一个字符(比如:“aabbadc” -> “abadc”, “aaaaadcbad” -> adcbad)
要求空间复杂度O(1)

remove2() 有问题,因为 python 没办法做字符串的赋值,后续再完善

def remove(s):
  new_s = []
  for i in range(len(s)):
    if s[i] != s[i-1]:
      new_s.append(s[i])
    else:
      pass
  return new_s

def remove2(s):

  pre = 0
  cur = 1
  for i in range(len(s)):
    if cur != pre:
      s[pre] = s[cur]
      cur += 1
      pre += 1
    else:
      pass
  return s
  
# if __name__ == '__main__':
#   s = 'aaaaadcbad'
  
#   res = remove2(s)
#   print(res)

2、【青蛙跳台阶】
有一座高度是N级台阶的楼梯,从下往上走
每跨一步只能向上1级或者2级台阶
要求用程序求出一共有多少种走法
尽可能降低时间、空间复杂度

def numWay(N):
  # dp = [0] * (N+1)
  # dp[0] = 0
  pre = 0
  # dp[1] = 1
  cur = 1
  for i in range(2, N+1):
    # dp[i] = dp[i-1] + dp[i-2]
    temp = cur
    cur = pre + cur
    pre = temp
  # return dp[-1]
  return cur
  
if __name__ == '__main__':
  N = 3
  res = numWay(N)
  print(res)

3、概率题:(x1, p1), (x2, p2), …
扔硬币直到连续两次出现正面,求扔的期望次数。硬币正面出现概率1/3,反面概率2/3
假设期望次数为E

解答:

  1. 反:0.5(1+E)
  2. 正-反:0.25(2+E)
  3. 正-正:0.252
    E = 0.5(1+E) + 0.25(2+E) + 0.25
    2
    E = 6

参考:
投骰子连续两次是 6就停止,求投掷的次数的期望 & 系列变形(字节跳动面试)

猜你喜欢

转载自blog.csdn.net/weixin_41888257/article/details/108218997