字节跳动2019春招研发部分python编程题汇总
发布时间:2020-04-26 10:37:12 作者:剑圣土豆 我要评论
这篇文章主要介绍了字节跳动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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!
相关文章
- 这篇文章主要介绍了字节跳动2019届校招笔试题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-09-16
- 这篇文章主要介绍了字节跳动的三道编码面试题的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2020-04-08
- 这篇文章主要介绍了字节跳动抖音C++开发实习一二面凉经,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2020-03-31
- 这篇文章主要介绍了字节跳动后端开发视频架构面经总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2020-02-25
- 这篇文章主要介绍了字节跳动一面、二面凉经(面试小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2020-02-03
- 这篇文章主要介绍了字节跳动飞书音视频服务器开发面经(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2020-01-13
最新评论