Recursion 最大子阵问题能在O(n)时间内递归求解吗?

Recursion 最大子阵问题能在O(n)时间内递归求解吗?,recursion,dynamic-programming,Recursion,Dynamic Programming,我知道用分而治之的方法来解决这个时间复杂度为O(nlog(n))的问题,但我们能做得更好吗 例如,我们可以应用计算第n个斐波那契项时使用的相同技术,其中我们创建了一个“树递归”以及用于记忆的额外内存,以实现O(n)的时间复杂度 我问这个问题是因为这被认为是一个动态规划问题,到目前为止,我遇到的所有动态规划问题都可以递归地解决,并使用相同的技术,例如“house robber”,当然还有计算Fibonacci序列的第n项。我们可以在O(n)时间复杂度内递归地解决它,其中n是给定数组的长度。C++中

我知道用分而治之的方法来解决这个时间复杂度为O(nlog(n))的问题,但我们能做得更好吗

例如,我们可以应用计算第n个斐波那契项时使用的相同技术,其中我们创建了一个“树递归”以及用于记忆的额外内存,以实现O(n)的时间复杂度


我问这个问题是因为这被认为是一个动态规划问题,到目前为止,我遇到的所有动态规划问题都可以递归地解决,并使用相同的技术,例如“house robber”,当然还有计算Fibonacci序列的第n项。

我们可以在O(n)时间复杂度内递归地解决它,其中n是给定数组的长度。C++中的一个示例方法如下:< /P>
 void maxSubarrayRecursive(vector<int>& nums, int pos, int sum, int& max_sum) {
        if (pos == nums.size()) return;
        sum += nums[pos];
        max_sum = max(max_sum, sum);
        if (sum < 0) {
            sum = 0;
        }
        maxSubarrayRecursive(nums, pos + 1, sum, max_sum);
   }

   int main() {
        vector<int> nums = {1, 2, -1, 4, 3, 0, -10, 10};
        // sample nums array to find out max subarray sum
        int max_sum = INT_MIN;
        maxSubarrayRecursive(nums, 0, 0, max_sum);
        cout<< "Maximum subarray sum is: "<<max_sum<<endl;
    }
void MaxSubrayRecursive(向量和nums、整数位置、整数和、整数和最大和){
if(pos==nums.size())返回;
总和+=nums[pos];
max_sum=max(max_sum,sum);
如果(总和<0){
总和=0;
}
MaxSubrayRecursive(nums,pos+1,sum,max_sum);
}
int main(){
向量nums={1,2,-1,4,3,0,-10,10};
//采样nums数组以查找最大子数组和
int max_sum=int_MIN;
MaxSubrayRecursive(nums,0,0,max_sum);

CUT< P>我们可以在O(n)时间复杂度递归地求解,其中n是给定数组的长度。C++中的一个示例方法如下:

 void maxSubarrayRecursive(vector<int>& nums, int pos, int sum, int& max_sum) {
        if (pos == nums.size()) return;
        sum += nums[pos];
        max_sum = max(max_sum, sum);
        if (sum < 0) {
            sum = 0;
        }
        maxSubarrayRecursive(nums, pos + 1, sum, max_sum);
   }

   int main() {
        vector<int> nums = {1, 2, -1, 4, 3, 0, -10, 10};
        // sample nums array to find out max subarray sum
        int max_sum = INT_MIN;
        maxSubarrayRecursive(nums, 0, 0, max_sum);
        cout<< "Maximum subarray sum is: "<<max_sum<<endl;
    }
void MaxSubrayRecursive(向量和nums、整数位置、整数和、整数和最大和){
if(pos==nums.size())返回;
总和+=nums[pos];
max_sum=max(max_sum,sum);
如果(总和<0){
总和=0;
}
MaxSubrayRecursive(nums,pos+1,sum,max_sum);
}
int main(){
向量nums={1,2,-1,4,3,0,-10,10};
//采样nums数组以查找最大子数组和
int max_sum=int_MIN;
MaxSubrayRecursive(nums,0,0,max_sum);

库特汉克斯,但这不是我要找的方法汉克斯,但那不是我要找的方法你是说“最大和子阵列”?你是说“最大和子阵列”?