3.26小红书算法笔试

第一题 密码学

就是ascii码转换,写出来就能a

第二题 K排序

时间复杂度应该有点高,最后只a了0.64,一开始暴力甚至只a了0.18。后续还有待研究提升速度

第三题 涂色

唯一保留了代码的题

一开始感觉和第一题很像,就是看图说话就行,但是最后应该是有几个用例时间超了,a了0.82

n = int(input())

S = list(map(int, input().split()))

m = int(input())

l = list(map(int, input().split()))

r = list(map(int, input().split()))

operate = input()

x = list(map(int, input().split()))

for i in range(m):

    if operate[i] == '|':

        for j in range(l[i]-1, r[i]):

            S[j] |= x[i]

    elif operate[i] == '&':

        for j in range(l[i]-1, r[i]):

            S[j] &= x[i]

    else:

        for j in range(l[i]-1, r[i]):

            S[j] = x[i]

res = list(map(str, S))

print(' '.join(res))

#我的实习求职记录##软件开发2023笔面经#
全部评论
记录一下第二题的升级版想法:先查找从1开始的最长递增子序列 l。然后看除了这个序列还剩多少个数(n-l),答案就是(n-l + k - 1)//k。解释一下就是,选最长的递增子序列,保证了只需要改动最少的数字个数,即最少的操作次数。每次只能操作K个,所以整除K,又因为最后剩的个数不到K个,也必须进行一次排序。所以是向上取整。ps.这里找从1开始的递增子序列是避免出现 6 7 8 9 1这样的情况发生。
点赞 回复 分享
发布于 2023-03-29 15:00 北京

相关推荐

Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
2 8 评论
分享
牛客网
牛客企业服务