请教各位巨佬一个分配任务思路

有苹果a、b、c、d、e、f、g共7个,需要按苹果顺序分配
张三  需要分配1个
李四  需要分配2个         不能分配到:b
王五  需要分配4个         不能分配到:a、b、c
  • 各位巨佬求个思路,我自己想到的太麻烦要循环好几次,还需要进行调换,基本随着分配人数增加,循环次数就要增加
  • 后续这个方法的参数就是
assignTask(List<本次分配苹果集合>,List<参与分配的人>,Map<用户id,List<排除苹果集合>>)
阅读 1.8k
2 个回答

不是和八皇后问题类似么

没有测试,大概思路


    /**
     * 分配苹果
     * @param apples 所有的苹果
     * @param userMap 人-需要的苹果数量
     * @param excludeAppleMap 人-不能分配的苹果
     * @return Map<人, 分配的苹果id>
     */
    public Map<String, List<String>> assignTask(List<String> apples, Map<String, Integer> userMap, Map<String, List<String>> excludeAppleMap) {
        List<String> useApples = Lists.newArrayList();
        return userMap
                .entrySet()
                .stream()
                .collect(Collectors.toMap(
                        Map.Entry::getKey,
                        entry -> {
                            List<String> needApple = apples
                                    .stream()
                                    .filter(apple -> !excludeAppleMap.get(entry.getKey()).contains(apple))
                                    .filter(apple -> !useApples.contains(apple))
                                    .limit(entry.getValue())
                                    .collect(Collectors.toList());
                            useApples.addAll(needApple);
                            return needApple;
                        }
                ));
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题