
获得徽章 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
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)
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)
展开
1
2
#刷题交流# 打卡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)
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)
每只猫至少得到一斤鱼干。
如果一只猫的等级高于它相邻的猫,它就应该得到比相邻的猫更多的鱼干。
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")
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")
展开
评论
点赞
#刷题交流# day16打卡刷题:小U在一款挂机游戏中拥有n个英雄。游戏中有一种历练升级机制,每天可以选择两个英雄进行历练,如果两位英雄的等级相同,则他们的等级都不会改变。如果英雄等级不同,那么等级较高的英雄会增加1级,而等级较低的英雄则保持不变。
def solution(n: int, u: list) -> int:
assert n == len(u)
return n - u.count(min(u))
if __name__ == '__main__':
print(solution(n = 5 ,u = [1, 2, 3, 1, 2]) == 3)
print(solution(n = 4 ,u = [100000, 100000, 100000, 100000]) == 0)
print(solution(n = 6 ,u = [1, 1, 1, 2, 2, 2]) == 3)
def solution(n: int, u: list) -> int:
assert n == len(u)
return n - u.count(min(u))
if __name__ == '__main__':
print(solution(n = 5 ,u = [1, 2, 3, 1, 2]) == 3)
print(solution(n = 4 ,u = [100000, 100000, 100000, 100000]) == 0)
print(solution(n = 6 ,u = [1, 1, 1, 2, 2, 2]) == 3)
展开
1
点赞
#刷题交流# 刷题打卡:小U计划进行一场从地点A到地点B的徒步旅行,旅行总共需要 M 天。为了在旅途中确保安全,小U每天都需要消耗一份食物。在路程中,小U会经过一些补给站,这些补给站分布在不同的天数上,且每个补给站的食物价格各不相同。
小U需要在这些补给站中购买食物,以确保每天都有足够的食物。现在她想知道,如何规划在不同补给站的购买策略,以使她能够花费最少的钱顺利完成这次旅行。
M:总路程所需的天数。
N:路上补给站的数量。
p:每个补给站的描述,包含两个数字 A 和 B,表示第 A 天有一个补给站,并且该站每份食物的价格为 B 元。
保证第0天一定有一个补给站,并且补给站是按顺序出现的。
def solution(m:int, n:int, p:list)->int:
assert n == len(p) and m >= p[-1][0] and p[0][0] == 0
cost = 0
min_price, min_price_index = p[0][1], 0
for j in range(1, n):
a, b = p[j]
if b < min_price:
cost += min_price * (a - min_price_index)
min_price = b
min_price_index = a
cost += min_price * (m - min_price_index)
return cost
if __name__ == '__main__':
print(solution(m = 5 ,n = 4 ,p = [[0, 2], [1, 3], [2, 1], [3, 2]]) == 7)
print(solution(m = 6 ,n = 5 ,p = [[0, 1], [1, 5], [2, 2], [3, 4], [5, 1]]) == 6)
print(solution(m = 4 ,n = 3 ,p = [[0, 3], [2, 2], [3, 1]]) == 9)
小U需要在这些补给站中购买食物,以确保每天都有足够的食物。现在她想知道,如何规划在不同补给站的购买策略,以使她能够花费最少的钱顺利完成这次旅行。
M:总路程所需的天数。
N:路上补给站的数量。
p:每个补给站的描述,包含两个数字 A 和 B,表示第 A 天有一个补给站,并且该站每份食物的价格为 B 元。
保证第0天一定有一个补给站,并且补给站是按顺序出现的。
def solution(m:int, n:int, p:list)->int:
assert n == len(p) and m >= p[-1][0] and p[0][0] == 0
cost = 0
min_price, min_price_index = p[0][1], 0
for j in range(1, n):
a, b = p[j]
if b < min_price:
cost += min_price * (a - min_price_index)
min_price = b
min_price_index = a
cost += min_price * (m - min_price_index)
return cost
if __name__ == '__main__':
print(solution(m = 5 ,n = 4 ,p = [[0, 2], [1, 3], [2, 1], [3, 2]]) == 7)
print(solution(m = 6 ,n = 5 ,p = [[0, 1], [1, 5], [2, 2], [3, 4], [5, 1]]) == 6)
print(solution(m = 4 ,n = 3 ,p = [[0, 3], [2, 2], [3, 1]]) == 9)
展开
评论
点赞