给定和未排序的数组 arr ,大小为 n 的非负整数,找到一个连续的子数组,它添加到数字总和。帮助获得输出

Given and unsorted array arr , of size n of non-negative integers, find a continuous subarray which adds to number sum. Help in getting output

#include <iostream>

using namespace std;

int main()
{
int n;
n=4;
int arr[n]={1,2,3,8};
int sum;
sum=5;
int curr=0;
cin>>sum;
for(int i=0;i<n;i++){
    for(int j=i;j<n;j++){
        curr+=arr[j];
        if(curr==sum){
            cout<<i;
        }
    cout<<curr<<endl;
    }
}
    
}

对于给定的问题,我需要找到这样一个子数组的开始和结束索引。我试过上面的代码,但无法获得正确的输出。请指导我。

我认为您的代码只需要进行一些小的修改。你应该添加 一些代码来处理你的 运行 sum 大于 target sum 的情况,你还应该重新初始化你的 运行 总和 正确。

可能有一些比 O(n^2) 更快的有效解决方案,我还不知道。如果有人知道时间复杂度更好的解决方案,请与我们分享。

下面是一个简单的算法,时间复杂度为O(n^2)。 (对于这个问题,它可能没有最有效的时间复杂度)。

此函数打印出数组的 2 个索引。这两个索引之间所有元素的总和将等于目标总和。

    void Print_Index_of_2_Elements(int array[], int total_element, int target)
    {            
            // Use Brute force .  Time complexity = O(n^2)
            for (int i = 0; i < total_element; i++) 
            {
                int running_sum = array[i];
        
                // Second for loop
                for (int j = (i + 1) ; j < total_element; j++) 
                {
                    if (running_sum == target) 
                    {    
                        cout << "Two indices are: " << i << " and " << j;
                        return;  // Found Answer. Exit.
                    }
                    else if ( running_sum > target )
                        break;
                    else  //  running_sum < target 
                        running_sum += array[j];
                }
            }
        
            cout << " Sorry - no answer was found for the target sum.";             
}

如果您是子数组或数组的初学者。那么这个代码是给你的:

#include <iostream>

using namespace std;

int main()
{
int n;
cin>>n;
int arr[n];
for(int i=0;i<n;i++){
    cin>>arr[i];
}
int sum;
cin>>sum;
int curr=0;
for(int i=0;i<n;i++){
    for(int j=i;j<n;j++){
        if(curr==sum){
            cout<<i+1<<" "<<j;
            return 0;
        }
        else if (curr>sum){
            curr=0;
        }
        else if(curr<sum){
            curr+=arr[j];
        }

    }
}
return 0;
}

如果您对此有任何疑问,请随时发表评论让我知道。