Median of an Array(贪心策略,编程技巧)

2024-03-24 18:36

本文主要是介绍Median of an Array(贪心策略,编程技巧),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 题目描述
    • 输入格式
    • 输出格式
    • 样例输入
    • 样例输出
    • 提交链接
    • 提示
  • 解析
  • 参考代码

题目描述

给你一个由 n n n 个整数组成的数组 a a a

数组 q 1 , q 2 , … , q k q_1,q_2,…,q_k q1,q2,,qk 的中位数是 p ⌈ k 2 ⌉ p⌈\frac {k}{2}⌉ p2k ,其中 p p p 是按非递减顺序排列的数组 q q q

例如,数组 [ 9 , 5 , 1 , 2 , 6 ] [9,5,1,2,6] [9,5,1,2,6] 的中位数是 5 5 5 ,在排序数组 [ 1 , 2 , 5 , 6 , 9 ] [1,2,5,6,9] [1,2,5,6,9] 中,索引 ⌈ 5 2 ⌉ = 3 ⌈\frac {5}{2}⌉=3 25=3 处的数字是 5 5 5 ;数组 [ 9 , 2 , 8 , 3 ] [9,2,8,3] [9,2,8,3] 的中位数是 3 3 3 ,在排序数组 [ 2 , 3 , 8 , 9 ] [2,3,8,9] [2,3,8,9] 中,索引 ⌈ 4 2 ⌉ = 2 ⌈\frac {4}{2}⌉=2 24=2 处的数字是 3 3 3

您可以选择一个整数 i ( 1 ≤ i ≤ n ) i( 1≤i≤n) i(1in),并在一次操作中将 a i a_i ai 增加 1 1 1

你的任务是找出增加数组中位数所需的最少运算次数。

注意数组 a a a 不一定包含不同的数。

输入格式

第一行包含一个整数 n ( 1 ≤ n ≤ 1 0 5 ) n(1 \leq n \leq 10^5) n(1n105)- 数组 a a a 的长度。

第二行包含 n n n 个整数 a 1 , a 2 , . . . , a n ( 1 ≤ a i ≤ 1 0 9 ) a_1,a_2,...,a_n(1 \leq a_i \leq 10^9) a1,a2,...,an(1ai109) - 数组 a a a

输出格式

输出一个整数 - 增加数组中位数所需的最少操作数。

样例输入

3
2 2 8

样例输出

1

提交链接

https://hydro.ac/d/lp728/p/12

提示

样例解释 1 1 1:
对第一个数字进行一次运算,得到数组 [ 3 , 2 , 8 ] [3,2,8] [3,2,8],这个数组的中位数是 3 3 3,因为它是非递减排序数组 [ 2 , 3 , 8 ] [2,3,8] [2,3,8] 中索引 ⌈ 3 2 ⌉ = 2 ⌈\frac {3}{2}⌉=2 23=2 处的数字。原数组 [ 2 , 2 , 8 ] [2,2,8] [2,2,8] 的中位数是 2 2 2,因为它是非递减排序数组 [ 2 , 2 , 8 ] [2,2,8] [2,2,8] 中索引 ⌈ 3 2 ⌉ = 2 ⌈\frac {3}{2}⌉=2 23=2 处的数字。因此,只需一次操作,中位数就增加了。 ( 3 > 2 ) (3>2) (3>2)

解析

先对数组进行排序,找出数组中的中位数,即数字 a ⌈ n 2 ⌉ a_{⌈\frac {n}{2}⌉} a2n,让它等于 x x x 。为了使中位数增加,即至少变为 x + 1 x+1 x+1,数组中必须至少有 n − ⌈ n 2 ⌉ + 1 n-⌈\frac {n}{2}⌉+1 n2n+1 个数字大于或等于 x + 1 x+1 x+1。统计 x x x 的个数即可。

count 函数:统计区间内某个数的个数。

参考代码

#include<bits/stdc++.h>
using namespace std;
int t , n;
int main()
{int n;cin >> n;vector<int> v(n);   for(int i = 0; i < n; i++)cin >> v[i];sort(v.begin() , v.end());  //排序 int id = (n + 1) / 2 - 1;  //中位数的下标(下标从0输入) int num = count(v.begin() + id , v.end() , v[id]);  //计算v[id]的个数 cout << num << endl;return 0;
}

这篇关于Median of an Array(贪心策略,编程技巧)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/842422

相关文章

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

Apache伪静态(Rewrite).htaccess文件详解与配置技巧

《Apache伪静态(Rewrite).htaccess文件详解与配置技巧》Apache伪静态(Rewrite).htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令,主要的... 一、.htAccess的基本作用.htaccess是一个纯文本文件,它里面存放着Apache服务器

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

SpringBoot中的404错误:原因、影响及解决策略

《SpringBoot中的404错误:原因、影响及解决策略》本文详细介绍了SpringBoot中404错误的出现原因、影响以及处理策略,404错误常见于URL路径错误、控制器配置问题、静态资源配置错误... 目录Spring Boot中的404错误:原因、影响及处理策略404错误的出现原因1. URL路径错

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

Pandas中多重索引技巧的实现

《Pandas中多重索引技巧的实现》Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下... 目录1.多重索引概述2.多重索引的基本操作2.1 选择和切片多重索引2.2 交换层级与重设索引3.多重索引的高级操作3.1 多重索引的分组聚