题意:给了一个数组,通过交换元素得到新的数组,新的数组对应位置的元素比原来的大,求最多可以有多少个这样的元素
分析:暴力贪心,每次将较大的放到较小的位置上。先排序,枚举每一个元素,找比它大的元素,遍历一趟即可。O(m+n)
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int a[maxn];
int main()
{
int n;
cin>>n;
for(int i = 1; i <= n; i++)
cin>>a[i];
sort(a + 1,a + n + 1);
int cnt = 0,j = 1;
for(int i = 1; i <= n; i++,j++)
{
while(j <= n && a[j] <= a[i])
j++;
if(j > n)
break;
cnt++;
}
cout<<cnt<<endl;
return 0;
}