日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NYOJ----776删除元素

發(fā)布時間:2025/3/20 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。