如何解决函数退出循环为时过早
我得到一个整数向量,其中每个数字代表袜子的颜色。我知道最好的解决方案是使用哈希集,但是我正在尝试采用蛮力方法来解决问题。但是,找到第三个对后,我的循环开始变得有趣,因为它离开了内部循环,并且控制流再也没有回来。实际上,即使我小于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,6,4,1,3,5};
int n = 9;
cout << sockMerchant(n,vec);
}
我的暴力破解方法是将匹配对变为已被访问的零。约束条件是袜子的颜色在1到100之间。如果找到一个不为零的匹配对,则将对计数器加1,并在完成循环后返回对。
解决方法
您正在传递等于9的参数n
。但是,您将此值用作vector
循环中for
的循环边界,这是不正确的。
相反,您可以简单地将vector
传递给函数(通过引用避免复制),并在那里计算边界:
int sockMerchant(vector<int>& ar) {
int n = ar.size();
// ...
并这样称呼它:
cout << sockMerchant(vec);
此外,您的循环计数器还远远不够。条件应为i < n
,而不是i < n - 1
。
这些修正给出的结果为9,这是输入向量中匹配对的数量。这是demo。
,事实上,即使我小于n,即使是外循环也会过早停止。
在我的测试中,当i
的值达到8时,循环中断,这对于您的条件i < n - 1
是有意义的。也许您打算使用i < n
。
在不确定情况时打印诊断输出很有用。参见https://ideone.com/sR56AH。
有用的链接:How to debug small programs。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。