C++`for`循环应该是多个时只迭代一次 我试图在C++中走一条蛮力的路线来解决LeetCode最明显的问题,即“两和”问题,如本视频中的0:32标记所描述的。本质上,我需要遍历向量中每一个可能的两位数和的组合,直到达到某个期望的目标数。然后返回两个数值的索引,它们的值组合起来等于目标数值
我的代码适用于LeetCode抛出的前17个测试用例。但是对于下面的测试用例,的C++`for`循环应该是多个时只迭代一次 我试图在C++中走一条蛮力的路线来解决LeetCode最明显的问题,即“两和”问题,如本视频中的0:32标记所描述的。本质上,我需要遍历向量中每一个可能的两位数和的组合,直到达到某个期望的目标数。然后返回两个数值的索引,它们的值组合起来等于目标数值,c++,loops,for-loop,vector,C++,Loops,For Loop,Vector,我的代码适用于LeetCode抛出的前17个测试用例。但是对于下面的测试用例,的循环只迭代一次,尽管迭代器从未达到各自的限制(nums.size()-2和nums.size()-1) 我一步一步地调试调试程序,但是我不明白为什么代码会“提前”脱离for循环 解决方案.h #include <vector> #include <iostream> using namespace std; class Solution { public: vector<in
循环只迭代一次,尽管迭代器从未达到各自的限制(nums.size()-2
和nums.size()-1
)
我一步一步地调试调试程序,但是我不明白为什么代码会“提前”脱离for
循环
解决方案.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;
}
};
#包括
#包括
使用名称空间std;
类解决方案{
公众:
向量twoSum(向量和nums,整数目标){
向量结果_向量;
for(int i=0;i cout作为参数传递给函数的向量vect
vector<int> vect{3, 2, 4};
程序输出为
( 1, 2 )
3-2==1
,这意味着唯一有效的i
是0
,因为1
不小于1
“…尽管迭代器从未达到各自的极限…”是错误的。哈…呜呜。出于某种原因,我记得从我上学的时候就需要在每个循环的结束条件中添加-1
,以避免越界错误。我将nums.size()-2
更改为nums.size()-1
和nums.size()-1
更改为nums.size()
。谢谢,向量以3
的大小传递,外部for循环从0
迭代到小于该大小减2。这是外部循环的一次迭代。类似地,内部循环的第一次迭代将从j=1
运行,直到j
小于大小减1为止(即从1到1)这是一次迭代。除非你解释为什么你期望/需要那些循环来迭代不止一次,没有人能帮助你——从你提供的预期行为的代码来看,你认为是不希望的。我已经得到帮助。我连接到一个视频来解释这个问题,为什么我要迭代不止一次。
for (int i = 0; i < nums.size() - 2; i++) {
i < nums.size() - 2
i < 3 - 2
for (int i = 0; i < nums.size() - 2; i++) {
#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 )