C++程式:求兄弟倆完成a和b個家務的方法數


假設我們有一個包含n個元素的陣列A,以及兩個值a和b。阿馬爾和比馬爾是兄弟倆。他們的父母把他們單獨留在家中,並委託他們完成n項家務。每項家務都有其複雜度。第i項家務的複雜度等於A[i]。阿馬爾年紀較大,他想要選擇複雜度大於某個值x(A[i] > x)的家務,把複雜度小於或等於x(A[i] ≤ x)的家務留給比馬爾。阿馬爾將完成恰好a項家務,比馬爾將完成恰好b項家務(a + b = n)。我們必須找到可以選擇的x值的數量,以便阿馬爾恰好完成a項家務,比馬爾恰好完成b項家務?

問題類別

這個問題屬於排序問題。當我們討論計算機科學中不同的問題解決演算法時,排序是一個非常常見的問題。顧名思義,排序表示將一組資料排列成某種形式。一般來說,我們可以按非遞減順序或非遞增順序排列它們。否則,排序也可以以預定義的方式進行。對於基於字串的問題,有時我們使用字典序排序來按字典順序排列字母。有很多不同的排序技術,它們有一定的變化,以及它們的時間和空間複雜度。迄今為止,基於比較的排序技術的時間複雜度的下界是O(n*log n)。但是,也有一些機械排序技術,如桶排序、基數排序、計數排序,它們的時間複雜度是線性的O(n)。更多閱讀,請點選以下連結:

https://tutorialspoint.tw/data_structures_algorithms/sorting_algorithms.htm

因此,如果我們的問題的輸入類似於A = [6, 2, 3, 100, 1];a = 2;b = 3,則輸出將為3,因為x的可能值為3、4或5。

步驟

為了解決這個問題,我們將遵循以下步驟:

sort the array A
return A[b] - A[b - 1]

示例

讓我們來看下面的實現,以便更好地理解:

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A, int a, int b){
   sort(A.begin(), A.end());
   return A[b] - A[b - 1];
}
int main(){
   vector<int> A = { 6, 2, 3, 100, 1 };
   int a = 2;
   int b = 3;
   cout << solve(A, a, b) << endl;
}

輸入

{ 6, 2, 3, 100, 1 }, 2, 3

輸出

3

更新於:2022年4月7日

瀏覽量:168

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告