试图弄清楚为什么我会收到运行时错误?
Trying to figure out why I'm getting a runtime error?
这是相交数组的代码。它似乎适用于大多数情况,直到
nums1 = [1]
nums2 = [1,1]
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> temp;
int i = 0;
int j = 0;
for (i = 0; i < nums1.size(); i++) {
for (j = 0; j < nums2.size(); j++) {
if ( (nums1.size() == nums2.size()) && (nums1[i] < nums1.size() - 1) ) {
if (nums1[i] == nums2[j])
temp.push_back(nums1[i]);
}
else if ( (nums1[i] == nums2[j]) && (i < nums1.size()) ) {
temp.push_back(nums1[i]);
i++;
}
}
}
return temp;
}
};
当i = 1的时候报错,但是条件是(nums1[i] == nums2[j]) && (i < nums1.size()),为什么还是报错在那里卡住了?
LeetCode 349
您的支票顺序有误。您需要在 索引之前检查 i
是否为有效索引 ,如下所示:
else if ( (i < nums1.size()) && (nums1[i] == nums2[j]) ) {
否则你会调用未定义的行为(这可能会导致 运行 次错误)。
同样,在对向量进行索引的所有情况下,您都需要确保索引有效。
&& 的操作数从左到右计算,post-如果先决条件都有效,将检查条件。
顺便说一句,不建议在 for 循环中修改索引。在这种情况下,您很可能会做重复的工作。如果你真的想修改索引以使你的算法工作,while 循环更好。
这是相交数组的代码。它似乎适用于大多数情况,直到 nums1 = [1] nums2 = [1,1]
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> temp;
int i = 0;
int j = 0;
for (i = 0; i < nums1.size(); i++) {
for (j = 0; j < nums2.size(); j++) {
if ( (nums1.size() == nums2.size()) && (nums1[i] < nums1.size() - 1) ) {
if (nums1[i] == nums2[j])
temp.push_back(nums1[i]);
}
else if ( (nums1[i] == nums2[j]) && (i < nums1.size()) ) {
temp.push_back(nums1[i]);
i++;
}
}
}
return temp;
}
};
当i = 1的时候报错,但是条件是(nums1[i] == nums2[j]) && (i < nums1.size()),为什么还是报错在那里卡住了?
LeetCode 349
您的支票顺序有误。您需要在 索引之前检查 i
是否为有效索引 ,如下所示:
else if ( (i < nums1.size()) && (nums1[i] == nums2[j]) ) {
否则你会调用未定义的行为(这可能会导致 运行 次错误)。
同样,在对向量进行索引的所有情况下,您都需要确保索引有效。
&& 的操作数从左到右计算,post-如果先决条件都有效,将检查条件。
顺便说一句,不建议在 for 循环中修改索引。在这种情况下,您很可能会做重复的工作。如果你真的想修改索引以使你的算法工作,while 循环更好。