算法期中1005. 最小和
来源:互联网 发布:新媒体 知乎 编辑:程序博客网 时间:2024/05/21 09:24
Description
从数列A[0], A[1], A[2], …, A[N-1]中选若干个数,要求对于每个,i(i >= 0, i <=N - 1)A[i]和A[i+1]至少选一个数,求能选出的最小和.
1 <= N <= 100000, 1 <= A[i] <= 1000
请为下面的Solution类实现解决上述问题的函数minSum,函数参数A是给出的数列,返回值为所求的最小和.
class Solution {
public:
int minSum(vector& A) {
}
};
例1:A = {2, 5, 2},答案为4.
例2:A = {2, 5, 4},答案为5.
注意:你只需要提交Solution类的代码,你在本地可以编写main函数测试程序,但不需要提交main函数的代码. 注意不要修改类和函数的名称.
解析:
A = {2, 5, 4 ,8}
初始化:
notChooseCurrent = 0;
chooseCurrent = 2;
i = 1
notChooseCurrent = 2(上一次的chooseCurrent )
ChooseCurrent = min(0, 2) + 5 = 5
i = 2
notChooseCurrent = 5(上一次的chooseCurrent )
ChooseCurrent = min(2, 5) + 4 = 6
i = 3
notChooseCurrent = 6(上一次的chooseCurrent )
ChooseCurrent = min(5, 6) + 8 = 13
最终结果是min(5, 6) = 6
代码:
class Solution {public: int minSum(vector<int>& A) { if (A.size() == 0) return 0; int notChooseCurrent = 0; // 表示没有选择当前 int chooseCurrent = A[0]; // 表示选择了当前数字 for (int i = 1; i < A.size(); i++) { int temp = notChooseCurrent; notChooseCurrent = chooseCurrent; // 没有选择当前数字,那么它等于上次选择了的值 chooseCurrent = min(temp, chooseCurrent) + A[i]; // 选择了当前数字,值只能等于(上次没选择 / 上次选择了)最小值+当前的数字 } return min(chooseCurrent, notChooseCurrent ); }};
- 算法期中1005. 最小和
- 算法期中 : 1005. 最小和
- 算法期中 最小和
- 算法期中——最小和
- 算法期中 最小差
- Leetcode198.+算法期中1005. 动态规划问题之最大最小和问题
- 算法分析与设计期中测试——最小和
- 算法期中——最小差
- 算法期中1000. 分组
- [算法期中] 分组
- 算法期中 拓补序
- 算法期中 最近的0
- 算法期中 合并二叉树
- 算法期中——分组
- 算法期中1002. 合并二叉树
- 算法期中1003. 最近的0
- 算法期中1004. 拓扑序[Special judge]
- 算法期中 最长公共子串
- oracle sql 查询具体时间
- NOIP2017题解
- [A f*cking game]NOIP2017提高组复赛 翻车记
- 点击图片,切换图片的显示,设置tag
- 计算并输出一个三位整数的个位、十位和百位数字之和
- 算法期中1005. 最小和
- 页式内存管理和写时拷贝技术
- 多线程
- ICPC 2017 青岛 Spacecraft
- synchronized关键字
- 6.7
- servlet工作的原理和本质
- 用kargo快速自动化搭建kubernetes集群
- android实现再次按下返回键退出效果