You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求排查最小化儿童年龄分组Java代码问题(组内年龄差≤1)

代码问题排查与正确实现

嘿,我来帮你看看这段代码的问题,以及如何修正它来实现你需要的功能。

首先,你的代码存在几个关键问题,导致它无法正确计算最少分组数:

核心问题分析

  1. 逻辑判断完全错误
    你写的条件if(kids[k]-kids[i]!=0 || kids[k]-kids[i]!=1)永远为真——不管两个孩子的年龄差是多少,这个条件都会成立。比如:

    • 如果年龄差是0,那么kids[k]-kids[i]!=1为真;
    • 如果年龄差是1,那么kids[k]-kids[i]!=0为真;
    • 如果年龄差更大,两个条件都为真。
      这意味着你的代码会不断触发分组计数,完全不符合需求。
  2. 循环与变量逻辑混乱
    嵌套循环的终止条件i<kids.length-a和k<kids.length-b没有明确的业务意义,变量a和b的递增逻辑也没有对应到分组的实际规则。另外,kids[i] = kids[k]这行代码会修改排序后的数组,彻底破坏后续的判断基础。

  3. 整体思路偏离需求
    你的代码没有利用数组排序后的特性,也没有采用正确的贪心策略来最小化分组数。

正确的实现思路

因为我们已经对数组排序了,问题可以简化为:把数组分成最少的连续子数组,每个子数组中最大值与最小值的差不超过1(因为数组排序后,子数组内的元素是有序的,只要首尾元素差≤1,整个子数组的任意元素差都≤1)。

我们可以用贪心算法来实现:从左到右遍历数组,每次尽可能把最多的符合条件的孩子放到同一个组里,直到遇到年龄差超过1的孩子,再开启新的分组。

修正后的代码

import java.util.Arrays;
import java.util.Scanner;

public class KidAgeGrouping {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the number of Kids :");
        int n = scan.nextInt();
        int[] kids = new int[n];
        System.out.println("Enter the ages of kids :");
        for (int i = 0; i < n; i++) {
            kids[i] = scan.nextInt();
        }
        Arrays.sort(kids);
        
        int groups = 0;
        int currentIndex = 0;
        while (currentIndex < n) {
            groups++;
            int currentAge = kids[currentIndex];
            // 找到当前组的最远边界:所有年龄 ≤ currentAge + 1的孩子
            int nextGroupStart = currentIndex;
            while (nextGroupStart < n && kids[nextGroupStart] <= currentAge + 1) {
                nextGroupStart++;
            }
            // 跳到下一个组的起始位置
            currentIndex = nextGroupStart;
        }
        System.out.println(groups);
    }
}

测试示例

输入你给出的测试用例:

13
2 2 2 3 3 3 4 4 4 5 5 6 7

代码会输出3,完全符合预期。

这段代码的逻辑很清晰:排序后,每次从当前位置开始,把所有年龄在currentAge和currentAge+1之间的孩子归为一组,然后继续处理剩下的孩子,这样就能得到最少的分组数。

内容的提问来源于stack exchange,提问作者nada virinchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:12:48