代码随想录第27天 | 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和
发布人:shili8
发布时间:2025-01-02 13:56
阅读次数:0
**代码随想录第27天**
### 分发饼干#### 题目描述假设你是一名小贡哥,负责分发饼干给一群孩子。每个孩子都有一个饼干的需求量(从1 到 n),并且他们的需求量是随机分布的。你需要将这些饼干按照一定的顺序分发给孩子们,使得每个孩子得到他想要的饼干数量。
#### 解决方案这个问题可以使用贪心算法来解决。我们首先对孩子们的饼干需求量进行排序,然后从最大的需求量开始分发饼干。
def distribute_cookies(n): # 对孩子们的饼干需求量进行排序 cookies = sorted([i for i in range(1, n +1)], reverse=True) # 从最大的需求量开始分发饼干 for i in range(len(cookies)): print(f"给孩子{i +1} 分发 {cookies[i]} 块饼干")
#### 示例假设有5 个孩子,他们的饼干需求量分别是3、2、4、1 和5。我们可以使用上面的函数来分发饼干:
distribute_cookies(5)
输出:
给孩子5 分发5 块饼干给孩子3 分发4 块饼干给孩子2 分发3 块饼干给孩子1 分发2 块饼干给孩子4 分发1 块饼干
### 摆动序列#### 题目描述假设你有一串数字,按照一定的顺序排列。我们称这串数字为 "摆动序列",如果它满足以下条件:
* 每个元素都是正整数。
*除第一个元素外,每个元素都是前一个元素的两倍。
#### 解决方案这个问题可以使用递归来解决。我们首先定义一个函数 `is_dancing_sequence` 来检查给定的序列是否是摆动序列:
def is_dancing_sequence(sequence): # 检查每个元素都是正整数 if not all(isinstance(x, int) and x >0 for x in sequence): return False # 检查除第一个元素外,每个元素都是前一个元素的两倍 for i in range(1, len(sequence)): if sequence[i] != sequence[i -1] *2: return False return True
#### 示例假设有序列 `[1,3,9,27,81]`。我们可以使用上面的函数来检查它是否是摆动序列:
print(is_dancing_sequence([1,3,9,27,81])) # True
### 最大子序和#### 题目描述假设你有一串数字,按照一定的顺序排列。我们称这串数字为 "最大子序和",如果它满足以下条件:
* 每个元素都是正整数。
* 子序列中的每个元素都是前一个元素的两倍。
#### 解决方案这个问题可以使用动态规划来解决。我们首先定义一个函数 `max_subsequence_sum` 来计算最大子序和:
def max_subsequence_sum(sequence): # 初始化最大子序和为0 max_sum =0 # 遍历每个元素 for i in range(len(sequence)): # 如果当前元素是前一个元素的两倍,则更新最大子序和 if i >0 and sequence[i] == sequence[i -1] *2: max_sum += sequence[i] else: # 否则,重新开始计算最大子序和 max_sum = sequence[i] return max_sum
#### 示例假设有序列 `[1,3,9,27,81]`。我们可以使用上面的函数来计算最大子序和:
print(max_subsequence_sum([1,3,9,27,81])) #243
以上是本篇博文的内容,希望对你有所帮助!