计算(列表中)连续元素的最大和
calculate the biggest sum of consecutive Elements ( in a list)
我试图计算vector<int>
的连续元素的最大和,但我真的不知道该怎么做:
我开始编码:
#include <iostream>
#include <vector>
using namespace std;
void calcule_somme(vector<int> tab);
void calcule_somme(vector<int> tab) {
int somme_partielle(0);
vector<int> element_les_plusgrand;
for(size_t i(0);tab.size();++i) {
for(size_t j(i+1);tab.size();++i) {
element_les_plusgrand.pushback(tab[i]);
if (tab[i]+tab[j]>compteur) {
element_les_plusgrand.push_back(tab[j]);
compteur = tab[i]+tab[j];
}
}
int main() {
return 0;
}
函数必须返回:连续元素的最大和是"4,5,78〃;其等于87。
#include <iostream>
#include <vector>
using namespace std;
int sum(const vector<int>& tab) {
int sum = 0;
for (size_t i = 0; i < tab.size(); i++) {
sum += tab[i];
}
return sum;
}
vector<int> calculate_sume(const vector<int>& tab) {
vector<int> ret, current;
int previous = -32767;
for (size_t i = 0; i < tab.size(); i++) {
if ((tab[i] > previous) == false) {
if (current.size() >= ret.size() && sum(current) > sum(ret))
ret = current;
current.clear();
}
current.push_back(tab[i]);
previous = tab[i];
}
for(size_t w(0);w<ret.size();++w) {
cout << ret[w]<< " ";
}
return ret;
}
int main() {
vector<int> tab ={-4,5,6,-9,24,-35,4,5,78};
sum(tab);
calculate_sume(tab);
return 0;
}
告诉我-4 5 6
首先,您需要跟踪两个向量,一个用于保存最大的字符序列,另一个用于存储当前正在计算的值。
从那里开始,您只需要遍历源向量中的元素,跟踪向量中的上一个和当前值。
如果当前值大于上一个值,则将当前值推入当前向量,然后将上一个数值指定给当前值。
如果它小于(或者我假设等于),那么连续的序列就完成了,应该从下一个序列开始。这意味着您需要执行以下操作:
- 确定当前矢量的大小是否大于或等于最大矢量的大小和当前矢量的和是否大于最大矢量的和。如果是,则指定最大值=当前值
- 清除当前列表
- 将previor赋值给当前int值
以下是我的写作方式:
int sum(const vector<int>& tab) {
int sum = 0;
for (size_t i = 0; i < tab.size(); i++) {
sum += tab[i];
}
return sum;
}
vector<int> calculate_some(const vector<int>& tab) {
vector<int> ret, current;
int previous = tab[0];
current.push_back(previous);
for (size_t i = 1; i < tab.size(); i++) {
current.push_back(tab[i]);
if (tab[i] <= previous || i == (tab.size() - 1)) {
if (current.size() >= ret.size() && sum(current) > sum(ret))
ret = current;
current.clear();
}
previous = tab[i];
}
return ret;
}
我是这样称呼它的:
int main() {
vector<int> tab = { -4,5,6,-9,24,-35,4,5,78 };
vector<int> results = calculate_some(tab);
for (size_t w(0); w<results.size(); ++w) {
cout << results[w] << " ";
}
system("pause");
return 0;
}
伪代码:
Algorithm Biggest_Consecutive_Sum
Input: Vector v
Output: Biggest_Sum
begin
index = 0, Biggest_Sum = 0
while(index < v.size()){
Sum = 0
while (Sum + V[index] > Sum){
Sum = Sum + V[index]
index = index + 1
}
if(Sum > Biggest_Sum) Biggest_Sum = Sum
index = index + 1
}
return Biggest_Sum
end
相关文章:
- 我应该如何表示我拥有的连续元素序列?
- 如何将 n 个连续元素插入到元素类型不可复制的 std::vector 中?
- 是否存在一个范围::视图::group_by对应项,它将所有元素都考虑在内,而不是只考虑连续的元素
- 结构化绑定,无需复制即可获取子向量的连续元素
- 确定数组是否可以旋转 3 个连续的数组元素进行排序?
- C++指向连续矢量元素的指针是矛盾的
- 减去连续的集元素
- 如何比较C 列表中的两个连续元素
- 连续单个元素的敏感变量
- 将解决方案打印为数组中非连续元素的最大总和
- AVX2 根据条件将连续元素扩展到稀疏向量?(如AVX512 VP扩展)
- 我如何连续地找到“占领”C 数组中的元素
- 是否有任何方法可以比较C 中的STD ::的两个连续元素
- 在C 中添加连续的向量元素组的最快方法
- 如何在c++中增加向量中k个连续元素的值
- C++用于将函数应用于连续元素的算法
- 阵列中连续元素的总和C
- 一种按排序顺序保持元素的数据结构,支持快速插入和计算连续元素之间的最大差异
- 返回连续数字的逻辑假设数组包含元素 1,9,2,3,4,9,6,7,8,那么它应该返回 2,3,4,6,7,8
- 从数组中每 3 个连续选择元素并使用函数进行比较