飞行棋分组

126 阅读1分钟

问题描述

现在桌子上有一堆飞行棋棋子,有 N 个,每个棋子上标有数字序号,现在想让你帮忙给这堆飞行棋分成 M 组,需要满足:

  • 每个分组只能包含 5 个棋子
  • 每个棋子只能出现在一个分组里
  • 每个分组里的棋子的数字序号相同

请问可以完成上述分组么?

思路

题目说的很清楚,必须是五个相同的数字分为一组,那么直接对飞行棋数组排序,如果能够分组的话它们肯定是五五相等的,如果有一个不相等直接返回false,从前往后枚举一遍即可

刚开始想用map存储的,可是一思考发现这题格外的简单,直接排个序就可以解决 `

   public static String solution(int[] nums) {
    
    if(nums.length%5!=0){//数字个数必须是5的倍数
        return "false";
    }
    Arrays.sort(nums);//排序

    for(int i=0;i<nums.length;i+=5){//每次判断5个数字,如果数字有不相同的直接返回false
        for(int j=i+1;j<=i+4;j++){
            if(nums[j]!=nums[i])
                return "false";

        }
    }
    

    return "true";
}`