想法是找出包括全部这些数的最小区间,然后往中间移。。样例都过来,但是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);     } }
点赞 评论

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务