Subsequence sum

后端 未结 5 1239
天命终不由人
天命终不由人 2021-01-30 18:23

Given an array of integers eg [1, 2, -3, 1] find whether there is a sub-sequence that sums to 0 and return it (eg [1, 2, -3] or [2,

5条回答
  •  我在风中等你
    2021-01-30 19:06

    A C++ implementation with logic similar to Fabricio's answer.

    pair FindSubsequenceSum(const vector& arr)      
    {
      map sumMap;
      map::iterator it;
      int sum = 0;
      for (int i = 0; i < arr.size(); i++) 
      {
        sum += arr[i];
        it = sumMap.find(sum);
        if (it != sumMap.end()) 
        {
            return make_pair(it->second + 1, i);
        } else {
            sumMap.insert(make_pair(sum, i));
      }
    }
    
    int main()
    {
      int arr[] = {1,4,-3,-4,6,-7,8,-5};
      vector input(arr, arr + sizeof(arr) / sizeof(arr[0]));
      pair result = FindSubsequenceSum(input);
    
      cout << "(" << result.first << "," << result.second << ")" << endl;
    
      return 0;
    }
    
    Output:
    (2,6)
    

提交回复
热议问题