给定一个顺序排列的列表sizes和数字n,分别代表顺序存储的文件大小和磁盘容量,请编写一个函数,求出该磁盘最多可以顺序存储几个文件。
示例:
输入:([4, 4, 4, 3, 3], 12), 输出:3。因为4+4+4<=12可以存下,而4+4+4+3 > 12存不下。
题目难度:简单
题目来源:codewars: Fill the Hard Disk Drive
def save(sizes: list, n: int) -> int:
pass
assert save([4,4,4,3,3], 12) == 3
assert save([4,8,15,16,23,42], 108) == 6
assert save([11,13,15,17,19], 8) == 0
nobugs
2021 年10 月 26 日 02:16
2
def save(sizes: list, n: int) -> int:
storage = 0
s_num = 0
for num in sizes:
storage += num
s_num += 1
if storage >= n:
break
return s_num if s_num > 1 else 0
assert save([4, 4, 4, 3, 3], 12) == 3
assert save([4, 8, 15, 16, 23, 42], 108) == 6
assert save([11, 13, 15, 17, 19], 8) == 0
def save(sizes: list, n: int) -> int:
sum = 0
for i in range(0,len(sizes)):
sum = sum + sizes[i]
if sum > n:
return i
return len(sizes)
assert save([4,4,4,3,3], 12) == 3
assert save([4,8,15,16,23,42], 108) == 6
assert save([11,13,15,17,19], 8) == 0
def save(sizes: list, n: int) -> int:
amount = 0
i = 0
for size in sizes:
amount += size
i = i + 1
if amount > n:
return i - 1
return i
Python常规思路
def save(sizes: list, n: int) -> int:
result = []
for i in range(1, len(sizes)+1):
sub = sizes[:i]
if sum(sub) <= n:
result.append(i)
return len(result)
assert save([4,4,4,3,3], 12) == 3
assert save([4,8,15,16,23,42], 108) == 6
assert save([11,13,15,17,19], 8) == 0
思路:遍历列表,通过切片循环判断所遍历到的元素及之前元素的总和,再通过判断。如果小于等于则收集。最后返回满足条件的元素的列表长度即可。
1 个赞
python参考题解
def save(sizes: list, n: int) -> int:
data = [item for i, item in enumerate(sizes, 1) if sum(sizes[:i])<=n]
return len(data)
assert save([4,4,4,3,3], 12) == 3
assert save([4,8,15,16,23,42], 108) == 6
assert save([11,13,15,17,19], 8) == 0
参考思路:通过enumerate函数进行遍历,起始值从1开始,通过条件过滤出合适的元素,然后利用列表推导式收集成列表。最后返回列表长度。
1 个赞
def save(sizes: list, n: int) -> int:
if sizes[0] > n :
return 0
elif sum(sizes) <= n:
return len(sizes)
else:
for i in range(len(sizes)):
if sum(sizes[:i]) >=n:
return i
assert save([4,4,4,3,3], 12) == 3
assert save([4,8,15,16,23,42], 108) == 6
assert save([11,13,15,17,19], 8) == 0
def save(sizes: list, n: int) -> int:
s = 0
k = 0
for i in sizes:
s += i
if s <= n:
k += 1
else:
break
return k
assert save([4, 4, 4, 3, 3], 12) == 3
assert save([4, 8, 15, 16, 23, 42], 108) == 6
assert save([11, 13, 15, 17, 19], 8) == 0
def save(sizes: list, n: int) -> int:
i = 0
x = 0
while i < len(sizes) :
x = x + sizes[i]
if x > n:
return i
i += 1
return i
assert save([4, 4, 4, 3, 3], 12) == 3
assert save([4, 8, 15, 16, 23, 42], 108) == 6
assert save([11, 13, 15, 17, 19], 8) == 0