Closed. This question is not reproducible or was caused by typos。它当前不接受答案。
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
在4个月前关闭。
Improve this question
我正在尝试使用C++进行蛮力解决,以解决LeetCode显然最受欢迎的问题“两次加总”问题,如本视频0:32标记中所述:https://youtu.be/KLlXCFG5TnA?t=32。本质上,我需要遍历 vector 中2位数字和的每种可能组合,直到达到所需的目标数字。然后,我返回数字的2个索引,其值组合起来等于目标数字。
我的代码适用于LeetCode提出的前17个测试用例。但是对于下面的测试用例,尽管迭代器从未达到各自的限制(
我缓慢地通过调试器,但是对于为什么代码“早”脱离
Solution.h
因此在函数内部,外循环
例如,您的程序可以通过以下方式查找。
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
在4个月前关闭。
Improve this question
我正在尝试使用C++进行蛮力解决,以解决LeetCode显然最受欢迎的问题“两次加总”问题,如本视频0:32标记中所述:https://youtu.be/KLlXCFG5TnA?t=32。本质上,我需要遍历 vector 中2位数字和的每种可能组合,直到达到所需的目标数字。然后,我返回数字的2个索引,其值组合起来等于目标数字。
我的代码适用于LeetCode提出的前17个测试用例。但是对于下面的测试用例,尽管迭代器从未达到各自的限制(
for
和nums.size()-2
),但nums.size()-1
循环仅迭代一次。我缓慢地通过调试器,但是对于为什么代码“早”脱离
for
循环感到迷惑。Solution.h
#include <vector>
#include <iostream>
using namespace std;
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result_vector;
for (int i = 0; i < nums.size() - 2; i++) { // this for loop [undesirably] only iterates once
for (int j = i + 1; j < nums.size() - 1; j++) { // this for loop also [undesirably] only iterates once
if (nums.at(i) + nums.at(j) == target) {
result_vector.push_back(i);
result_vector.push_back(j);
}
}
}
if (result_vector.size() == 0) {
result_vector.push_back(-1);
result_vector.push_back(-1);
cout << "No solution found.";
}
return result_vector;
}
};
Main.cpp #include "Solution.h"
int main()
{
Solution sol;
vector<int> vect{3, 2, 4};
int target = 6;
sol.twoSum(vect, target);
return 0;
}
最佳答案
vector vect
作为参数传递给函数
vector<int> vect{3, 2, 4};
有三个要素。因此在函数内部,外循环
for (int i = 0; i < nums.size() - 2; i++) {
由于条件而只有一次迭代i < nums.size() - 2
相当于i < 3 - 2
注意不要将int类型用作索引类型。否则这个循环for (int i = 0; i < nums.size() - 2; i++) {
可以在将空 vector 传递给函数时调用未定义的行为,因为在这种情况下,由于通常的算术转换,因此i
总是小于nums.size() - 2
或nums.size() - 1
。例如,您的程序可以通过以下方式查找。
#include <iostream>
#include <vector>
#include <utility>
struct Solution
{
typedef std::vector<int>::size_type size_type;
std::vector<std::pair<size_type, size_type>>
operator ()( const std::vector<int> &v, int target )
{
std::vector<std::pair<size_type, size_type>> result;
for ( size_type i = 1; i < v.size(); i++ )
{
for ( size_type j = i; j < v.size(); j++ )
{
if ( v[j] + v[i-1] == target )
{
result.push_back( { i - 1, j } );
}
}
}
return result;
}
};
int main()
{
std::vector<int> v = { 3, 2, 4 };
int target = 6;
auto result = Solution()( v, target );
for ( const auto &p : result )
{
std::cout << "( " << p.first << ", " << p.second << " ) ";
}
std::cout << '\n';
return 0;
}
程序输出为( 1, 2 )