当我在else-if语句[C++]之后使用printf时,结果发生了变化



我是C++的新手,我试图在leetcode中解决问题的同时学习C++。

问题背景:leetcode 697

class Solution {
public:
int findShortestSubArray(vector<int>& nums) {
unordered_map<int, int> count, first;
int res = 0, degree = 0;
for (int i = 0; i < nums.size(); ++i) {
// count first happen elements its frequency and it first occurrence index.
if (first.count(nums[i]) == 0)
first[nums[i]] = i;
if (++count[nums[i]] > degree) {
degree = count[nums[i]];
res = i - first[nums[i]] + 1;
} else if (count[nums[i]] == degree)
res = min(res, i - first[nums[i]] + 1);
}
return res;
}
};
int main() {
Solution s;
//  vector<int> nums = { 1, 2, 2, 3, 1, 4, 2};
vector<int> nums = {1, 2, 2, 3, 1};
int res = s.findShortestSubArray(nums);
cout << res << endl;
return 0;
}

当我运行这个代码时,结果是2,这是正确的。但当我尝试在else if之后打印计数映射值时,结果变为1,这是错误的,我不知道这是怎么来的。

代码如下所示。

class Solution {
public:
int findShortestSubArray(vector<int>& nums) {
unordered_map<int, int> count, first;
int res = 0, degree = 0;
for (int i = 0; i < nums.size(); ++i) {
// count first happen elements its frequency and it first occurrence index.
if (first.count(nums[i]) == 0)
first[nums[i]] = i;
if (++count[nums[i]] > degree) {
degree = count[nums[i]];
res = i - first[nums[i]] + 1;
} else if (count[nums[i]] == degree)
printf("count[nums[%d]] value is %dn", i, count[nums[i]]);
res = min(res, i - first[nums[i]] + 1);
}
return res;
}
};
int main() {
Solution s;
//  vector<int> nums = { 1, 2, 2, 3, 1, 4, 2};
vector<int> nums = {1, 2, 2, 3, 1};
int res = s.findShortestSubArray(nums);
cout << res << endl;
return 0;
}

更换

else if (count[nums[i]] == degree)
printf("count[nums[%d]] value is %dn", i, count[nums[i]]);
res = min(res, i - first[nums[i]] + 1);

带有

else if (count[nums[i]] == degree) {
printf("count[nums[%d]] value is %dn", i, count[nums[i]]);
res = min(res, i - first[nums[i]] + 1);
}

当块的大小超过一行时,应该始终使用{}

最新更新