字节跳动2019春招研发部分编程题汇总(python版本)共7题

preview
需积分: 0 11 下载量 183 浏览量 更新于2020-12-21 收藏 572KB PDF 举报
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]#赋值,如果有重复,将后面的赋值给前面的 【字节跳动2019春招研发部分编程题汇总(python版本)共7题】 这是一系列针对字节跳动2019春季招聘研发岗位的编程题目,主要涉及Python语言。以下是对其中几道题目的解析: 1、**万万没想到之聪明的编辑** 题目要求编写程序,根据特定规则处理字符串。使用双指针法解决此问题。程序首先通过`sys.stdin.readline().strip()`读取一行字符串,并将其转换为列表。设置一个指针`k`,遍历列表时,如果发现重复字符,将后面的字符赋值给前面的字符。同时,处理重复情况,如连续3个或AABB形式的重复字符,需要删除最后一个。输出处理后的字符串。 ```python import sys n = int(input()) for i in range(n): s = list(sys.stdin.readline().strip()) k = 0 for j in range(len(s)): s[k] = s[j] k += 1 # 处理重复情况 while k > 2 and s[k-3] == s[k-2] and s[k-2] == s[k-1]: k -= 1 while k > 3 and s[k-4] == s[k-3] and s[k-2] == s[k-1]: k -= 1 print(''.join(s[:k])) ``` 2、**万万没想到之抓捕孔连顺** 题目涉及到两个特工在不同建筑之间的布防策略。使用双指针法计算不同布防方案的数量。输入建筑物数量`n`和最大距离`dist`,接着获取所有建筑物的坐标。然后,用两个指针`i`和`j`分别表示第一个特工和另外两个特工最远位置的下标。遍历所有可能的组合,计算排列组合C(num, 2),并求和模99997867。 ```python n, dist = map(int, input().split()) nums = list(map(int, input().split())) res = 0 i = 0 j = 2 while i < n - 2: while j < n and nums[j] - nums[i] <= dist: num = j - i - 1 res += num * (num - 1) // 2 i += 1 res %= 99997867 print(res) ``` 3、**雀魂启动!** 这是一个麻将和牌判断问题。定义函数`IShepai`,判断给定的字符串是否能组成麻将牌。检查字符串长度,若为0则返回True(能和牌)。然后,通过计数判断是否存在雀头、刻子或顺子。如果满足这些条件之一,返回True;否则返回False。 ```python def IShepai(str): lenth = len(str) if lenth == 0: return True count1 = str.count(str[0]) # ... 其他判断条件和处理逻辑 ... if __name__ == '__main__': a = list(map(int, input().split())) flag = 0 for i in range(1, 10): al = sorted(a + [i]) if al.count(i) > 4: continue else: if IShepai(al) == True: flag = 1 print(i, end=" ") if flag == 0: print(0) ``` 4、**特征提取** 这道题要求计算视频帧中猫咪特征连续出现的最长长度。通过输入的测试用例数量`n`,逐个处理每个视频帧。使用字典`d`记录特征值及其连续出现的次数,遍历每帧,计算连续特征值,并更新结果`res`。 ```python n = int(input()) while n > 0: m = int(input()) res = 1 d = {} 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] if index in tmp_d: tmp_d[index] += 1 else: tmp_d[index] = 1 if index in d: d[index] = max(d[index], tmp_d[index]) else: d[index] = tmp_d[index] res = max(res, max(d.values())) n -= 1 print(res) ``` 这些题目涵盖了Python的基础语法,如输入输出、数据类型操作、循环与条件判断、字符串处理、数组操作、函数定义以及算法应用(双指针法、计数法等),对于面试者来说,它们旨在考察解决问题的能力、代码实现的效率和清晰度。