网易互联网算法编程题分享

1. 橡皮泥斑马

图片说明

  • 思路:滑动窗口法,无论反转几次形成的字符串都是s+s的子串或逆序子串,只需在s+s中查找最长连续反转子串长度(不超过n)即可;时间复杂度O(n)
  • 代码:
s = raw_input()
n = len(s)
l = r = res = 0
while l < n and r < l + n - 1:
    if s[(r+1)%n] != s[r%n]:
        r += 1
    else:
        l, r, res = r + 1, r + 1, max(res, r-l+1)

print max(res, r-l+1)

2. 翻转翻转

图片说明

  • 思路:讨论每个节点的邻接点个数为偶数的个数即可,时间复杂度O(1)
  • 代码:
t = input()
for _ in xrange(t):
    n,m = map(int,raw_input().split())
    print [n-2,1][n==1] * [m-2,1][m==1]

3. 香槟塔

图片说明

  • 思路:逐层下流直至层数超出总层数或者下流量为0;单次调整时间复杂度O(n)
  • 代码:
n,m = map(int,raw_input().split())
a = map(int,raw_input().split())
vs = [0] * n 
for _ in xrange(m):
    tmp = map(int,raw_input().split())
    if tmp[0] == 1:
        print vs[tmp[1]-1]
    else:
        x,v = tmp[1] - 1, tmp[2]
        while v and x < n:
            vs[x], v = min(a[x],vs[x]+v), max(0, vs[x]+v-a[x])
            x += 1
#网易##笔试题目##题解#
全部评论
娘子,跟牛魔王出来看上帝啊
点赞 回复 分享
发布于 2018-09-08 17:37
第三题加个并查集优化。否则赶紧会超时。 比如100000个 2 1 100000000,你的算法就是O(n^2)
点赞 回复 分享
发布于 2018-09-09 08:52
真的秀
点赞 回复 分享
发布于 2018-09-09 00:06
不懂就问:请问下楼主,为什么一定是s+s的子串?
点赞 回复 分享
发布于 2018-09-08 18:28
第一题: 为什么“无论反转几次形成的字符串都是s+s的子串”,求大佬解释下,谢谢
点赞 回复 分享
发布于 2018-09-08 17:56
代码3的12,13行是不是应该换位一下啊
点赞 回复 分享
发布于 2018-09-08 17:54
打扰了
点赞 回复 分享
发布于 2018-09-08 17:45
大家快来围观神仙
点赞 回复 分享
发布于 2018-09-08 17:41
这就是大佬吧 都这么简短
点赞 回复 分享
发布于 2018-09-08 17:40
优秀
点赞 回复 分享
发布于 2018-09-08 17:32
太优秀了啊
点赞 回复 分享
发布于 2018-09-08 17:25
第二题有点秀
点赞 回复 分享
发布于 2018-09-08 17:24
优秀
点赞 回复 分享
发布于 2018-09-08 17:20
出来看神仙
点赞 回复 分享
发布于 2018-09-08 17:17

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务