NYOJ----776删除元素
生活随笔
收集整理的這篇文章主要介紹了
NYOJ----776删除元素
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
刪除元素
時間限制:1000?ms ?|? 內(nèi)存限制:65535?KB
描述
題意很簡單,給一個長度為n的序列,問至少刪除序列中多少個數(shù),使得刪除后的序列中的最大值<=?2*最小值
輸入
多組測試數(shù)據(jù),每組測試數(shù)據(jù)包含兩行。
第一行一個整數(shù)n( n <= 10^5),序列中元素的個數(shù)。
第二行依次輸入n個數(shù)a1,a2……an,(1 <= ai <= 10^9)以空格分開。
輸出
輸出占一行,至少要刪除數(shù)的個數(shù)。
樣例輸入
6
5 4 3 3 8 6
樣例輸出
1
思路: 先對n個數(shù)排序,然后從前往后刪除元素Min,同時用二分求出原集合大于2*Min的數(shù)的個數(shù),從而可以確定每輪滿足題意而刪除元素的個數(shù),比較可得最小值,時間復(fù)雜度O(nlogn) #include <stdio.h> #include <stdlib.h> #define M 100000//是10^5次方 struct test{int n,ans,*num,i,tmp,l,r;void init(){ans = M;num = (int *)malloc(sizeof(int)*(n));for(i=0;i<n;i++)scanf("%d",&num[i]);}int deletenum(){QuickSort(num,0,n-1);//升序for(i=0;i<n;i++) {//binarysearchl = i,r = n;while(l<r){tmp = (l+r)/2;if(num[tmp] > 2*num[i])r = tmp;else{l = tmp + 1; }}if(n-r+i < ans)//是n-r+i且小于 ans = n-r+i;}return ans;}void QuickSort(int *num,int p,int r){int q;if(p<r){q = partition(num,p,r);QuickSort(num,p,q-1);//q-1QuickSort(num,q+1,r);}}int partition(int *num,int p,int r){int i = p,j = r+1;int x = num[p];while(1){while(num[++i] < x && i < r);//i < rwhile(num[--j] > x);if(i >= j) break;swap(num,i,j);}swap(num,p,j);return j;}void swap(int *num,int i,int j){num[i] = num[j] + num[i] - (num[j] = num[i]);} }test; int main() {while(~scanf("%d",&test.n))//多組測試數(shù)據(jù) {test.init();printf("%d\n",test.deletenum());} return 0; }?參照:http://blog.csdn.net/lyhvoyage/article/details/12884653
轉(zhuǎn)載于:https://www.cnblogs.com/520xiuge/p/5313625.html
總結(jié)
以上是生活随笔為你收集整理的NYOJ----776删除元素的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery 3教程(三):jQuery
- 下一篇: React(0.13) 定义一个动态的