蓝桥杯例题六

devtools/2025/2/3 17:05:01/

奋斗是一种态度,也是一种生活方式。无论我们面对什么样的困难和挑战,只要心怀梦想,坚持不懈地努力,就一定能够迈向成功的道路。每一次失败都是一次宝贵的经验,每一次挫折都是一次锻炼的机会。在困难面前,我们不能轻易放弃,而应该勇敢地面对,坚持不懈地追求自己的目标。只要我们有梦想,就有追求的动力;只要我们有坚持,就有成功的可能。让我们激发内在的力量,勇敢地面对挑战,努力奋斗,成就自己的人生。不管前方的路有多坎坷,我们都要坚持向前,不断超越自己,用汗水和努力书写属于自己的辉煌篇章。相信自己,励志奋斗,成功势在必得!

蓝桥杯官网蓝桥杯大赛 — 全国大学生TMT行业赛事

刷题力扣 (LeetCode) 全球极客挚爱的技术成长平台

目录

题目11:整数拆分

背景描述:

输入格式:

输出格式:

样例输入:

样例输出:

解答过程:

Python代码实现及详细注释:

题目12:买卖股票的最佳时机 II

背景描述:

输入格式:

输出格式:

样例输入:

样例输出:

解答过程:

Python代码实现及详细注释:

总结


题目11:整数拆分

背景描述:

给定一个正整数 n,将其拆分为至少两个正整数之和,并使这些整数的乘积最大化。返回你可以获得的最大乘积。

输入格式:

输入一个整数 n (2 <= n <= 58)。

输出格式:

输出一个整数,表示可以获得的最大乘积。

样例输入:
10
样例输出:
36
解答过程:

动态规划 是解决此类问题的有效方法。我们使用一个数组 dp 来存储每个整数 i 的最大乘积值,并通过状态转移方程更新 dp[i]

步骤:

  1. 初始化:
    • 创建一个大小为 n+1 的数组 dp,其中 dp[i] 表示整数 i 拆分后的最大乘积。
    • 初始化 dp[2] = 1,因为 2 只能拆分成 1 + 1,乘积为 1
  2. 状态转移:
    • 对于每一个整数 i,尝试将其拆分成 j 和 i-j,并更新 dp[i] 为 max(dp[i], max(j, dp[j]) * max(i-j, dp[i-j]))
  3. 结果:
    • 最终 dp[n] 即为所求的最大乘积。
Python代码实现及详细注释:
def integer_break(n):if n == 2:return 1# 初始化dp数组dp = [0] * (n + 1)dp[2] = 1for i in range(3, n + 1):for j in range(1, i // 2 + 1):# 更新dp[i]为当前最大乘积dp[i] = max(dp[i], max(j, dp[j]) * max(i - j, dp[i - j]))return dp[n]# 示例输入
n = 10# 调用函数并打印结果
print(integer_break(n))  # 输出: 36

题目12:买卖股票的最佳时机 II

背景描述:

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(即多次买入和卖出一支股票)。但是,你不能同时参与多个交易(必须在再次购买前出售掉之前的股票)。

输入格式:

第一行包含一个整数 n (1 <= n <= 10^5),表示价格数组的长度。 第二行包含 n 个整数,表示每一天的价格。

输出格式:

输出一个整数,表示可以获得的最大利润。

样例输入:
6
7 1 5 3 6 4
样例输出:
7
解答过程:

贪心算法 是解决此类问题的有效方法。我们只需要在价格上涨时进行买卖操作,即可获得最大利润。

步骤:

  1. 初始化:
    • 设置变量 max_profit 为0,用于记录总利润。
  2. 遍历价格数组:
    • 对于每一天的价格,如果当天的价格高于前一天的价格,则将差值累加到 max_profit 中。
  3. 结果:
    • 最终 max_profit 即为所求的最大利润。
Python代码实现及详细注释:
def max_profit(prices):max_profit = 0for i in range(1, len(prices)):# 如果当天的价格高于前一天的价格,则进行买卖操作if prices[i] > prices[i - 1]:max_profit += prices[i] - prices[i - 1]return max_profit# 示例输入
prices = [7, 1, 5, 3, 6, 4]# 调用函数并打印结果
print(max_profit(prices))  # 输出: 7

总结

这两个题目分别涉及了不同的算法思想和技巧:

  • 整数拆分 使用了动态规划的方法,适用于处理需要寻找最优子结构的问题。
  • 买卖股票的最佳时机 II 使用了贪心算法,这是一种常见的用于优化问题的方法,特别适合用于寻找局部最优解以达到全局最优解的情况。

http://www.ppmy.cn/devtools/155773.html

相关文章

C#接口(Interface)

C#中的接口 接口是C#中一种重要的概念&#xff0c;它定义了一组函数成员&#xff0c;但不实现它们。接口提供了一种标准结构&#xff0c;使得实现接口的类或结构在形式上保持一致。接口定义了属性、方法和事件&#xff0c;这些都是接口的成员&#xff0c;但接口只包含成员的声…

Van-Nav:新年,将自己学习的项目地址统一整理搭建自己的私人导航站,供自己后续查阅使用,做技术的同学应该都有一个自己网站的梦想

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Van-Nav是一个基于Vue.js开发的导航组件库&#xff0c;它提供了多种预设的样式和灵活的配置选项&#xff0c;使得开发者可以轻松地定制出符合项目需求…

两种交换排序算法--冒泡,快速

目录 1.冒泡排序原理 2.快速排序原理 3.冒泡代码实现 4.快速排序代码实现 1.冒泡排序原理 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;基本思想是通过反复交换相邻的元素&#xff0c;直到整个序列有序。它的名字来源于较大的元素像气泡…

K8s介绍代理外部服务的svc几种方式

在 Kubernetes 中&#xff0c;若需让集群内应用访问外部服务&#xff0c;可通过以下 **Service 配置方式**实现代理&#xff1a; --- ### 1. **ClusterIP Service 手动维护 Endpoints** - **原理**&#xff1a;创建 ClusterIP 类型的 Service 并手动指定 Endpoints&#xff…

java异常处理——try catch finally

单个异常处理 1.当try里的代码发生了catch里指定类型的异常之后&#xff0c;才会执行catch里的代码&#xff0c;程序正常执行到结尾 2.如果try里的代码发生了非catch指定类型的异常&#xff0c;则会强制停止程序&#xff0c;报错 3.finally修饰的代码一定会执行&#xff0c;除…

【懒删除堆】力扣3092. 最高频率的 ID

你需要在一个集合里动态记录 ID 的出现频率。给你两个长度都为 n 的整数数组 nums 和 freq &#xff0c;nums 中每一个元素表示一个 ID &#xff0c;对应的 freq 中的元素表示这个 ID 在集合中此次操作后需要增加或者减少的数目。 增加 ID 的数目&#xff1a;如果 freq[i] 是正…

计算机网络 笔记 网络层 3

IPv6 IPv6 是互联网协议第 6 版&#xff08;Internet Protocol Version 6&#xff09;的缩写&#xff0c;它是下一代互联网协议&#xff0c;旨在解决 IPv4 面临的一些问题&#xff0c;以下是关于 IPv6 的详细介绍&#xff1a; 产生背景&#xff1a; 随着互联网的迅速发展&…

shallowRef和shallowReactive的用法以及使用场景和ref和reactive的区别

Vue3 浅层响应式 API 1. ref vs shallowRef 1.1 基本概念 ref: 深层响应式&#xff0c;会递归地将对象的所有属性转换为响应式shallowRef: 浅层响应式&#xff0c;只有 .value 的改变会触发更新&#xff0c;不会递归转换对象的属性 1.2 使用对比 // ref 示例 const deepRe…