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

发布于 2022-09-12 04:06:52 字数 335 浏览 12 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

秋凉 2022-09-19 04:06:52

不是和八皇后问题类似么

倾听心声的旋律 2022-09-19 04:06:52

没有测试,大概思路


    /**
     * 分配苹果
     * @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;
                        }
                ));
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文