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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可解释性AI(XAI)

可解释性AI&#xff08;XAI&#xff09;旨在提高人工智能系统的透明度和可理解性&#xff0c;使人们更好地理解AI的决策过程和原理。随着AI技术的广泛应用&#xff0c;XAI成为了一个备受关注的重要领域。它不仅有助于建立人们对AI的信任&#xff0c;还可以帮助解决AI伦理和偏见…

解锁隐私计算力量:一站式掌握SecretFlow安装与双模式部署实践

1.SecretFlow的安装 1.SecretFlow运行要求 SecretFlow作为一个隐私保护的数据分析和机器学习框架&#xff0c;其运行要求可能涉及以下方面&#xff1a; 操作系统&#xff1a; 能够支持Docker运行的环境&#xff0c;因为SecretFlow可能通过Docker容器来管理执行环境的一致性和…

Python Flask 自定义404错误

from flask import Flask, abort, make_response, request, render_templateapp Flask(__name__)# 重定向到百度 app.route(/index, methods["GET", "POST"]) def index():if request.method "GET":return render_template("index.html&q…

敏捷开发最佳实践:组织架构实践案例之构建软硬件融合部落

本节所选案例对于软硬件均有的企业具有重要借鉴意义&#xff0c;通过学习某一线制造行业合资企业如何解决软硬件部门之间的技术鸿沟和部门墙&#xff0c;以及全球分布的多支敏捷团队的协作难题&#xff0c;为所在企业在“组织架构”层面进行有效敏捷实践打开思路。 本实践节选…

推荐一款制造执行系统(MES)国内比较好的实施厂家

什么是MES 制造执行系统&#xff08;MES&#xff09;是一种用于监控、控制和优化制造过程的软件系统。它通过与企业资源计划&#xff08;ERP&#xff09;系统和自动化系统的集成&#xff0c;实现对生产过程的管理和监测&#xff0c;包括生产计划、生产过程和生产数据。 MES可…

小白入门赛8

小白入门赛8 1 #include<bits/stdc.h> using namespace std;int main(){puts("5060");return 0; } 2 只考虑两个字符串a&#xff0c;b的情况下&#xff0c;优先让 a b ab ab 或 b a ba ba 中最小的放前面&#xff0c;据此排序 int n; string s[200010]…

BUG未解之谜01-指针引用之谜

在leetcode里面刷题出现的问题&#xff0c;当我在sortedArrayToBST里面给root赋予初始值NULL之后&#xff0c;问题得到解决&#xff01; 理论上root是未初始化的变量&#xff0c;然后我进入insert函数之后&#xff0c;root引用的内容也是未知值&#xff0c;因此无法给原来的二叉…

鸿蒙开发学习【地图位置服务组件】

简介 移动终端设备已经深入人们日常生活的方方面面&#xff0c;如查看所在城市的天气、新闻轶事、出行打车、旅行导航、运动记录。这些习以为常的活动&#xff0c;都离不开定位用户终端设备的位置。 当用户处于这些丰富的使用场景中时&#xff0c;系统的位置定位能力可以提供…

map 添加 访问 遍历

#include<iostream> #include<vector> #include<set> #include<map> using namespace std; int main() { //创建 map<string, int>m; //添加 m["hello"] 2; m["ijii"] 1; //访问 如果存在返回值,不…

[HackMyVM]靶场 Submissions

kali:192.168.56.104 靶机:192.168.56.131 端口扫描 # nmap 192.168.56.131 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-24 11:32 CST Nmap scan report for 192.168.56.131 Host is up (…

【Python】基础语法(一)

文章目录 1.注释2.关键字与标识符2.1关键字2.2标识符 3.变量4.数据类型4.1数字类型4.2类型转换函数4.3布尔类型 5.输入(input)与输出(print)5.1输入函数(input)5.2输出函数(print) 6.运算符6.1算术运算符6.2比较运算符6.3赋值运算符6.4逻辑运算符6.5运算符优先级 7.字符串7.1字…

JMH微基准测试框架学习笔记

一、简介 JMH&#xff08;Java Microbenchmark Harness&#xff09;是一个用于编写、构建和运行Java微基准测试的框架。它提供了丰富的注解和工具&#xff0c;用于精确控制测试的执行和结果测量&#xff0c;从而帮助我们深入了解代码的性能特性。 二、案例实战 在你的pom文件…

MySQL 排序的那些事儿

书接上回 上次发了几张图&#xff0c;给了几个MySQL Explain的场景&#xff0c;链接在这儿&#xff1a;你是不是MySQL老司机&#xff1f;来看看这些explain结果你能解释吗&#xff1f;MySQL 夺命6连问 我们依次来分析下这6个问题。 在分析之前&#xff0c;我们先来了解一下M…

【C++】学习记录--condition_variable 的使用

condition_variable使用步骤如下&#xff1a;创建一个condition_variable对象创建一个互斥锁mutex对象&#xff0c;用来保护共享资源的访问在需要等待条件变量的地方&#xff0c;使用unique_lock<mutec>对象锁定互斥锁并调用condition_variable::wait()、condition_varia…

大模型: 提示词工程(prompt engineering)

文章目录 一、什么是提示词工程二、提示词应用1、提示技巧一&#xff1a;表达清晰2、提示词技巧2&#xff1a;设置角色 一、什么是提示词工程 提示词工程主要是用于优化与大模型交互的提示或查询操作&#xff0c;其目的在于能够更加准确的获取提问者想要获取的答案&#xff0c…

16. 最接近的三数之和

16. 最接近的三数之和 中等 相关标签 相关企业 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1&#xff1a; 输入&#xff…

操作系统面经-用户态和内核态

字节实习生带你面试&#xff0c;后台私信可以获得面试必过大法&#xff01;&#xff01; 根据进程访问资源的特点&#xff0c;我们可以把进程在系统上的运行分为两个级别&#xff1a; 用户态(User Mode) : 用户态运行的进程可以直接读取用户程序的数据&#xff0c;拥有较低的…

实验7-2-8 找鞍点(PTA)

题目&#xff1a; 一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。 本题要求编写程序&#xff0c;求一个给定的n阶方阵的鞍点。 输入格式&#xff1a; 输入第一行给出一个正整数n&#xff08;1≤n≤6&#xff09;。随后n行&#xff0c;每行给出n个…

【蓝牙协议栈】【BLE】低功耗蓝牙配对绑定过程分析(超详细)

1. 精讲蓝牙协议栈&#xff08;Bluetooth Stack&#xff09;&#xff1a;SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论 2. 欢迎大家关注和订阅&#xff0c;【蓝牙协议栈】和【Android Bluetooth Stack】专栏会持续更新中.....敬请期待&#xff01…

Three.js 中的 OrbitControls 是一个用于控制相机围绕目标旋转以及缩放、平移等操作的控制器。

demo案例 Three.js 中的 OrbitControls 是一个用于控制相机围绕目标旋转以及缩放、平移等操作的控制器。下面是它的详细讲解&#xff1a; 构造函数: OrbitControls(object: Camera, domElement?: HTMLElement)object&#xff1a;THREE.Camera 实例&#xff0c;控制器将围绕…