在 C++ 中查詢給定 n 個範圍內的第 k 小元素


在這個問題中,我們給定了 n 個範圍和一個整數 k。我們的任務是查詢給定 n 個範圍中的第 k 小元素。

我們需要從合併範圍後建立的陣列中找到第 k 小元素。

讓我們透過一個例子來理解這個問題,

輸入:範圍 = {{2, 5}, {7, 9}, {12, 15}},k = 9

輸出:13

解釋:

建立的陣列是 {2, 3, 4, 5, 7, 8, 9, 12, 13, 14, 15}

最小的元素是 13

解決方案方法

解決這個問題的一個簡單方法是透過從所有範圍建立陣列,並且由於它是從範圍建立的,因此也會按升序排列。因此,我們只需要找到陣列的第 k 個值。

說明我們解決方案工作原理的程式,

示例

現場演示

#include <iostream>
using namespace std;

int main(){
   
   int arr[][2] = {{2, 5}, {7, 9}, {12, 15}};
   int n = sizeof(arr)/sizeof(arr[0]);
   int k = 9;

   int rangeArr[1000];
   int size = 0;
   for(int i = 0; i < n; i++)
      for(int j = arr[i][0]; j <= arr[i][1]; j++) {
         rangeArr[size] = j;  
         size++;
      }
   if(k < size)
      cout<<k<<"th smallest element of the ranged array is "<<rangeArr[k]<<endl;
   else
      cout<<"invalid Index";
   return 0;
}

輸出

9th smallest element of the ranged array is 13

更新於:25-Jan-2021

296 次瀏覽

Kickstart 你的 職業生涯

完成課程即可獲得認證

立即開始
廣告
© . All rights reserved.