试图弄清楚为什么我会收到运行时错误?

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 循环更好。