轻重搭配|计蒜客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;
} 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM