使用C++解决:val n = nums.size val res = IntArray(n - k + 1) val negCount = IntArray(101) var negNum = 0 for (i in 0 until k) { if (nums[i] < 0) { negCount[-nums[i]]++ negNum++ } } for (i in 0 until n - k + 1) { if (i > 0) { if (nums[i - 1] < 0) { negCount[-nums[i - 1]]-- if (negCount[x] > negNum - negCount[x]) { res[i - 1] = x } else if (negCount[x] == negNum - negCount[x]) { res[i - 1] = -x } negNum-- } if (nums[i + k - 1] < 0) { negCount[-nums[i + k - 1]]++ negNum++ } } if (negCount[x] > negNum - negCount[x]) { res[i] = x } else if (negCount[x] == negNum - negCount[x]) { res[i] = -x } } return res
时间: 2023-11-27 20:51:05 浏览: 131
这段代码使用了滑动窗口的思想来解决一个数组中每个长度为k的子数组中出现次数最多的数,并且若有多个数出现次数一样,则返回负数。
下面是用C++实现的代码:
```c++
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
vector<int> maxSlidingWindow(vector<int>& nums, int k, int x) {
int n = nums.size();
vector<int> res(n - k + 1);
int negCount[101];
memset(negCount, 0, sizeof(negCount));
int negNum = 0;
for (int i = 0; i < k; i++) {
if (nums[i] < 0) {
negCount[-nums[i]]++;
negNum++;
}
}
for (int i = 0; i < n - k + 1; i++) {
if (i > 0) {
if (nums[i - 1] < 0) {
negCount[-nums[i - 1]]--;
if (negCount[x] > negNum - negCount[x]) {
res[i - 1] = x;
} else if (negCount[x] == negNum - negCount[x]) {
res[i - 1] = -x;
}
negNum--;
}
if (nums[i + k - 1] < 0) {
negCount[-nums[i + k - 1]]++;
negNum++;
}
}
if (negCount[x] > negNum - negCount[x]) {
res[i] = x;
} else if (negCount[x] == negNum - negCount[x]) {
res[i] = -x;
}
}
return res;
}
int main() {
vector<int> nums = {1, -1, -1, 3, 5, -1, 2};
int k = 3, x = 1;
vector<int> res = maxSlidingWindow(nums, k, x);
for (int i = 0; i < res.size(); i++) {
cout << res[i] << " ";
}
cout << endl;
return 0;
}
```
其中,`memset`函数用来初始化数组`negCount`为0。这里使用了`vector`来存储结果。
给定的输入是`nums`数组、滑动窗口大小`k`、以及要查找的数`x`。在主函数中,我们可以调用`maxSlidingWindow`函数来获取结果并输出。
阅读全文