一、每日一题
这个题感觉跟去年的蓝桥杯真题分糖果很像,先把这个分析明白了再去试试写那一个题。
大佬题解:
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
# 将胃口和饼干排序
g.sort()
s.sort()
# 孩子的数量
n = len(g)
# 饼干的数量
m = len(s)
# 记录结果
res = 0
for i in range(m):
# 从胃口小的开始喂
if res < n and g[res] <= s[i]:
res += 1
return res
作者:编程文青李狗蛋
链接:https://leetcode.cn/problems/assign-cookies/solutions/2103923/acm-xuan-shou-tu-jie-leetcode-fen-fa-bin-wnql/
来源:力扣(LeetCode)
家人们我的建议是直接复制链接去看这位大佬的详细思路解释,有配图并且解释的非常清楚,更好的帮助理解代码。
二、希尔排序
排序思路:
在插入排序的基础上将一个一个插入改成一段一段的插入,先分段,分段排好序之后,通过减少段中间的个数,不断进行排序。
例如:1.一共9个数字,先9 // 2得到4,四个为一组进行分组。
2.得到分组后的结果
3.(5.3.8)(7.1)(4.2)(6.9)分别各自为一组进行排序。
4.得到的排序结果如下
5.再进行分组,4 // 2分为两组进行排序,(3.2.5.4.8)(1.6.7.9)分别为一组排序。
6.排序结果如下
7.再d // 2 = 1,进行排序,直接进行插入排序即可,得到最后结果。
代码实现:
在插入排序的基础上进行改动,将间隔为1都改为间隔为gap,再在shell_sort函数中传入gap参数,从而实现排序。
def insert_sort_gap(li,gap):
for i in range(gap, len(li)):
tmp = li[i]
j = i - gap
while j >= 0 and li[j] > tmp:
li[j+gap] = li[j]
j -= gap
li[j+gap] = tmp
def shell_sort(li):
d = len(li) // 2 # 得到分段中一段的个数
while d >= 1:
insert_sort_gap(li,d) # 将个数作为参数传入函数中调用
d //= 2 # 不断整除2 以保证循环可以跳出
li = [2,4,6,8,1,7,5,3,9]
shell_sort(li)
print(li)
运行结果:
三、学习总结
昨天因为从老家回来,实在是舟车劳顿不想学习,今天就赶紧补上了(虽然今天是情人节),还是说要踏踏实实的走好每一步啊,一点都不能松懈呢,年马上过完了,学习也要步入正轨了,每天进步一点点,日积月累总会看到成功的!加油!!!