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.com/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
广告