货仓选址
题目描述
在一条数轴上有 N 家商店,它们的坐标分别为 A1~AN。
现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。
为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。
输入格式
第一行输入整数N。
第二行N个整数A1~AN。
输出格式
输出一个整数,表示距离之和的最小值。
数据范围
1≤N≤100000
0≤Ai≤40000
输入样例:
4
6 2 9 1
1
2
输入样例:
12
在数比较小 的时候还可以正常运行,但当数变的打的时候 不能运行。而且很多东西都十分复杂,写的不够精简。在看了别人的代码后,学习到了很多新的知识点。
知识点1:Arrays.sort(a)可以将数组排序,除此之外,还有冒泡排序,选择排序等等。而我复杂的将一个数组排序到另外一个数组,可能期间还会出现问题。
知识点2
<<,>>,>>>为java中的移位运算符。
- <<表示左移运算符
例如8<<2,表示将8向左移2位,结果为32。低位补0。
二进制演算:
8的二进制:1 0 0 0
向左移动两位结果为1 0 0 0 0 0,换算成十进制即为32,也可以简单的理解为,左移就是将数变大,相当于8*2^2=32。
左移运算符的运算规律:将左边的数按照右边的数往左移动几位。 - ”>>”表示右移运算符
例如 8>>2,表示将8向右移动2位,结果为2。高位补0。
二进制演算:
8的二进制:1 0 0 0
向右移动两位:0 0 1 0即为2,也可以简单的理解为将数向右移位就是将数变小,相当于8除以2^2=2。
右移运算符运算规律:将左边的数按照右边的数右移几位。
知识点3:for(元素类型t 元素变量x : 遍历对象obj);
知识点4:math.abs()计算括号中的绝对值。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner a=new Scanner(System.in);
int N=a.nextInt();
int[] num=new int[N];
int[] num2=new int[N];
for(int i=0;i<N;i++) {
num[i]=a.nextInt();
}
int m=-1;int min =40000;
for(int w=0;w<N;w++) {
for (int s=0;s<N;s++) {
if(m<num[s]&&num[s]<=min) {
min=num[s];
}
}
num2[w]=min;
m=min;
min=40000;
}
int sum=0;
for(int v=1;v<=N/2;v++) {
int sum1=num2[N-v]-num2[v-1];
sum=sum+sum1;
}
System.out.println(sum);
}
}
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; ++ i) {
a[i] = cin.nextInt();
}
Arrays.sort(a);
int ans = 0;
int pos = a[n >> 1];
for (int x : a) {
ans += Math.abs(pos - x);
}
System.out.println(ans);
}
}
————————————————
版权声明:本文为CSDN博主「小菜菜不会写代码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaoxiao66668/article/details/112591714

浙公网安备 33010602011771号