关注
想法是找出包括全部这些数的最小区间,然后往中间移。。样例都过来,但是0%,我太难了😭😭😭 有没有大神知道正确思路, import java.util.Arrays;
import java.util.Scanner;
/**
* @Author: Elon
* @Date: 2019-08-11 14:58
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int l,n;
l = sc.nextInt();
n = sc.nextInt();
int[] a = new int[n];
for(int i = 0 ;i<n;i++){
a[i] = sc.nextInt();
}
Arrays.sort(a);
int left=0, right=0; //下标
int maxv = -1;
if(a[0]+l-a[n-1]>maxv){
maxv = a[0]+l-a[n-1];
left = 0;
right = n-1;
}
for(int i = 1;i<n;i++){
if(a[i]-a[i-1]>maxv){
maxv = a[i]-a[i-1];
left = i;
right = i-1;
}
}
int mid = 0;
if(left<=right){
mid = (a[left] + a[right])/2;
}else {
mid = (a[left] + a[right]+l)/2;
}
int sum = 0;
int lcnt=0,rcnt=0;
boolean emp = true;
for(int i = 0;i<n;i++){
if(a[i]== mid) {
emp = false;
break;
}
}
for(int i = 0 ;i<n;i++){
if(a[(i+left)%n]<mid && a[(i+left)%n]>=a[left])
sum+=Math.abs(a[(i+left)%n]-mid)%l;
else if(a[(i+left)%n]<=a[right] && a[(i+left)%n]!=mid)
sum+=Math.abs(a[(i+left)%n]+l-mid)%l;
if(a[(i+left)%n]<mid && a[(i+left)%n]>=a[left])
lcnt++;
else if(a[(i+left)%n]<=a[right] && a[(i+left)%n]!=mid)
rcnt++;
}
if(emp==true)
lcnt--;
sum = sum - (1+lcnt)*lcnt/2 - (1+rcnt)*rcnt/2;
System.out.println(sum);
}
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 2025年终总结 #
146951次浏览 2514人参与
# 秋招落幕,你是He or Be #
3124次浏览 76人参与
# 应届生进小公司有什么影响吗 #
109041次浏览 1116人参与
# 比亚迪工作体验 #
70063次浏览 254人参与
# 你面试体验感最差/最好的公司 #
2949次浏览 56人参与
# 工作中听到最受打击的一句话 #
2477次浏览 61人参与
# 大厂VS公务员你怎么选 #
71055次浏览 660人参与
# 重来一次,你会对开始求职的自己说 #
2903次浏览 71人参与
# 一人说一个提前实习的好处 #
3276次浏览 70人参与
# 团建是“福利”还是是 “渡劫” #
3972次浏览 110人参与
# 实习没事做是福还是祸? #
8127次浏览 135人参与
# 如何排解工作中的焦虑 #
243679次浏览 2241人参与
# 从顶到拉给所有面过的公司评分 #
144782次浏览 518人参与
# 今年你最想重开的一场面试是? #
1367次浏览 24人参与
# 你小心翼翼的闯过多大的祸? #
6857次浏览 109人参与
# 联影求职进展汇总 #
123816次浏览 781人参与
# OPPO求职进展汇总 #
755869次浏览 5390人参与
# 互联网公司爆料 #
158557次浏览 724人参与
# 产品实习,你更倾向大公司or小公司 #
189078次浏览 2053人参与
# 秋招结束之后的日子 #
113892次浏览 1038人参与
腾讯云智研发成长空间 5057人发布