获得徽章 9
- #刷题交流# 刷题打卡第多少天了呀!小U和 n 个小朋友正在玩一个有趣的糖果传递游戏。n 个小朋友按顺序排成一列,小U站在最右边的位置。游戏开始时,小U为每个小朋友分配了 a[1], a[2], ..., a[n] 个糖果。现在,小U手里还剩下 m 个糖果要分配。def solution(n, m, a):
current_candy = 0
code = n + 1 # 默认分配给小U
while current_candy < m:
for i in range(n):
# 如果当前小朋友的糖果数量小于等于他右边的小朋友,则保留糖果
if i < n - 1 and a[i] + 1 <= a[i + 1]:
a[i] += 1
code = i + 1
current_candy += 1
break
elif i == n - 1:
# 如果第 n 个小朋友的糖果数量小于等于 m - current_candy,则保留糖果
if a[i] + 1 <= m - current_candy:
a[i] += 1
code = i + 1
current_candy += 1
break
else:
# 如果有一次没有分配出去,肯定都分配不出去
# 没分配出去,保留在小U
current_candy += 1
code=n+1
break
return code展开评论点赞 - #刷题交流# day21刷题打卡
def solution(Q: int, V: int, ships: list) -> int:
assert Q == len(ships)
obj = []
for m, v, w in ships:
p = 1
while p <= m:
obj.append([p * v, p * w])
m -= p
p <<= 1
if m:
obj.append([m * v, m * w])
f = [0 for _ in range(V + 1)]
for v, w in obj:
for i in range(V, v - 1, -1):
f[i] = max(f[i], f[i - v] + w)
return f[V]
if __name__ == '__main__':
print(solution(Q = 2,V = 10,ships = [[2, 3, 2], [3, 2, 10]]) == 32)
print(solution(Q = 3,V = 50,ships = [[5, 10, 20], [2, 20, 30], [3, 15, 25]]) == 100)
print(solution(Q = 1,V = 100,ships = [[10, 5, 50]]) == 500)
print(solution(Q = 4,V = 100,ships = [[1, 100, 200], [2, 50, 100], [3, 33, 66], [4, 25, 50]]) == 200)
print(solution(Q = 2,V = 300,ships = [[100, 1, 1], [50, 5, 10]]) == 550)展开赞过12 - #刷题交流# 打卡20天啦!小M获得了一个任务,需要将数字翻译成字符串。翻译规则是:0对应"a",1对应"b",依此类推直到25对应"z"。一个数字可能有多种翻译方法。小M需要一个程序来计算一个数字有多少种不同的翻译方法。
def solution(num: int) -> int:
src = str(num)
p, q, r = 0, 0, 1
for i in range(len(src)):
p, q, r = q, r, 0
r += q
if i == 0:
continue
pre = src[i - 1:i + 1]
if "10" <= pre <= "25":
r += p
return r
if __name__ == '__main__':
print(solution(num = 12258) == 5)
print(solution(num = 1400112) == 6)
print(solution(num = 2110101) == 10)
print(solution(num = 25) == 2)
print(solution(num = 1023) == 4)展开评论点赞 - #刷题交流# day19打卡啦!在猫星球上,小R负责给一行排队的猫分发鱼干。每只猫有一个等级,等级越高的猫应该得到更多的鱼干。规则如下:
每只猫至少得到一斤鱼干。
如果一只猫的等级高于它相邻的猫,它就应该得到比相邻的猫更多的鱼干。
def solution(n:int, cats_levels:list)->int:
assert n == len(cats_levels)
s = [1 for _ in range(n)]
for i in range(1, n):
if cats_levels[i] > cats_levels[i - 1]:
s[i] = s[i-1] + 1
for i in range(n-2,-1,-1):
if cats_levels[i] > cats_levels[i + 1]:
s[i] = max(s[i],s[i+1]+1)
return sum(s)
if __name__ == '__main__':
print(solution(n = 3, cats_levels = [1, 2, 2]) == 4)
print(solution(n = 6, cats_levels = [6, 5, 4, 3, 2, 16]) == 17)
print(solution(n = 20, cats_levels = [1, 2, 2, 3, 3, 20, 1, 2, 3, 3, 2, 1, 5, 6, 6, 5, 5, 7, 7, 4]) == 35)展开评论点赞 - #刷题交流# 打卡刷题18天,今天周一,大家也要加油哦!给你一个整数数组 nums 和一个整数 k,请你用一个字符串返回其中出现频率前 k 高的元素。请按升序排列。
def solution(nums: list, k: int) -> str:
# from collections import Counter
# c = Counter(nums)
# return ','.join([str(v[0]) for v in c.most_common(k)])
# 统计每个元素的频率
import heapq
from collections import Counter
frequency = Counter(nums)
# 使用小根堆来存储频率最高的 k 个元素
heap = []
for num, freq in frequency.items():
heapq.heappush(heap, (freq, num))
if len(heap) > k:
heapq.heappop(heap)
# 提取堆中的元素并按升序排序
result = [num for freq, num in heap]
result.sort()
return ','.join([str(num) for num in result])
if __name__ == '__main__':
print(solution(nums=[1, 1, 1, 2, 2, 3], k=2) == "1,2")
print(solution(nums=[1], k=1) == "1")
print(solution(nums=[4, 4, 4, 2, 2, 2, 3, 3, 1], k=2) == "2,4")展开评论点赞