我是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);
}
当块的大小超过一行时,应该始终使用{}
。