樣例輸入:
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;
}