博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
是时候刷笔试题目了
阅读量:6309 次
发布时间:2019-06-22

本文共 7576 字,大约阅读时间需要 25 分钟。

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

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

就从美团做起.

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

#美团2017笔试'''给你六种面额 1、5、10、20、50、100 元的纸币,假设每种币值的数量都足够多,编写程序求组成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 outputprint(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 tmpprint(main(a))#第三题单调栈比较复杂先写最后一个#第四题:修改kmp算法.kmp只是判断a是不是b的子串.好像直接动态规划就行.#第四题:'''给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度。 '''a=input()b=input()    if len(a)>len(b):    a,b=b,adef 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
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=areanowprint(area)'''72 2 5 6 2 3 2你妈第三题改了好多遍才过,写的虽然逻辑对,但是确实很别扭,和繁琐.n = int(input())h = [int(x) for x in input().split()]#我靠,原来大神是这么写的读取数据'''
View Code

 美团点评2016研发工程师在线编程题

'''美团点评2017秋招笔试真题-运维工程师B太惨了,就42分我就是坚持以题带学,这样能速成一点,基础不会以后慢慢补吧.TCP/IP:数据链路层:ARP,RARP网络层: IP,ICMP,IGMP传输层:TCP ,UDP,UGP应用层:Telnet,FTP,SMTP,SNMP.''''''美团点评2017秋招笔试真题-算法工程师A我操大数据题目这么多我,几乎全错.只是前面数据结构的基本都对了ABCD都是降维的常用方法:A. Latent Dirichlet Allocation把文档投影到了“topic”空间,可以理解为降维B. word2vec 是它在给定的语料库上训练一个模型,输出出现在语料库上中单词的向量(word embedding)表示,NLP中传统的词表示方法是把每个单词表示成dim(词汇量大小)维的稀疏向量,这个稀疏向量只有一个维度(该单词的index)上是1,其余全是0,单词之间孤立,word embedding则是把单词的表示降维到n维的稠密向量,n<
len(str3):#这个情况复杂,但是分析之后发现跟上面一样,就是循环里面改了 for j in range(len(str3)): count+=(ord(str4[j])-ord('a'))*26**(i-j-1) return countprint(main(str2,first,end)-main(str1,first,end)-1)
View Code

 原来上面的字符串题目需要用while 包一下就行了.他需要处理的是多组数据

while 1:   try:    a=input().split(' ')    str1=a[0]    str2=a[1]    first=int(a[2])    end=int(a[3])    def main(str3,kai ,end):#返回比str3小比 'a'大的字符串的个数.长度从kai到end双包含.也                          #就是从字典的第一个字符算起        count=0        for i in range(kai,end+1):            #i是当前位数            if i 
len(str3):#这个情况复杂,但是分析之后发现跟上面一样,就是循环里面改了 for j in range(len(str3)): count+=(ord(str4[j])-ord('a'))*26**(i-j-1) return count print(main(str2,first,end)-main(str1,first,end)-1) except: break
View Code

 

'''[编程题] 奇数位丢弃时间限制:1秒空间限制:32768K对于一个由0..n的所有数按升序组成的序列,我们要进行一些筛选,每次我们取当前所有数字中从小到大的第奇数位个的数,并将其丢弃。重复这一过程直到最后剩下一个数。请求出最后剩下的数字。'''#先写暴力的:原来只需要while 1 try except包一下就行了.他需要输入的是多组数据.#while 1:#  try:#    a=int(input())#    def main(num):#        num=range(num+1)#        k=[]#        for i in num:#            k.append(i)#        while len(k)>1:#            k=k[1::2]    #        return k[0]#    print(main(a))#  except:#     break#真正的解决是用2进制来处理这个问题.'''比如:0,1,2,3,4,5那么做用一次是1,3,5 第i次删除的是2进制表达倒数第i个位置是0的数.所以最后的数一定是2进制表达全是1的数.也就是说def main(n)返回比n小=的最大的2进制表达全是1的数即可.'''#牛逼代码while 1:  try:    a=int(input())    def main(n):        a=bin(n)        a=a[2:]        if a=='1'*len(a):            return int(a,2)        else:            return int('1'*(len(a)-1),2)    print(main(a))  except:     break#问题完结!
View Code

 

'''[编程题] 股票交易日时间限制:3秒空间限制:32768K在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用实践复杂度低的方法实现。给定价格序列prices及它的长度n,请返回最大收益。保证长度小于等于500。显然是左神说的预处理数组问题''''''[编程题] 股票交易日时间限制:3秒空间限制:32768K在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用实践复杂度低的方法实现。给定价格序列prices及它的长度n,请返回最大收益。保证长度小于等于500。显然是左神说的预处理数组问题,当然这个题目的预处理数组实在是操作非常多!不难但是多.'''class Stock:    def maxProfit(self, prices, n):        #先做一个left  left[i]表示第i天卖会最大赚多少钱.        left=[0]        list1=prices        mini=list1[0]        for i in range(len(list1)):            if i==0:                continue            if list1[i]
maxi: maxi=list1[i] right.append(0) else: right.append(maxi-list1[i]) right=right print(left) print(right) out=[0] #处理最大值 maxi=left[0] for i in range(len(left)): if left[i]
View Code

 s刷百度:

'''[编程题] 有趣的排序时间限制:1秒空间限制:32768K度度熊有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的度度熊只会下面这个操作:任取数组中的一个数然后将它放置在数组的最后一个位置。问最少操作多少次可以使得数组从小到大有序? 输入描述:首先输入一个正整数N,接下来的一行输入N个整数。(N <= 50, 每个数的绝对值小于等于1000)输入例子1:419 7 8 25输出例子1:2这题目好难!!!!!!!!!!!!想了接近2个小时应该思考一下对于算法问题的整体思路该如何.1.找数据结构依附的已经经常使用的算法看看差别和变形.(还是转化思想,看跟已经会的有什么不同,做转化)2.直接问题自己解决自己也就是(递归) (基本就这2个思路)模拟过程找思路'''a=input()b=[int(i) for i in input().split(' ')]def main(list1):    assist=[0]*len(list1) #0表示这个数位的数不动,1表示动    for i in range(len(list1)):        #维护动的最大数值,和不动的最小数值.        #新插入的数,首先把它前面的数比他大的都标记为动.        #插入一个数如果他比前面不动的都大 这个新数就标记不动 效率N^2 else:biaoji dong        if i==0:            continue        for ii in range(i):            if list1[ii]>list1[i]:                assist[ii]=1        for ii in range(i):            if list1[ii]
View Code

 

'''三维空间中有N个点,每个点可能是三种颜色的其中之一,三种颜色分别是红绿蓝,分别用'R', 'G', 'B'表示。 现在要找出三个点,并组成一个三角形,使得这个三角形的面积最大。但是三角形必须满足:三个点的颜色要么全部相同,要么全部不同。'''#原来空间三角形用 向量的叉积来算.def chaji(xiangliang1,xiangliang2):    i1=xiangliang1[0]    j1=xiangliang1[1]    i2=xiangliang2[0]    j2=xiangliang2[1]    out=[i1*j2-i2*j1,j1-j2,i2-i1]    mianji=abs(out[0])//2    return out,mianjiprint(chaji([1,2],[3,4]))
View Code
'''链接:https://www.nowcoder.com/questionTerminal/adc291e7e79f452c8b59243a5ce68d3a来源:牛客网首页 > 试题广场 > 有趣的排序[编程题]有趣的排序热度指数:15246 时间限制:1秒 空间限制:32768K 算法知识视频讲解度度熊有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的度度熊只会下面这个操作:任取数组中的一个数然后将它放置在数组的最后一个位置。问最少操作多少次可以使得数组从小到大有序?链接:https://www.nowcoder.com/questionTerminal/adc291e7e79f452c8b59243a5ce68d3a来源:牛客网思路来自于: 我才是你爸爸若是没有看懂他的讲解的话,可以看看我的理解,希望对大家有帮助!思路:其实可以想象成是一个从小到大递增的数组A中插入了若干数字导致数组A变成了无序的数组B。 我们的任务就是把插入的若干数组挪到最后即刻。比如说:数组B:[6, 1, 7, 2, 5, 4] 是从数组A:[1, 2, 4]插入了数字6, 7, 5. 因此需要挪动3次。再比如:数组B:[5, 2, 4, 3, 1, 6] 是从数组A:[1]插入了数字5,2,4,3,6. 因此需要挪动5次。 会发现规律,挪动的次数就是B.length - A.length''''''牛逼我来实现一下看看对不对.'''a=input()b=[int(i) for i in input().split(' ')]def main(list1):    a=list1.copy()    nums=list1    index = sorted(range(len(nums)), key = lambda i: nums[i])    a.sort()        #找到i开始的上升序列.不用严格上升.    i=0        for ii in range(len(list1)):#找到数组A        if list1[ii]==a[i]:            i+=1    return len(list1)-iprint(main(b))
View Code

 

转载于:https://www.cnblogs.com/zhangbo2008/p/9188950.html

你可能感兴趣的文章
完毕port(CompletionPort)具体解释 - 手把手教你玩转网络编程系列之三
查看>>
iOS8 Push Notifications
查看>>
各大名企笔试及面经大全(程序猿必读)
查看>>
Oracle 连接、会话数的查看,修改
查看>>
Python使用QRCode模块生成二维码
查看>>
英语学习的重要性
查看>>
Android中Handler引起的内存泄露
查看>>
原产地政策,jsonp跨域
查看>>
HDU 1143 Tri Tiling(递归)
查看>>
ffmpeg参数具体解释
查看>>
记一次公司仓库数据库服务器死锁过程
查看>>
Oracle 11g password过期被锁定报道 ORA-28000 the account is locked
查看>>
【Struts2学习笔记(2)】Action默认值和配置Action于result各种转发类型
查看>>
轨磁条简介
查看>>
(算法)交错的字符串
查看>>
hdu 5471(状压DP or 容斥)
查看>>
oracle.jdbc.driver.OracleDriver和oracle.jdbc.OracleDriver这两个驱动的区别
查看>>
NSQ部署
查看>>
git常用命令记录
查看>>
IBM发布新一代云计算工具包MobileFirst Foundation
查看>>