首页 > 解决方案 > 函数过早退出循环

问题描述

我得到一个整数向量,其中每个数字代表袜子的颜色。我知道最理想的解决方案是使用哈希集,但我正在尝试使用蛮力方法来解决问题。然而,在找到第三对之后,我的循环开始变得有趣,因为它离开了内部循环并且控制流永远不会返回。事实上,即使 i 小于 n,即使外部循环也过早停止。

我尝试过使用调试器进行跟踪,但我很困惑,因为 i 和 j 从未超过 n 但它停止了。有人可以指出我正确的方向吗?

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


int sockMerchant(int n, vector<int> ar) {
    int pair = 0;
    for (int i = 0; i < n - 1; i++) {
        for (int j = i + 1; j < n - 1; j++) {
            if (ar[i] == ar[j] && ar[i] > 0) {
                pair++;
                ar[i] = 0;
                ar[j] = 0;
                break;
            }
        }
    }
    return pair;
}


int main() {
    vector<int> vec = {4,5,5,5,6,6,4,1,4,4,3,6,6,3,6,1,4,5,5,5};
    int n = 9;

    cout << sockMerchant(n, vec);

}

我的蛮力方法是将匹配对变成零,因为已经访问过。约束是袜子颜色在 1 到 100 之间。如果找到不为零的匹配对,则将对计数器加 1,并在循环完成后返回对。

标签: c++for-loopbrute-force

解决方案


您正在传递一个n等于 9 的参数。但是,您将此值用作循环中的循环边界vectorfor这是不正确的。

相反,您可以简单地将 传递vector给函数(通过引用避免复制),并在那里计算边界:

int sockMerchant(vector<int>& ar) {
    int n = ar.size();
    // ...

并这样称呼它:

cout << sockMerchant(vec);

此外,您的循环计数器还不够远。条件应该是i < n,而不是i < n - 1

这些修复给出的结果为 9,这是输入向量中匹配对的数量。这是一个演示


推荐阅读