C++ 中計算陣列中絕對差不大於 K 的最大元素個數


給定一個數組,假設為 arr[],包含任意大小的整數元素,以及一個正整數 k,任務是計算那些絕對差不大於給定整數 k 的元素對的個數。

陣列是一種資料結構,可以儲存相同型別元素的固定大小的順序集合。陣列用於儲存資料集合,但通常將陣列視為相同型別變數的集合更有用。

例如

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

說明 - 最大絕對差不大於 k(在本例中為 5)的配對,形成的配對為:(2, 3), (2, 6), (3,6),即 {2, 3, 6},因此計數為 3。

Input − int arr[] = {2, 3, 6, 12, 14}, k= 10
Output − 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= 0
Output − count is : 0

說明 - 由於沒有差為 0 的配對,因此計數為 0。

下面程式中使用的方法如下

  • 建立一個數組,假設為 arr[],以及一個正整數 k

  • 使用 length() 函式計算陣列的長度,該函式將根據陣列中的元素返回一個整數值。

  • 取一個臨時變數來儲存元素的計數。

  • 宣告兩個臨時變數,假設為 first 和 last,並初始化為 0

  • 呼叫 sort 方法對陣列進行排序,並將陣列和陣列的大小作為引數傳遞給函式。

  • 開始迴圈,從 i 為 0 開始,到 i 小於陣列的大小。

  • 在迴圈內部,開始 while 迴圈,j<size 並且 arr[j] <= arr[i] + k

  • 在 while 迴圈內部,檢查 IF count < j-i,則將 count 設定為 j - i,並將 first 設定為 i,last 設定為 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 the array
   sort(arr, arr + size);
   // Find max elements
   for (i = 0; i < size; i++) {
      // Count all elements which are in the range
      while (j < size && arr[j] <= arr[i] + K)
      j++;
      if (result < (j - i)) {
         result = (j - i);
         beg = i;
         end = j;
      }
   }
   // Return the max count
   return result;
}
// main function
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

更新於: 2020年5月15日

478 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告