package com.zjp.offer.study; import java.util.Arrays; import java.util.Scanner; /** * 六一儿童节,老师带了很多好吃的巧克力到幼儿园。 * 每块巧克力j的重量为w[j],对于每个小朋友i,当他分到的巧克力大小达到h[i] (即w[j]>=h[i]),他才会上去表演节目。 * 老师的目标是将巧克力分发给孩子们,使得最多的小孩上台表演。 * 可以保证每个w[i]> 0且不能将多块巧克力分给一个孩子或将一块分给多个孩子。 */ public class MaxChild { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //小朋友数组的长度 int hLen = sc.nextInt(); //小朋友数组 int[] h = new int[hLen]; for (int i = 0; i < hLen; i++) { h[i] = sc.nextInt(); } //巧克力数组的长度 int wLen = sc.nextInt(); //巧克力数组 int[] w = new int[wLen]; for (int i = 0; i < wLen; i++) { w[i] = sc.nextInt(); } //寻找最大上台表演学生人数 int max = getMaxChild(hLen, h, wLen, w); System.out.println(max); } /** * 思路:将小朋友应该得到的巧克力重量排序,对巧克力重量排序 * 将巧克力重量最小的派给满足要求的最小学生应得的重量,这样分发可以选出最多的小朋友上台 * * @param hLen * @param h * @param wLen * @param w * @return */ private static int getMaxChild(int hLen, int[] h, int wLen, int[] w) { //指向小朋友 int i = 0; //指向巧克力 int j = 0; //保存最大结果 int max = 0; Arrays.sort(h); Arrays.sort(w); while (i < hLen && j < wLen) { if (h[i] <= w[j]) {//该小朋友可以上台 max++; i++; } j++; } return max; } }
java笔试题-六一儿童节
最新推荐文章于 2021-04-10 14:08:08 发布