首页 > 解决方案 > 两个数字之和 == 目标

问题描述

给定一个整数数组 nums 和一个整数目标,返回两个数字的索引,使它们加起来等于目标。

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    std::vector<int>nums = { 1,2,3,4,5 };
    int target =  7 ;

    for (int i = 0; i < nums.size()-1; i++)
    {
        for (int j = i + 1; j <= nums.size(); i++)
        {
            if (nums[i]+nums[j]==target)
            {
                cout << " [ " << i << " ," << j-1 << " ] ";
            }
        }
    }

    return 0;
}

当我运行程序时,我有两个错误:

Debug Assertion Failed , Expression:vector subscript out of range.
Unhandled exception at 0x7938E906 (ucrtbased.dll) in problems.exe: An invalid parameter was passed to a function that considers invalid parameters fatal. ( at line 18 --if(nums[i]+nums[j]==target))

有人能帮助我吗?

标签: c++c++17

解决方案


for您的代码中的第二个循环有 2 个错误:

  1. 条件部分应该j < nums.size()是.
  2. 增量操作应该代替j++.i++

此外,在打印最终索引时, print j,而不是j-1.

看看下面的实现:

#include <iostream>
#include <vector>

int main()
{
    std::vector<int>nums = { 1,2,3,4,5 };
    int target =  7 ;

    for (std::size_t i = 0; i < nums.size()-1; i++)
    {
        for (std::size_t j = i + 1; j < nums.size(); j++)
        {
            if (nums[i]+nums[j]==target)
            {
                std::cout << " [ " << i << " ," << j << " ] ";
            }
        }
    }

    return 0;
}

输出:

 [ 1 ,4 ]  [ 2 ,3 ] 

推荐阅读