删除元素

时间限制:1000 ms  |  内存限制:65535 KB

描述

题意很简单,给一个长度为n的序列,问至少删除序列中多少个数,使得删除后的序列中的最大值<= 2*最小值

输入

多组测试数据,每组测试数据包含两行。
第一行一个整数n( n <= 10^5),序列中元素的个数。
第二行依次输入n个数a1,a2……an,(1 <= ai <=
10^9)以空格分开。

输出

输出占一行,至少要删除数的个数。

样例输入

6

5 4 3 3 8 6

样例输出

1

思路:

先对n个数排序,然后从前往后删除元素Min,同时用二分求出原集合大于2*Min的数的个数,从而可以确定每轮满足题意而删除元素的个数,比较可得最小值,时间复杂度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=;i<n;i++)
scanf("%d",&num[i]);
}
int deletenum()
{
QuickSort(num,,n-);//升序
for(i=;i<n;i++)
{
//binarysearch
l = i,r = n;
while(l<r)
{
tmp = (l+r)/;
if(num[tmp] > *num[i])
r = tmp;
else{
l = tmp + ;
}
}
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-);//q-1
QuickSort(num,q+,r);
}
}
int partition(int *num,int p,int r)
{
int i = p,j = r+;
int x = num[p];
while()
{
while(num[++i] < x && i < r);//i < r
while(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))//多组测试数据
{
test.init();
printf("%d\n",test.deletenum());
}
return ;
}

参照:http://blog.csdn.net/lyhvoyage/article/details/12884653

NYOJ----776删除元素的更多相关文章

  1. nyoj 776 删除元素

    删除元素 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 题意很简单,给一个长度为n的序列,问至少删除序列中多少个数,使得删除后的序列中的最大值<= 2*最小值 输 ...

  2. 【转】ArrayList循环遍历并删除元素的常见陷阱

    转自:https://my.oschina.net/u/2249714/blog/612753?p=1 在工作和学习中,经常碰到删除ArrayList里面的某个元素,看似一个很简单的问题,却很容易出b ...

  3. 如何在遍历中使用 iterator/reverse_iterator 删除元素

    如何在遍历中使用 iterator/reverse_iterator 删除元素 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公 ...

  4. javascript删除元素节点

    1.删除元素父节点 function removeElement(_element){ var _parentElement = _element.parentNode; if(_parentElem ...

  5. 遍历List过程中删除元素的正确做法(转)

    遍历List过程中删除元素的正确做法   public class ListRemoveTest {     3 public static void main(String[] args) { 4 ...

  6. 创建删除元素appendChild,removeChild,createElement,insertBefore

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  7. List怎么遍历删除元素

    public static void main(String[] args) {  List<String> list = new ArrayList<String>();   ...

  8. JQUERY添加、删除元素、eq()方法;

    一.jQuery - 添加元素 1.append() - 在被选元素内部的结尾插入指定内容 2.prepend() - 在被选元素内部的开头插入指定内容 3.after() - 在被选元素之后插入内容 ...

  9. STL容器删除元素的陷阱

    今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...

随机推荐

  1. Storm介绍及与Spark Streaming对比

    Storm介绍 Storm是由Twitter开源的分布式.高容错的实时处理系统,它的出现令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求.Storm常用于在实时分析.在线机器学 ...

  2. 从游戏脚本语言说起,剖析Mono所搭建的脚本基础

    0x00 前言 在日常的工作中,我偶尔能遇到这样的问题:“为何游戏脚本在现在的游戏开发中变得不可或缺?”.那么这周我就写篇文章从游戏脚本聊起,分析一下游戏脚本因何出现,而mono又能提供怎样的脚本基础 ...

  3. iFrame 功能详解

    目录索引: 一. 简介二. 属性三. 功能四. 应用 一.简介 网页“帧”的概念最早是由Netscape所提出,当时全部由“帧”构成的页面,也被称之为 “框架集”页面,在一个“框架集”页面中,“帧” ...

  4. 使用Autolayout实现UITableView的Cell动态布局和高度动态改变

    本文翻译自:stackoverflow 有人在stackoverflow上问了一个问题: 1 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并 ...

  5. js第三方

    1.0 https://github.com/aui/artDialog 2.0 前端开发仓库 http://code.ciaoca.com/ 3.0 打赏 https://github.com/gr ...

  6. C#定时执行

    代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

  7. how to use panda

    0.Introduce pandas.read_csv(filepath_or_buffer,sep=', ', dialect=None, compression='infer', doublequ ...

  8. windows7命令帮助大全

    有关某个命令的详细信息,请键入 HELP 命令名ASSOC 显示或修改文件扩展名关联.ATTRIB 显示或更改文件属性.BREAK 设置或清除扩展式 CTRL+C 检查.BCDEDIT 设置启动数据库 ...

  9. session 存入数据库 php

     session 机制 1.php中session的生成机制 session是保存在服务器的,当我们在代码中调用session_start();时,PHP会同时往SESSION的存放目录(默认为/tm ...

  10. 负载均衡之LVS集群

    h3 { color: rgb(255, 255, 255); background-color: rgb(30,144,255); padding: 3px; margin: 10px 0px } ...