輕重搭配|計蒜客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