Acwing 104. 货仓选址

2024-03-23 16:28
文章标签 acwing 104 选址 货仓

本文主要是介绍Acwing 104. 货仓选址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Problem: Acwing 104. 货仓选址

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • Code

思路

这是一个经典的中位数问题。在一维空间中,使得所有点到某一点的距离之和最小,那个点应该选择所有点的中位数。如果有偶数个点,那么中位数是中间两个数的平均值。

解题方法

首先,我们需要读取所有商店的位置,并将它们排序。然后,我们找到中位数。如果商店的数量是偶数,那么中位数是中间两个数的平均值。否则,中位数就是中间的那个数。最后,我们计算所有商店到中位数的距离之和。

复杂度

时间复杂度:

O ( n l o g n ) O(n log n) O(nlogn),主要是排序的时间复杂度。

空间复杂度:

O ( n ) O(n) O(n),需要存储所有商店的位置。

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;public class Main {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static StreamTokenizer sr = new StreamTokenizer(in);static int n;static int MAXN = 100010;static int[] arr = new int[MAXN];public static void main(String[] args) throws IOException {n = nextInt();for (int i = 1; i <= n; i++) {arr[i] = nextInt();}Arrays.sort(arr, 1, n + 1);int x = 0;if (n % 2 == 0) {x = (arr[n / 2] + arr[n / 2 + 1]) / 2;} else {x = arr[(n + 2 - 1) / 2];}long res = 0;for (int i = 1; i <= n; i++) {res += Math.abs(arr[i] - x);}out.println(res);out.flush();}static int nextInt() throws IOException {sr.nextToken();return (int) sr.nval;}}

这篇关于Acwing 104. 货仓选址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

机试算法模拟题 服务中心选址

题目描述 一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置,并希望能够以此为依据为新的服务中心选址:使服务中心到所有区域的距离的总和最小。 给你一个数组positions,其中positions[i] = [left, right] 表示第 i 个区域在街道上的位置,其中left代表区域的左侧的起点,right代表区域的右侧终点,假设服务中心的位置为loca

【AcWing】851. 求最短路

spfa算法其实是对贝尔曼福特算法做一个优化。 贝尔曼福特算法会遍历所有边来更新,但是每一次迭代的话我不一定每条边都会更新,SPFA是对这个做优化。 如果说dist[b]在当前这次迭代想变小的话,那么一定是dist[a]变小了,只有a变小了,a的后继(b)才会变小。 用宽搜来做优化,用一个队列,队列里边存的就是所有变小了的结点(队列里存的是待更新的点)。 基本思路就是我更新过谁,我再拿

【代码随想录训练营第42期 续Day52打卡 - 图论Part3 - 卡码网 103. 水流问题 104. 建造最大岛屿

目录 一、做题心得 二、题目与题解 题目一:卡码网 103. 水流问题 题目链接 题解:DFS 题目二:卡码网 104. 建造最大岛屿 题目链接 题解:DFS  三、小结 一、做题心得 也是成功补上昨天的打卡了。 这里继续图论章节,还是选择使用 DFS 来解决这类搜索问题(单纯因为我更熟悉 DFS 一点),今天补卡的是水流问题和岛屿问题。个人感觉这一章节题对于刚

【AcWing】852. spfa判断负环

#include<iostream>#include<algorithm>#include<cstring>#include<queue>using namespace std;const int N= 1e5+10;int n,m;int h[N],w[N],e[N],ne[N],idx;int dist[N],cnt[N];//cnt存最短路径的边数bool st[N];v

图论篇--代码随想录算法训练营第五十二天打卡| 101. 孤岛的总面积,102. 沉没孤岛,103. 水流问题,104.建造最大岛屿

101. 孤岛的总面积 题目链接:101. 孤岛的总面积 题目描述: 给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。孤岛是那些位于矩阵内部、所有单元格都不接触边缘的岛屿。 现在你需要计算所有孤岛的总面积,岛屿面积的计算方式为组成岛屿的陆地的总数。 解题思路: 从周边找到陆地,然后通过 dfs或者bfs 将

【python requests错误】Caused by SSLError(SSLError(bad handshake: SysCallError(104, 'ECONNRESET')

错误描述: 在发送get请求时错误,执行下面一句时报错了: response = requests.get(image_url) 原因HTTPSConnectionPool(host='test-kkbuluo-resource.cdn.hzmltest.com', port=443): Max retries exceeded with url: /IMCORE/RESOURCE/LOG

Oracle(104)如何实现数据掩码?

要实现数据掩码(Data Masking),可以使用多种数据库管理系统(DBMS)提供的功能。以下是使用Oracle数据库的DBMS_REDACT包来实现数据掩码的详细步骤和代码示例。 实现数据掩码的步骤 创建示例表和数据定义掩码策略验证掩码 详细步骤和代码示例 假设我们有一个示例表employees,包含以下列:employee_id, name, ssn(社会安全号码), salary

电力104规约

对象性质十进制十六进制数量适用报文类型ASDU遥测1793~2304701H~900H512*9、11、21、34、35遥信1~10241H~400H1024*1、3、20、30、31遥控2817~2944B01H~B80H128*45、46遥调2945~3072B81H~C00 H128*47 APCI 应用规约控制信息; ASDU 应用服务数据单元; APDU 应用规约数据单元; 三

自己实现LinkedListJAVA103-104

来源:http://www.bjsxt.com/ 1、S02E103_01自己实现LinkedList package com.test.linkedlist;/*** 用来表示一个节点*/public class Node {Node previous;//该节点的前一个节点Object obj;//该节点存放的对象Node next;//该节点的后一个节点public Node(){}p

AcWing 282. 石子合并

必看的视频讲解↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 【E28【模板】区间DP 石子合并——信息学竞赛算法】 合并过程总开销等于红色数字总和,可以理解为花费的总体力! f数组的含义是f【i】【j】是从第i堆石子开始到第j堆石子的花费体力最小值 如何理解三层for呢? 第一层for是控制区间长度len,第二层for是控制区间起点位置i,第三层for是控制区间