排序子序列_组队竞赛

排序子序列

排序子序列

![image-20220430080708604](https://uploadfiles.nowcoder.com/images/20190919/56_1568900435177_29C080A5413E925FE3B3CCB4048AB99B on\AppData\Roaming\Typora\typora-user-images\image-20220430080708604.png)

import java.util.Scanner;
public class Main{
  public static int subArray(int[] array){
      int count = 0;
      for(int i = 0;i<array.length-1;i++){

          //注意: 当 数组
          if(array[i]<array[i+1]){
              count++;
              while(i<array.length-1&&array[i]<=array[i+1]){
                  i++;
              }
          }else if(array[i]>array[i+1]){//这里需要用 else if!!!! 如果用else 就会将 ==划分给这里,而相等可以认为是升序子序列,也可认为是降序子序列!!!
               count++;
              while(i<array.length-1&&array[i]>=array[i+1]){
                  i++;
              }
          }
         if(i==array.length-2){//说明最后一个数为一个序列!
             count++;
         }
      }
      return count;
  }
  public static void main(String[] args){
      Scanner sc = new Scanner(System.in);
      while(sc.hasNext()){
          int n = sc.nextInt();
          int[] array = new int[n];
          for(int i = 0;i< n;i++){
              array[i] = sc.nextInt();
          }
          int result = subArray(array);
          System.out.println(result);
      }
  }
}

值得注意的是,这里当序列开始时是连续几个相等的数时,相等可以认为并不属于子序列!!!这里就自动跳过相等值就好!!!

组队竞赛

题目链接:组队竞赛

题目描述:
牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。
例如:
一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3
一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3
一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2
为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。
如样例所示:
如果牛牛把6个队员划分到两个队伍
如果方案为:
team1:{1,2,5}, team2:{5,5,8}, 这时候水平值总和为7.
而如果方案为:
team1:{2,5,8}, team2:{1,5,5}, 这时候水平值总和为10.
没有比总和为10更大的方案,所以输出10.
在这里插入图片描述

解题

  • 我们拿到题目先把题目问题读清楚!
  • 然后我们进行分析题目!
  • 根据题目描述,写解题思路!

我们可以先通过题目给的案例进行分析:
找到题解,然后再推广到全部情况,看是否满足!满足就说明思路正确,开始写代码!

  • 示例分析:

在这里插入图片描述
显然:这就是数学的找规律问题!咱们多谢谢题就有感觉了!

import java.util.Scanner;
import java.util.Arrays;
public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
            int n = scanner.nextInt();
            int[] array = new int[n*3];
            for(int i = 0;i<n*3;i++){
                array[i] = scanner.nextInt();
            }
            //排序
            Arrays.sort(array);
            long result = 0;
            for(int i = 0;i<n;i++){
            //找中间值
                result += array[array.length-2*(i+1)];
            }
           System.out.println(result);
        }

    }
}
#笔试算法题#
全部评论
你这个咋组队的
点赞 回复 分享
发布于 2022-08-21 14:57 陕西

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务