给定一个从0开始的数组nums和一个非负整数 k。在一次操作中,你可以做以下操作:。选择一个之前未选择过的下标i,范围为[0.nums.length - 1].将nums[i]替换为范围[nums[i] - k,nums[i]+k]内的任意整数(包含两端)。在应用任意次数的操作后,返回数组nums的最大可能分数。数组分数是“数组中最多的重复元素个数”注意,你只能对每个下标应用一次操作。 用c++实现
```c
#include <stdio.h>
#include <stdlib.h>
int maxScore(int* nums, int numsSize, int k) {
int *freq = (int *)malloc(sizeof(int) * (numsSize + 1));
memset(freq, 0, sizeof(int) * (numsSize + 1));
int maxFreq = 0;
for (int i = 0; i < numsSize; i++) {
int left = nums[i] - k;
int right = nums[i] + k;
int count = 0;
for (int j = 0; j < numsSize; j++) {
if (nums[j] >= left && nums[j] <= right) {
count++;
}
}
freq[count]++;
maxFreq = fmax(maxFreq, count);
}
int ans = 0;
for (int i = 1; i <= maxFreq; i++) {
ans += (i * (i - 1)) / 2 * freq[i];
}
free(freq);
return ans;
}
int main() {
int nums[] = {1, 10, 4};
int numsSize = sizeof(nums) / sizeof(nums[0]);
int k = 3;
int result = maxScore(nums, numsSize, k);
printf("最大可能分数为: %d
", result);
return 0;
}
```
创作工场
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用🔥专业版,更聪明、更完整、更原创!