网站后台信息发布这样做网站开发工具介绍
news/
2025/9/29 14:00:03/
文章来源:
网站后台信息发布这样做,网站开发工具介绍,威海哪里可以做网站,电子商务网站建设管理455.分发饼干 假设你是一位很棒的家长#xff0c;想要给你的孩子们一些小饼干。但是#xff0c;每个孩子最多只能给一块饼干。
对每个孩子 i#xff0c;都有一个胃口值 g[i]#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸#xff1b;并且每块饼干 j#xff0c;都有…455.分发饼干 假设你是一位很棒的家长想要给你的孩子们一些小饼干。但是每个孩子最多只能给一块饼干。
对每个孩子 i都有一个胃口值 g[i]这是能让孩子们满足胃口的饼干的最小尺寸并且每块饼干 j都有一个尺寸 s[j] 。如果 s[j] g[i]我们可以将这个饼干 j 分配给孩子 i 这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子并输出这个最大数值。
示例 1:
输入: g [1,2,3], s [1,1] 输出: 1 解释:你有三个孩子和两块小饼干3 个孩子的胃口值分别是1,2,3。虽然你有两块小饼干由于他们的尺寸都是 1你只能让胃口值是 1 的孩子满足。所以你应该输出 1。 示例 2:
输入: g [1,2], s [1,2,3] 输出: 2 解释:你有两个孩子和三块小饼干2 个孩子的胃口值分别是 1,2。你拥有的饼干数量和尺寸都足以让所有孩子满足。所以你应该输出 2. 提示
1 g.length 3 * 10^4 0 s.length 3 * 10^4 1 g[i], s[j] 2^31 - 1
贪心 大饼干优先
class Solution:def findContentChildren(self, g, s):g.sort() # 将孩子的贪心因子排序s.sort() # 将饼干的尺寸排序index len(s) - 1 # 饼干数组的下标从最后一个饼干开始result 0 # 满足孩子的数量for i in range(len(g)-1, -1, -1): # 遍历胃口从最后一个孩子开始if index 0 and s[index] g[i]: # 遍历饼干result 1index - 1return result贪心 小饼干优先
class Solution:def findContentChildren(self, g, s):g.sort() # 将孩子的贪心因子排序s.sort() # 将饼干的尺寸排序index 0for i in range(len(s)): # 遍历饼干if index len(g) and g[index] s[i]: # 如果当前孩子的贪心因子小于等于当前饼干尺寸index 1 # 满足一个孩子指向下一个孩子return index # 返回满足的孩子数目376. 摆动序列
如果连续数字之间的差严格地在正数和负数之间交替则数字序列称为摆动序列。第一个差如果存在的话可能是正数或负数。少于两个元素的序列也是摆动序列。
例如 [1,7,4,9,2,5] 是一个摆动序列因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列第一个序列是因为它的前两个差值都是正数第二个序列是因为它的最后一个差值为零。
给定一个整数序列返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些也可以不删除元素来获得子序列剩下的元素保持其原始顺序。
示例 1:
输入: [1,7,4,9,2,5] 输出: 6 解释: 整个序列均为摆动序列。 示例 2:
输入: [1,17,5,10,13,15,10,5,16,8] 输出: 7 解释: 这个序列包含几个长度为 7 摆动序列其中一个可为[1,17,10,13,10,16,8]。 示例 3:
输入: [1,2,3,4,5,6,7,8,9] 输出: 2
贪心版本一
class Solution:def wiggleMaxLength(self, nums):if len(nums) 1:return len(nums) # 如果数组长度为0或1则返回数组长度curDiff 0 # 当前一对元素的差值preDiff 0 # 前一对元素的差值result 1 # 记录峰值的个数初始为1默认最右边的元素被视为峰值for i in range(len(nums) - 1):curDiff nums[i 1] - nums[i] # 计算下一个元素与当前元素的差值# 如果遇到一个峰值if (preDiff 0 and curDiff 0) or (preDiff 0 and curDiff 0):result 1 # 峰值个数加1preDiff curDiff # 注意这里只在摆动变化的时候更新preDiffreturn result # 返回最长摆动子序列的长度贪心版本二
class Solution:def wiggleMaxLength(self, nums: List[int]) - int:if len(nums) 1:return len(nums) # 如果数组长度为0或1则返回数组长度preDiff,curDiff ,result 0,0,1 #题目里nums长度大于等于1当长度为1时其实到不了for循环里去所以不用考虑nums长度for i in range(len(nums) - 1):curDiff nums[i 1] - nums[i]if curDiff * preDiff 0 and curDiff !0: #差值为0时不算摆动result 1preDiff curDiff #如果当前差值和上一个差值为一正一负时才需要用当前差值替代上一个差值return result动态规划版本一
class Solution:def wiggleMaxLength(self, nums: List[int]) - int:# 0 i 作为波峰的最大长度# 1 i 作为波谷的最大长度# dp是一个列表列表中每个元素是长度为 2 的列表dp []for i in range(len(nums)):# 初始为[1, 1]dp.append([1, 1])for j in range(i):# nums[i] 为波谷if nums[j] nums[i]:dp[i][1] max(dp[i][1], dp[j][0] 1)# nums[i] 为波峰if nums[j] nums[i]:dp[i][0] max(dp[i][0], dp[j][1] 1)return max(dp[-1][0], dp[-1][1])动态规划版本二
class Solution:def wiggleMaxLength(self, nums):dp [[0, 0] for _ in range(len(nums))] # 创建二维dp数组用于记录摆动序列的最大长度dp[0][0] dp[0][1] 1 # 初始条件序列中的第一个元素默认为峰值最小长度为1for i in range(1, len(nums)):dp[i][0] dp[i][1] 1 # 初始化当前位置的dp值为1for j in range(i):if nums[j] nums[i]:dp[i][1] max(dp[i][1], dp[j][0] 1) # 如果前一个数比当前数大可以形成一个上升峰值更新dp[i][1]for j in range(i):if nums[j] nums[i]:dp[i][0] max(dp[i][0], dp[j][1] 1) # 如果前一个数比当前数小可以形成一个下降峰值更新dp[i][0]return max(dp[-1][0], dp[-1][1]) # 返回最大的摆动序列长度动态规划版本三优化
class Solution:def wiggleMaxLength(self, nums):if len(nums) 1:return len(nums) # 如果数组长度为0或1则返回数组长度up down 1 # 记录上升和下降摆动序列的最大长度for i in range(1, len(nums)):if nums[i] nums[i-1]:up down 1 # 如果当前数比前一个数大则可以形成一个上升峰值elif nums[i] nums[i-1]:down up 1 # 如果当前数比前一个数小则可以形成一个下降峰值return max(up, down) # 返回上升和下降摆动序列的最大长度53. 最大子序和
力扣题目链接(opens new window)
给定一个整数数组 nums 找到一个具有最大和的连续子数组子数组最少包含一个元素返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大为 6。
暴力法
class Solution:def maxSubArray(self, nums):result float(-inf) # 初始化结果为负无穷大count 0for i in range(len(nums)): # 设置起始位置count 0for j in range(i, len(nums)): # 从起始位置i开始遍历寻找最大值count nums[j]result max(count, result) # 更新最大值return resultclass Solution:def maxSubArray(self, nums):result float(-inf) # 初始化结果为负无穷大count 0for i in range(len(nums)):count nums[i]if count result: # 取区间累计的最大值相当于不断确定最大子序终止位置result countif count 0: # 相当于重置最大子序起始位置因为遇到负数一定是拉低总和count 0return result
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921871.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!