c++ - 函数过早退出循环
问题描述
我得到一个整数向量,其中每个数字代表袜子的颜色。我知道最理想的解决方案是使用哈希集,但我正在尝试使用蛮力方法来解决问题。然而,在找到第三对之后,我的循环开始变得有趣,因为它离开了内部循环并且控制流永远不会返回。事实上,即使 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,并在循环完成后返回对。
解决方案
您正在传递一个n
等于 9 的参数。但是,您将此值用作循环中的循环边界vector
,for
这是不正确的。
相反,您可以简单地将 传递vector
给函数(通过引用避免复制),并在那里计算边界:
int sockMerchant(vector<int>& ar) {
int n = ar.size();
// ...
并这样称呼它:
cout << sockMerchant(vec);
此外,您的循环计数器还不够远。条件应该是i < n
,而不是i < n - 1
。
这些修复给出的结果为 9,这是输入向量中匹配对的数量。这是一个演示。
推荐阅读
- php - 在 Yii2 中初始化组件的更好方法是什么?
- docker - 入口 nginx 数字海洋上的 ssl 终止
- three.js - Three.js:在页面滚动时更改相机位置
- r - 在 r 中的 group_by 之后建模后取消嵌套列表列
- javascript - 从相对于元素的原点动画叠加
- mysql - 从 MySQL 执行 r 脚本
- java - 适用于 iOS 和 Android 平台的跨平台 appium 代码
- elasticsearch - 弹性搜索桶过滤
- wheelnav.js - 带有文本和图标的 Wheelnav 菜单
- drupal - Drupal 8 如何设置选择列表客户端所需的 HTML