字节跳动2019春招研发部分python编程题汇总

这篇文章主要介绍了字节跳动2019春招研发部分python编程题汇总,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
1、万万没想到之聪明的编辑

题目描述:

题解:

双指针法

按照题目要求的规则来编写程序,不要忘记处理输入和输出

import sys
n=int(input())#读第一行
for i in range(n):
    #s = list(input())
    s = list(sys.stdin.readline().strip())#读一行的字符串,转化为list
    k = 0 #每个循环都重新赋值。设置一个指针,检查是否有重复
    for j in range(len(s)):
        s[k] = s[j]#赋值,如果有重复,将后面的赋值给前面的
        k += 1 #不论什么情况都加1
        #下面处理重复的情况
        if k > 2 and s[k-3] == s[k-2] and s[k-2] == s[k-1]:#有3个连续的,去掉最后一个
            k-=1
        if k > 3 and s[k-4] == s[k-3] and s[k-2] == s[k-1]:#AABB,去掉最后一个
            k -= 1
    print(''.join(s[:k])) #对输出进行处理

2、万万没想到之抓捕孔连顺

题目描述:

题解:

双指针法

n, dist = map(int, input().split()) #n是建筑物数目,dist是两个特工相距的最大距离
nums = list(map(int, input().split())) #列表nums存储所有建筑物的坐标(横轴)
res = 0 #res埋伏方案数目
i = 0 #i为第一个特工的下标
j = 2 #j为另外两个特工最远位置的下标,因为有三个特工,所以j的下标从2开始
while i < n-2:
    while j < n and nums[j] - nums[i] <= dist: #符合埋伏条件,继续搜寻
        j += 1 #最后一次时会使j多加一次
    if j - 1 - i >= 2:
        num = j - i - 1 #num为C的底数
        res += num * (num - 1) // 2 #排列组合C(num,2)=num!/(num-2)!*2!
    i += 1
res= res%99997867
print(res)

3、雀魂启动!

题目描述:

题解:

def IShepai(str):
    lenth=len(str)
    #能否划空
    if lenth == 0:
        return True
    count1=str.count(str[0])
  # 没出现过雀头,且第一个数字出现的次数 >= 2,去掉雀头剩下的能不能和牌
    if lenth%3!=0 and count1>=2 and IShepai(str[2:])==True:
        return True
    # 如果第一个数字出现次数 >= 3,去掉这个刻子后看剩下的能和牌
    if  count1 >= 3 and IShepai(str[3:])==True:
            return True
    # 如果存在顺子,移除顺子后剩下的能和牌
    if str[0] + 1 in str and str[0] + 2 in str:
        str1 = str[1:]
        str1.remove(str[0]+1)
        str1.remove(str[0]+2)
        if IShepai(str1) == True:
            return True
    # 以上条件都不满足,则不能和牌
    return False
     
if __name__ == '__main__':
    a=list(map(int, input().split()))
    flag=0
    #遍历所有可以抓到的牌看能不能胡牌
    for i in range(1,10):
        al=sorted(a + [i])
        #每个数字最多4张牌
        if al.count(i)>4:
            continue
        else:
            if IShepai(al) == True:
                flag=1
                print(i,end=" ")
    if flag==0:
        print(0)

4、特征提取

题目描述:

题解:

n = int(input()) # n代表测试用例的个数
while n > 0: 
    m = int(input()) # m代表视频的帧数
    res = 1 #res代表最长特征运动的长度
    d = {} # 字典d记录{猫咪的特征值(key),特征运动长度(特征值连续出现的次数)}
    for i in range(m):
        l = list(map(int , input().split())) # 每行代表一帧
        k = l[0] # 第一个数字是该帧的特征个数
        tmp_d = {}
        for j in range(k):
            index = l[2 * j + 1]* 10 + l[2 * j + 2] #两个数字形成的特征值归一化为index
            if index in d: # 此特征值出现在了上一帧中
                tmp_d[index] = d[index] + 1
                res = max(res, tmp_d[index]) # 更新res即最长特征运动的长度
            else:
                tmp_d[index] = 1
        d = tmp_d #及时更新字典d的内容
    print(res)
    n -= 1

5、毕业旅行问题

题目描述:

题解:

import itertools
n = int(input()) #城市个数n(1<n≤20,包括北京)
L = [] #城市间的车票价钱 n行n列的矩阵 [n][n]
for i in range(n):
    L.append(list(map(int, input().split())))
  
def treaval(L, n):
    # 除起点之外的不同路线组合,假设起点为0号节点
    com = list(itertools.permutations(list(range(1, n)), n - 1))  #range函数返回的是一个可迭代对象,而不是列表类型, 所以打印的时候不会打印列表。
    spend = 9999  # 假设一开始花销很大
    for j in range(len(com)): #len(com)是可选择的路线种类数
        road = list(com.pop(0))# 获取其中一种路线组合road列表之后就释放,com是一个元组序列
        # 补全起点和终点(注意起点也是终点,形成闭环)此时road长度为n+1
        road.append(0)#在列表末尾添加新的对象
        road.insert(0, 0)#将对象插入列表
        x = 0 # 当前路线的花销
        for i in range(n):
            x = x + L[road[i]][road[i + 1]]
        if x < spend:
            spend = x #更新最小花销
    return spend
  
print(treaval(L, n))

只通过了33%

6、找零

题解:

动态规划

lyst = [64, 16, 4, 1] #硬币列表(从大到小排列)
cost = 1024 - int(input())
res = 0 #最少得到的硬币数量
for i in lyst:
    res += cost//i #取整除 - 返回商的整数部分(向下取整)
    cost %= i #取模 - 返回除法的余数
print(res)

7、机器人跳跃问题

题目描述:

题解:

import math
n = int(input())
arr = list(map(int, input().split()))
# 假设跳跃前能力为E,要跳的高度为H,那么跳跃后的能量就是E-(H-E)=2E-H,
# 那么跳跃后的能量加上高度就是跳跃前的两倍,然后从后往前逆推。
E = 0    # 跳到最后一步的能力值设为0
arr.reverse()#翻转列表逆推
for H in arr:
    E = math.ceil((E + H ) / 2) #向上取整,以此保证剩余能量大于等于0
print(E)

到此这篇关于字节跳动2019春招研发部分python编程题汇总的文章就介绍到这了,更多相关字节跳动2019内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持vb.net教程C#教程python教程SQL教程access 2010教程xin3721自学网

2023年3月11日,美团春季招聘笔试中共包含五道编程题目。以下是对每道题目的简要说明: 1. 题目一:这道题目要求解决一个数字统计的问题。可能涉及到的知识点包括数据结构、循环和条件判断等。解决问题的思路可能是使用字典等数据结构来保存统计结果,并使用循环逐个读取输入数据并进行统计。 2. 题目二:这道题目可能是一个字符串处理的问题。需要使用字符串的方法进行操作,如提取、拼接、查找和替换等。可能的解决思路包括使用正则表达式、切片和遍历等。 3. 题目三:这道题目可能涉及到算法和数据结构的知识。可能是一道涉及到数组、链表、树等数据结构的问题。解决思路可能包括遍历、递归、搜索和排序等。 4. 题目四:这道题目可能是一个动态规划的问题。需要根据给定的条件和规则,通过动态规划的方式求解问题。解决思路包括定义状态和转移方程,使用递推或记忆化搜索进行求解。 5. 题目五:这道题目可能是一个图论或网络问题。需要根据给定的图或网络结构,解决一个相关的问题。可能涉及到广度优先搜索、深度优先搜索、最短路径等知识。解决思路可能包括使用图或网络的相关算法进行求解。 以上只是对这五道编程题目的一些可能情况进行的简要描述,具体的题目内容可能会有所不同。希望这些信息能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值