字节跳动
190531 字符串校对程序
标题链接 https://www.nowcoder.com/question/next?pid=16516564&qid=362291&tid=24204822
标题要求:

n = int(input())
while n > 0:
ss = input()
res = []
for char in ss:
if len(res) < 2:
res.append(char)
continue
if len(res) >= 2:
if char == res[-1] and char == res[-2]:
continue
if len(res) >= 3:
if char == res[-1] and res[-2] == res[-3]:
continue
res.append(char)
n -= 1
print("".join(res))
190601 有约束条件的C2n C^2_nC
n
问题

思路剖析:设置两个指针left和right,left作为外层循环遍历,每一次固定left,意味着将榜首个奸细固定在left方位,然后right指针右移,一直到无法移动停止(移到终究或许规模超界),核算left和right之间的空位假设为num个,则后两个奸细的站位共有C2num C^2_{num}C
num
种,然后顺次遍历left。留意边界条件。
n, disk = map(int, input().split())
nums = list(map(int, input().split()))
res = 0
left, right = 0, 2
while left < n - 2:
while(right < n and nums[right] - nums[left] <= disk):
right += 1 # 直到找到最右边的下一个方位
if right - left > 2: # 等于2只要一种或许
num = right - left - 1
res += num * (num - 1) // 2
left += 1
print(res % 99997867)
190601 打麻将能够胡的牌
https://www.nowcoder.com/test/question/done?tid=24202466&qid=362292#summary

思路剖析:
能够胡的牌总共有1-9这9种或许性,先判别给定的13张牌里有没有4张相同的,假如有,则证明这张牌现已拿满了,不能再胡这张,能够扫除,所以能够胡的牌便是card_list列表里剩余的那些。
遍历card_list列表,将给定的13张和card_list列表里当时的牌送入helper函数,判别能不能胡,假如能胡,就将当时牌添加到res里,用于终究的输出。
关于helper函数,榜首次调用的时分,传进来是按次序码好的14张牌,先判别榜首张牌有几张,假如大于2张,则能够作为雀头,递归判别nums[2:];假如大于3张,能够作为顺子,递归判别nums[3:];也能够判别nums里是否包括榜首张牌在内的ABC型顺子,假如是,则去掉该顺子,递归判别剩余的nums列表。A8站源码交易平台
from collections import Counter
# 判别是否能够胡牌
def helper(nums):
if not nums:
return True
quetou = nums.count(nums[0]) # 先找雀头
if len(nums) % 3 != 0 and quetou >= 2 and helper(nums[2:]): # len(nums) % 3 != 0条件约束不能呈现多个雀头(防止呈现AABBCCDD的状况,不符合要求)
return True
if quetou >= 3 and helper(nums[3:]): # 移除AAA类型的顺子,看后面的能不能胡牌
return True
if nums[0] + 1 in nums and nums[0] + 2 in nums: # 判别ABC类型的顺子能否胡牌
tmp_nums = nums.copy() # 这儿必定要用copy函数,不能直接删去nums的元素
tmp_nums.remove(nums[0])
tmp_nums.remove(nums[0] + 1)
tmp_nums.remove(nums[0] + 2)
if helper(tmp_nums):
return True
return False # 以上条件都不满意,则不能胡牌
nums = list(map(int, input().split()))
d = Counter(nums)
res = []
card_list = set(range(1,10)) - {i for i,v in d.items() if v == 4} # 把等于4的牌扫除去,由于手里现已拿四张了,不或许还胡这张牌
for i in card_list: #一切或许胡的牌
if helper(sorted(nums + [i])): # 假如参加i这张牌能胡,则将i参加res中 【留意】必定要用sort函数排好序再输入helper函数,
res.append(i)
print(" ".join(str(i) for i in res) if res else 0)
190601 特征提取

n = int(input())
while n > 0:
m = int(input()) # 代表视频的帧数
res = 0 # 用来存储终究成果
d = {} # 用来存储每组特征接连呈现多少次
while m > 0:
data = list(map(int, input().split()))
if data[0] <= 0:
if d:
res = max(max(d.values()), res)
d = {}
m -= 1
continue
i = 1
while i < len(data):
d[(data[i], data[i + 1])] = d.get((data[i], data[i + 1]), 0) + 1
i += 2
res = max(max(d.values()), res)
m -= 1
print(res)
n -= 1
190601 结业游览

190601 找零

190601 机器人跳动问题
拼多多2019
3. 两两配对差值最小
给定一个长度为偶数的数组arr,将该数组中的数字两两配对并求和,在这些和中选出最大和最小值,请问该怎么两两配对,才能让最大值和最小值的差值最小?
输入描绘:
总共2行输入。
榜首行为一个整数n,2<=n<=10000, 第二行为n个数,组成方针数组,每个数大于等于2,小于等于100。
输出描绘: 输出最小的差值。
输入比如1:
4
2 6 4 3
输出比如1:
1
解法:先对输入数组排序,排序后两端的相加,将成果记录在res中,再对res排序,并取最大值和最小值的差值即可。
n = int(input())
nums = list(map(int, input().split()))
nums.sort()
i, j = 0, len(nums) - 1
res = []
while i < j:
res.append(nums[i] + nums[j])
i += 1
j -= 1
res.sort()
print(res[-1] - res[0])
4. 回合制游戏
你在玩一个回合制人物扮演的游戏。现在你在预备一个战略,以便在最短的回合内打败敌方人物。在战役开始时,敌人具有HP格血量。当血量小于等于0时,敌人死去。一个缺乏经验的玩家或许简略地测验每个回合都进犯。可是你知道辅佐技术的重要性。
在你的每个回合开始时你能够挑选以下两个动作之一:聚力或许进犯。
聚力会进步你下个回合进犯的损伤。
进犯会对敌人形成必定量的损伤。假如你上个回合运用了聚力,那这次进犯会对敌人形成buffedAttack点损伤。不然,会形成normalAttack点损伤。
给出血量HP和不同进犯的损伤,buffedAttack和normalAttack,回来你能杀死敌人的最小回合数。A8站源码交易平台
输入描绘:
榜首行是一个数字HP
第二行是一个数字normalAttack
第三行是一个数字buffedAttack
1 <= HP,buffedAttack,normalAttack <= 10^9
输出描绘:
输出一个数字表明最小回合数
输入比如1:
13
3
5
输出比如1:
5
解法(数学规则):【参阅】
直接用数学规则去剖析:A8站源码交易平台
1)假如buffedAttack <= 2 * normalAttack,那么全程运用normalAttack更合算
2)假如buffedAttack > 2 * normalAttack,那么优先运用buffedAttack更合算,假如hp % normalAttack > 0,当余数小于normalAttack,终究一回合用normalAttack就能杀死敌人;假如hp % normalAttack == 0,那么必定全程运用buffedAttack更合算。
import math
hp = int(input())
normal = int(input())
buffed = int(input())
if normal * 2 >= buffed:
print(math.ceil(hp / normal))
else:
res = 0
res += (hp // buffed) * 2
hp = hp % buffed
if hp != 0 and hp <= normal:
res += 1
elif hp != 0 and hp > normal:
res += 2
print(res)
————————————————