在 C++ 中查詢包含恰好一個給定 N 個整數的最大區間


假設我們有一個包含 N 個不同整數的陣列。我們必須找到區間 [L, R] 中的最大元素,使得該區間恰好包含給定的 N 個整數中的一個,並且 1 <= L <= R <= 105

因此,如果陣列類似於 Arr = [5, 10, 200],則輸出為 99990。所以所有可能的區間是 [1, 9]、[6, 199] 和 [11, 100000]。最後一個區間包含最大整數,例如 99990

這個想法很簡單。我們將固定我們希望區間包含的元素。現在,我們將看看如何將我們的區間向左和向右擴充套件,而不會與其他元素重疊。所以我們必須首先對陣列進行排序,然後對於一個固定的元素,我們使用前一個和下一個元素來確定結束位置。我們將處理一些特殊情況。所以當我們固定第一個和最後一個區間時。這樣,對於每個元素 i,我們找到區間的最大長度。

示例

 現場演示

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int maximumSize(vector<int>& vec, int n) {
   vec.push_back(0);
   vec.push_back(100001);
   n += 2;
   sort(vec.begin(), vec.end());
   int max_value = 0;
   for (int i = 1; i < n - 1; i++) {
      int Left = vec[i - 1] + 1;
      int Right = vec[i + 1] - 1;
      int count = Right - Left + 1;
      max_value = max(max_value, count);
   }
   return max_value;
}
int main() {
   vector<int> v;
   v.push_back(200);
   v.push_back(10);
   v.push_back(5);
   int n = v.size();
   cout << "Maximum Size is: " << maximumSize(v, n);
}

輸出

Maximum Size is: 99990

更新於: 2019-12-18

141 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告