变量命名不够清晰:变量如 fl, ls, s 等命名过于简短,缺乏语义性,降低了代码的可读性和可维护性。
冗余逻辑:if s == 0: return True; else: return False 可以直接简化为 return s == 0,减少不必要的分支判断。
边界条件未完全覆盖:当 lst 中只有一个单词时,代码逻辑未明确处理这种情况。
优化方向
增强健壮性:增加对空字符串和仅含空格的输入的检查,确保代码能够正确处理这些边界情况。
改进变量命名:使用更具描述性的变量名,提高代码的可读性。
简化逻辑:移除冗余的分支判断,使代码更加简洁。
性能优化:当前代码的时间复杂度为 O(n),已经是线性复杂度,无需进一步优化性能。
defisCircularSentence(self, sentence):"""
:type sentence: str
:rtype: bool
"""# 处理空字符串或仅含空格的情况ifnot sentence or sentence.isspace():returnFalse# 分割句子为单词列表
words = sentence.split(" ")# 如果单词列表为空,返回 Falseiflen(words)==0:returnFalse# 检查首尾单词是否满足循环条件if words[0][0]!= words[-1][-1]:returnFalse# 遍历单词列表,检查相邻单词的连接是否满足循环条件for i inrange(len(words)-1):if words[i][-1]!= words[i +1][0]:returnFalse# 所有条件均满足,返回 TruereturnTrue
LCR 073.爱吃香蕉的狒狒
# 狒狒喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。# 狒狒可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉,下一个小时才会开始吃另一堆的香蕉。 # 狒狒喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。# 返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。classSolution(object):defminEatingSpeed(self, piles, h):"""
计算在h小时内吃完所有香蕉的最小速度k。
参数:
piles: List[int] - 每堆香蕉的数量列表。
h: int - 可用来吃香蕉的小时数。
返回:
int - 能在h小时内吃完所有香蕉的最小速度k。
"""# 从1到最大堆的数量迭代,寻找最小的速度kfor k inrange(1,max(piles)):
H =0# 遍历每堆香蕉,计算当前速度k下的总小时数Hfor i inrange(len(piles)):# 如果当前堆的香蕉数量能被k整除,直接除以k得到消耗的小时数if piles[i]% k ==0:
H += piles[i]// k
else:# 如果不能被整除,则需要额外加1个小时来吃完这堆香蕉
H += piles[i]// k +1# 如果当前速度k下的总小时数H不超过h,则返回当前的速度kif H <= h:return k
classSolution(object):defminEatingSpeed(self, piles, h):"""
:type piles: List[int]
:type h: int
:rtype: int
"""# 输入校验ifnot piles or h <=0:raise ValueError("Invalid input: 'piles' must be non-empty and 'h' must be positive.")# 如果 h 小于香蕉堆的数量,无论如何都无法完成任务if h <len(piles):return-1# 定义二分查找的左右边界
left, right =1,max(piles)while left < right:
mid =(left + right)//2
hours_needed =0# 计算以速度 mid 吃完所有香蕉所需的小时数for pile in piles:
hours_needed +=(pile + mid -1)// mid # 等价于 math.ceil(pile / mid)if hours_needed > h:# 如果所需时间超过 h,则增加速度
left = mid +1else:# 否则尝试更小的速度
right = mid
return left