Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C+中降低此解决方案的时间复杂性+;?_C++_Algorithm_Vector_Data Structures_Dsa - Fatal编程技术网

C++ 如何在C+中降低此解决方案的时间复杂性+;?

C++ 如何在C+中降低此解决方案的时间复杂性+;?,c++,algorithm,vector,data-structures,dsa,C++,Algorithm,Vector,Data Structures,Dsa,给定整数数组nums,找到具有最大和的连续子数组(至少包含一个数字),并返回其和 例如: 输入:[-2,1,-3,4,-1,2,1,-5,4], 产出:6 说明:[4,-1,2,1]的最大和=6 class Solution { public: int maxSubArray(vector<int>& nums) { int max=INT_MIN; int result; int i

给定整数数组nums,找到具有最大和的连续子数组(至少包含一个数字),并返回其和

例如:

输入:[-2,1,-3,4,-1,2,1,-5,4], 产出:6 说明:[4,-1,2,1]的最大和=6

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        
        
        int max=INT_MIN;
        int result;
        int i,j;
        if(nums.size()==1)
            return nums[0];
        if(nums.size()==0)
            return 0;
        for(i=0;i<nums.size();i++)
        {
            
            for(j=i;j<nums.size();j++)
            {
                
                result=accumulate(nums.begin()+i,nums.begin()+j+1,0);
                if(result>max)
                    max=result;
                
            }
            
        }
        return max;
    }
};
类解决方案{
公众:
int最大子数组(向量和nums){
int max=int_MIN;
int结果;
int i,j;
如果(nums.size()==1)
返回nums[0];
如果(nums.size()==0)
返回0;

对于(i=0;i以下),这仅在一个循环中实现,从。 通过一点簿记,您还可以使用sum
max\u sou\u far
来保持最大子序列的第一个和最后一个元素位置

    #include<iostream> 
    #include<climits> 

    using namespace std; 

    int maxSubArraySum(int a[], int size) 
    { 
        int max_so_far = INT_MIN, max_ending_here = 0; 

        for (int i = 0; i < size; i++) 
        { 
            max_ending_here = max_ending_here + a[i]; 
            if (max_so_far < max_ending_here) 
                max_so_far = max_ending_here; 

            if (max_ending_here < 0) 
                max_ending_here = 0; 
        } 
        return max_so_far; 
   } 
#包括
#包括
使用名称空间std;
整数最大子数组和(整数a[],整数大小)
{ 
int max_so_far=int_MIN,max_ending_here=0;
对于(int i=0;i
请查看此链接:

这里有两个有效的解决方案

其主要思想是保留一个maxSum变量,该变量将跟踪到目前为止看到的最大和。您还需要一个currentSum变量来跟踪当前窗口中的和。每次向当前和添加正数时,将其与maxSum进行比较,如果currentSum>maxSum,则更新maxSum。

这可以使用

#include//max函数需要此头文件。
类解决方案
{
公众:
int最大子数组(向量和nums){
内部温度=0;
int max_sum=0;

对于(It i=0;这是从某个竞赛/挑战/竞争性编码/黑客站点中读取的。是吗?如果你的目标是学习C++,你就不会在那里学到任何东西。在几乎所有的情况下,像这个一样,正确的解决方案是基于数学或编程技巧。如果你不知道窍门是什么,并试图编写一个蛮力的方法,程序运行缓慢,失败是因为这个原因。如果你想学习C++,你将无法从毫无意义的在线竞赛网站中学习任何东西。你通过使用不同的算法来“优化”。(这看起来像是一个动态编程问题,所以我从那里开始。)是的,我认为这是一个dp问题,只是想寻找一种方法,我可以在给定的时间内解决它,而不使用dp