package BISHI; import java.util.Arrays; import java.util.Scanner; /**  * 合唱队的N名学生站成一排且从左到右编号为1到N,其中编号为i的学生身高为Hi。 现在将这些学生分成若干组(同一组的学生编号连续),  * 并让每组学生从左到右按身高从低到高进行排列,使得最后所有学生同样满足从左到右身高 从低到高(中间位置可以等高),那么最多能将这些学生分成多少组?  * 合唱队的N名学生站成一排且从左到右编号为1到N,其中编号为i的学生身高为Hi。 现在将这些学生分成若干组(同一组的学生编号连续),  * 并让每组学生从左到右按身高从低到高进行排列,使得最后所有学生同样满足从左到右身高从低 到高(中间位置可以等高),那么最多能将这些学生分成多少组?  * 第一行包含一个整数N,1≤N≤10^5。  *   * 第二行包含N个空格隔开的整数H1到HN,1≤Hi≤10^9。 4 2 1 3 2  *   * @author gary  *  */ public class test4 {     public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);         while (scanner.hasNext()) {             int n = scanner.nextInt();             int[] a = new int[n];             int[] b = new int[n];             for (int i = 0; i < a.length; i++) {                 a[i] = scanner.nextInt();                 b[i] = a[i];             }             Arrays.sort(b);             int ans = 0;             int cha = 0;             int index = 0;             for (int i = 0; i < b.length; i++) {                 if (a[i] == b[i]) {                     ans++;                 } else {                     if (cha == 0) {                         index = i;                     //    System.out.println(index);                     }                     for (int j = index; j < b.length; j++) {                         if (a[i] == b[j]) {                             System.out.println(j-i);                             cha += j - i;                             if (cha == 0) {                                 ans+=i-index+1;                             }                             break;                         }                     }                 }             }             System.out.println(ans);         }     } }
点赞 3

相关推荐

07-22 11:12
门头沟学院 Java
不是,我就随手投的怎么还真发面试啊
皮格吉:大厂特别快的——来自已经被共享中
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-25 17:13
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务