计算C ++中绝对差不超过K的数组的最大元素

我们得到一个数组,假设它是任意给定大小的整数元素的arr []和一个正整数k,任务是计算绝对差不超过给定整数k的那些元素对的计数。

数组是一种数据结构,可以存储相同类型的元素的固定大小的顺序集合。数组用于存储数据集合,但是将数组视为相同类型的变量集合通常会更有用。

例如

Input − int arr[] = {2, 3, 6, 12, 14}, k= 5Output − count is : 3

解释-具有最大绝对差值的对不超过k,即5,在此示例中,如此形成的对为:(2,3),(2,6),(3,6),即{2,3,6}数是3。

Input − int arr[] = {2, 3, 6, 12, 14}, k= 10Output − count is : 4

解释-具有最大绝对差不超过k的对,在此示例中为10,因此形成的对为:(2,3),(2,6),(3,6),(2,12),(3, 12),(6、12),即{2、3、6、12},因此计数为4,因为最大元素为4。

Input − int arr[] = {2, 3, 6, 12, 14}, k= 0Output − count is : 0

说明-由于不存在差异为0的对,因此count为0。

以下程序中使用的方法如下

  • 创建一个数组,假设arr []和一个正整数k

  • 使用length()函数将根据数组中的元素返回整数值来计算数组的长度。

  • 取一个临时变量来存储元素的数量。

  • 声明两个临时变量,比如说first和last并用0初始化

  • 调用sort方法对数组进行排序,并将数组和数组的大小作为函数的参数传递。

  • i的启动循环为0,并且我小于数组的大小

  • 在循环内,在j <size AND arr [j] <= arr [i] + k

  • 在while内,检查IF count <ji,然后将count设置为j-i,第一个设置为i,最后一个设置为j

  • 返回计数

  • 打印结果。

示例

#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;
}
//主要功能
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