轻重搭配|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)
样例输入:
6
1 9 7 3 5 5
样例输出:
4
思路:贪心,选错贪心思路,只能过一小部分数据,正确贪心思路:从前一半遍历,在后一半中找到比当前元素的两倍大的数(因为这里指针不会后移,所以可以采用双指针)
代码:
#include<bits/stdc++.h>
using namespace std;
int arr[500005];
int n;
int main(){
cin>>n;
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
sort(arr,arr+n);
int q = n/2;
int ans = n;
//贪心: 使用双指针 在后半段数组中查找比a[p]大两倍的第一个元素 并且指针q是一直增加的
for(int p=0;p<n/2;p++){
while(q < n && arr[q] < arr[p]*2) q++;
if(q == n) break;
ans--;
q++;
}
printf("%d\n",ans);
return 0;
}