牛客2021第三次校招模拟笔试(编程题部分)

Posted 南岸青栀*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客2021第三次校招模拟笔试(编程题部分)相关的知识,希望对你有一定的参考价值。

牛客【2021】第三次校招模拟笔试(编程题部分)

第一题:牛牛A+B

牛妹在黑板上写下两个正整数a,b。她想让牛牛帮忙计算“A+B”,牛牛一听,这还不简单?但是牛妹说:此“A+B”非彼“A+B”,而是要先把a重复b次,把b重复a次,再计算刚刚得到的这两个数字的和。

这下可难到了牛牛,请帮助牛牛解决这个问题吧!

现在给你a,b返回牛妹要求的正确答案。

在这里插入图片描述

思路:转换为字符串

class Solution:
    def NNAplusB(self , a , b ):
    	a,b = int(str(a)*b),int(str(b)*a)
    return a + b

第二题:牛妹的LIS

在这里插入图片描述
在这里插入图片描述

思路:找规律

首先因为n<=10^100000次方,所以就别写for循环了,更别写双层了,一定超时。

重新思考,出现一个数,要求子序列中的最大值。所以低位一定是“9”最好。
首先n<10,就是n本身

n刚好就是最大的子序列的最大值,例如:199,“199” = 19

n比最大子序列的最大值大,例如200,子序列最大“199” = 19
class Solution:
    def NS_LIS(self , n ):
        # write code here
        if len(n) == 1: 
            return int(n)
        res = n[0] + "9"*(len(n)-1)
        if int(res)>int(n)and res[0]!="1":
            res = str(int(n[0])-1) + res[1::]
        elif int(res)>int(n)and res[0]=="1":
            res = res[1::]
        s = 0
        for i in res:
            s  += int(i)
        return s

第三题:魔法师牛牛

在这里插入图片描述

思路:排序+前缀和

AC 58.33%

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param h int整型一维数组 
# @return int整型一维数组
#
class Solution:
    def Magical_NN(self , h ):
        # write code here

        dic= {}
        st = sorted(h)
        lst = [st[0]]
        for i in st[1::]:
            lst.append(lst[-1]+i)
        for i in range(len(h)):
            if h[i] not in dic:
                dic[h[i]] = (st.index(h[i])+1)*h[i] - lst[st.index(h[i])] - (len(st)-(st.index(h[i])+1))*h[i] + lst[-1]-lst[st.index(h[i])]
            h[i] = dic[h[i]]
        return h

以上是关于牛客2021第三次校招模拟笔试(编程题部分)的主要内容,如果未能解决你的问题,请参考以下文章

2017年校招全国统一模拟笔试(第三场)编程题集合--Python

2017年校招全国统一模拟笔试(第三场)编程题集合--Python

2017年校招全国统一模拟笔试(第四场)编程题集合--Python

2017年校招全国统一模拟笔试(第四场)编程题集合--Python

2017年校招全国统一模拟笔试(第二场)编程题集合--Python

2017年校招全国统一模拟笔试(第一场)编程题集合--Python