NYOJ练习题 删除元素(二分查找)
删除元素
- 描述
-
题意很简单,给一个长度为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的数的个数,然后即可求的当前要删除的元素个数,比较取最优的即可。
#include<stdio.h> #include<algorithm> using namespace std; const int N = 1e5 + 10; int a[N]; int Binary(int k, int n) {int l = k, r = n;while(l < r){int mid = (l + r) / 2;if(a[mid] > 2*a[k])r = mid;elsel = mid + 1;}return n - r; } int main() {int n;while(~scanf("%d",&n)){int i, j;for(i = 0; i < n; i++)scanf("%d",&a[i]);sort(a,a+n);int ans = 1<<30;for(i = 0; i < n; i++){int s = i;s += Binary(i,n);ans = min(ans,s);}printf("%d\n",ans);}return 0; } //先排序,然后枚举删除一些元素后剩余集合中最小的数Min //二分求原集合中大于2*Min的数的个数,进而即可求得当前要删除的元素个数 //比较去最优的即可
NYOJ练习题 删除元素(二分查找)相关推荐
- nyoj 776 删除元素
删除元素 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 题意很简单,给一个长度为n的序列,问至少删除序列中多少个数,使得删除后的序列中的最大值<= 2*最小值 输 ...
- java数组二分查找的简单例题_Java基础-练习 数组元素二分查找(折半查找)
图解: 二分折半查找使用前提是数组是有序. 题目分析: 通过观察发现,本题目要实现查找指定数值在元素有序的数组中存储的位置(索引),返回该位置(索引). 我们使用数组最中间位置的元素值与要查找的指定数 ...
- 二分查找算法(随机, 最左, 最右)
二分查找算法 1. 普通二分查找 2.二分查找最左(第一次出现) 二分查找最左模板题 3.二分查找最右(最后一次出现) 4.二分查找练习题 1.定义 二分查找算法是一种效率较高的查找算法,每次查找能把 ...
- C语言二分查找算法[基础算法]
该算法一般适用于查找数组元素 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少; 其缺点是要求待查表为有序表,且插入删除困难. 适用于不经常变动而查找频繁的有序列表. ...
- Leetcode(5)——遍历,并查集,回溯法和二分查找
格式: 题号+题名+简单思路+code 遍历 深度优先遍历和广度优先遍历 很多dfs可以用Union Find解决 T130: 被围绕的区域 DFS的写法 func solve(board [][]b ...
- 【二分查找】有这一篇足够了
目录 1.二分查找是干啥的 2. 力扣中的一些练习题 2.1 二分查找(两种方法定义 target 是在一个在左闭右闭的区间里,也就是[left, right] ) 2.2 第一个错误的版本 2.3 ...
- 二分查找(普通、找第一个、找最后一个)
二分查找 二分查找在做算法题的时候经常使用到,一般会用于排序后的数组中的查找目标元素 二分查找的核心思想是「减而治之」,即「不断缩小问题规模」. 涉及到三种情况 (1)无重复数据的已排序数组寻找目标元 ...
- leetcode算法之二分查找
LeetCode算法之二分查找 前言 对于算法一直抱有恐惧感,觉得没有算法我也写了这么多代码,但周遭的环境让我感觉目前身为一名浅薄知识的敲代码的人,是需要去不断的汲取一些知识,所以就像大学学习英语单词 ...
- 动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有
1定义接口: Num.h #ifndef_NUM_H_ #define_NUM_H_ #include<stdio.h> #include<stdlib.h> /**** ...
最新文章
- 动态卷积超进化!通道融合替换注意力,减少75%参数量且性能显著提升 ICLR 2021...
- C++ 覆盖方法、重载方法的理解
- NLP:语言模型与n元语法
- c语言的跳线帽,电脑主板上跳线帽有什么作用图文介绍
- 0c-38-ARC快速入门
- [leetcode]63. 不同路径 II
- uva 10755 Garbage Heap
- cvCanny() 边缘检测
- 使用python爬虫增加浏览量
- SuperMap iDesktop常见问题解答集锦 (二)
- 还说治理类项目不性感?这个DAO上线半年吸金700万美元
- 推荐几个最值得关注的可以投稿赚钱的微信公众号
- php 各种经典算法
- Convert Kilometers to Miles 2010.3.6
- JavaScript 进阶 35 -- 构造函数、原型对象、实例之间的关系详解
- ffmpeg安装过程记录
- 安卓app之按键美化
- 28 电子商务风险控制
- bzoj1202 狡猾的商人[并查集]
- 第三方支付平台BeeCloud