在 C++ 中计算绝对差不超过 K 的数组的最大元素数
给定一个数组,假设 arr[] 包含任意给定大小的整数元素和一个正整数 k,任务是计算绝对差不超过给定整数 k 的元素对的数量。
数组是一种数据结构,可以存储相同类型元素的固定大小顺序集合。数组用于存储数据集合,但将数组视为相同类型变量的集合通常更有用。
例如
输入 − int arr[] = {2, 3, 6, 12, 14}, k= 5 输出 −计数为:3
解释 − 最大绝对差不超过 k 即 5 的对,在此示例中,这样形成的对为:(2, 3), (2, 6), (3,6) 即 {2, 3, 6} 因此计数为 3。
输入 − int arr[] = {2, 3, 6, 12, 14}, k= 10 输出 − 计数为:4
解释 −最大绝对差不超过 k 即 10 的对,在此示例中,这样形成的对为: (2, 3), (2, 6), (3,6), (2, 12), (3, 12), (6, 12) 即 {2, 3, 6, 12} 因此计数为 4,因为最大元素为 4。
输入 − int arr[] = {2, 3, 6, 12, 14}, k= 0 输出 − 计数为:0
解释 −由于没有差值为 0 的对,因此计数为 0。
以下程序中使用的方法如下
创建一个数组,比如说 arr[] 和一个正整数 k
使用 length() 函数计算数组的长度,该函数将根据数组中的元素返回一个整数值。
获取一个临时变量,用于存储元素的数量。
声明两个临时变量,比如说 first 和 last,并用 0 初始化
调用 sort 方法对数组进行排序,并将数组和数组大小作为参数传递给函数。
开始循环,使 i 为 0 且 i 小于数组大小
在循环内部,启动 while j<size AND arr[j] <= arr[i] + k
在 while 中,检查 IF count < j-i,然后将 count 设置为 j - i,将 first 设置为 i,将 last 设置为 j
返回 count
打印结果。
示例
#include <iostream> #include <algorithm> using namespace std; int countmax(int arr[], int size, int K){ int result = 0; int i = 0, j = 0; int beg = 0; int end = 0; // 对数组进行排序 sort(arr, arr + size); // 查找最大元素 for (i = 0; i < size; i++) { // 计算范围内的所有元素 while (j < size && arr[j] <= arr[i] + K) j++; if (result < (j - i)) { result = (j - i); beg = i; end = j; } } // 返回最大计数 return result; } // main 主函数 int main(){ int arr[] = { 2, 3, 6, 12, 14 }; int size = sizeof(arr) / sizeof(arr[0]); int K = 5; cout <<"count is "<<countmax(arr, size, K) << endl; return 0; }
输出
如果运行上述代码,我们将得到以下输出 −
count is 3