码迷,mamicode.com
首页 > 其他好文 > 详细

是时候刷笔试题目了

时间:2018-06-15 21:46:31      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:+=   orderby   8K   derby   笔试   tmp   连续   返回   mem   

基础很差,计算机操作系统,组成原理,网络都不懂.我就以题带学了

https://www.nowcoder.com/contestRoom?filter=0&orderByHotValue=1&mutiTagIds=179&page=1

就从美团做起.

 美团点评2017秋招笔试编程题 全部自己写的ac代码.都是左神讲过的题目!自己掌握还是不好.

技术分享图片
#美团2017笔试
‘‘‘
给你六种面额 15102050100 元的纸币,假设每种币值的数量都足够多,
编写程序求组成N元(N为0~10000的非负整数)的不同组合的个数。
‘‘‘
a=input()
a=int(a)
memo={}
list1=[1,5,10,20,50,100]
def main(num,a):#只用[1,5,10,20,50,100][:num+1]来组合答案多少来组a元:背包问题
    if (num,a) in memo:
        return memo[(num,a)]
    if num==0:
        return 1
    maxi=a//list1[num]
    output=0
    for i in range (maxi+1):
        output+=main(num-1,a-list1[num]*i)
    memo[(num,a)]=output
    return output
print(main(5,a))
‘‘‘
大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时
可以走两步,点数为n时可以走n步。求玩
家走到第n步(n<=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法。
‘‘‘
a=input()
a=int(a)
def main(num):
    if num==0:
        return 0
    if num==1:
        return 1
    if num-1>=0:
        tmp= main(num-1)+1
    if num-2>=0:
        tmp= main(num-2)+tmp
    if num-3>=0:
        tmp= main(num-3)  +tmp    
    if num-4>=0:
        tmp= main(num-4) +tmp   
    if num-5>=0:
        tmp= main(num-5)  +tmp
    if num-6>=0:
        tmp= main(num-6)  +tmp
    return tmp
print(main(a))
#第三题单调栈比较复杂先写最后一个
#第四题:修改kmp算法.kmp只是判断a是不是b的子串.好像直接动态规划就行.
#第四题:
‘‘‘
给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度。 
‘‘‘
a=input()
b=input()



    
if len(a)>len(b):
    a,b=b,a
def main(a,b):
 if len(a)==0 or len(b)==0 or a==None or b==None or a==‘‘ or b==‘‘:
     return 0
 maxi=0
 for i in range(len(a)):
    for j in range(len(a),i,-1):
        for ii in range(len(b)):
            jj=ii+j-i
            if a[i:j]==b[ii:jj]:
                out=j-i
                if maxi<out:
                    maxi=out

 return maxi

print(main(a,b))
‘‘‘
disanti
‘‘‘
‘‘‘
第三题:
[编程题] 最大矩形面积
时间限制:1秒
空间限制:32768K
给定一组非负整数组成的数组h,代表一组柱状图的高度,其中每个柱子
的宽度都为1。 在这组柱状图中找到能组成的最大矩形的面积(如图所示)。
入参h为一个整型数组,代表每个柱子的高度,返回面积的值。
单调栈即可,并且是一个不用处理重复值的单调栈,比较简单
‘‘‘

chang=input()
list1=input().split( )
chang=int(chang)
for i in range(len(list1)):
    list1[i]=int(list1[i])
zhan=[]
i=0
area=0
while i<chang:#zhan中维护的是索引
    tmp=list1[i]
    if len(zhan)==0:
        zhan.append(i)
        i+=1
        continue
    if tmp>list1[zhan[-1]]:
        zhan.append(i)
        i+=1
    else:
        now=list1[zhan.pop()]
        if zhan!=[]:
            areanow=(i-zhan[-1]-1)*now
            if areanow>area:
                area=areanow
        else:
            areanow=(i)*now
            if areanow>area:
                area=areanow
#都弹完了还剩一些元素,继续处理即可.
for i in range(len(zhan)-1,-1,-1):
    if i !=0:
        areanow=list1[zhan[i]]*(chang-zhan[i-1]-1)
        if areanow>area:
            area=areanow

    if i==0:
        areanow=list1[zhan[i]]*(chang)
        if areanow>area:
            area=areanow
print(area)

‘‘‘
7
2 2 5 6 2 3 2

你妈第三题改了好多遍才过,写的虽然逻辑对,但是确实很别扭,和繁琐.

n = int(input())
h = [int(x) for x in input().split()]#我靠,原来大神是这么写的读取数据

‘‘‘
View Code

 

是时候刷笔试题目了

标签:+=   orderby   8K   derby   笔试   tmp   连续   返回   mem   

原文地址:https://www.cnblogs.com/zhangbo2008/p/9188950.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!