• 实现一:多个List 可能含有重复元素,含有重复元素的集合重新组合


    举例:一组list [ [1,2],[2,3],[3,4],[5,6],[6,7],[8,9] ]

               [1,2],[2,3],[3,4] 含有重复元素 组合为:[1,2,3,4]

         [5,6],[6,7] 含有重复元素 组合为:[5,6,7]

       [8,9] 不含重复元素 组合为[8,9] 

    思路:获取list第一个值,把第一个list 的每个值和其余每个list 比较判断其他list 是否包含第一个list 中的元素,如果包含则移除该list ,依次比较剩余的list 。

    实现方法:

     1 public class Test {
     2 
     3     public static void main(String[] args) {
     4         List<List<Long>> lists = new ArrayList<List<Long>>() {
     5             {
     6                 add(new ArrayList<>(Arrays.asList(1L, 3L)));
     7                 add(new ArrayList<>(Arrays.asList(2L, 3L)));
     8                 add(new ArrayList<>(Arrays.asList(3L, 4L)));
     9                 add(new ArrayList<>(Arrays.asList(5L, 6L)));
    10                 add(new ArrayList<>(Arrays.asList(7L, 8L)));
    11                 add(new ArrayList<>(Arrays.asList(9L, 11L)));
    12                 add(new ArrayList<>(Arrays.asList(4L, 7L, 0L)));
    13             }
    14         };
    15 
    16         List<List<Long>> results = new ArrayList<>();
    17         List<Long> mergedValue = new ArrayList<>();
    18 
    19         while (lists.size() > 0) {
    20             List<Long> result = lists.get(0);
    21             results.add(result);
    22             lists.remove(0);
    23             boolean merged = true;
    24             while (merged) {
    25                 merged = false;
    26                 List<List<Long>> mergingList = new ArrayList<>();
    27                 for (Long value : result) {
    28                     if (mergedValue.contains(value)) {
    29                         continue;
    30                     }
    31                     mergedValue.add(value);
    32                     Iterator<List<Long>> iter = lists.iterator();
    33                     while (iter.hasNext()) {
    34                         List<Long> values = iter.next();
    35                         if (values.contains(value)) {
    36                             mergingList.add(values);
    37                             iter.remove();
    38                             merged = true;
    39                         }
    40                     }
    41                 }
    42                 mergingList.forEach(result::addAll);
    43             }
    44         }
    45         results.forEach(result->{
    46             System.out.println(result.stream().distinct().collect(Collectors.toList()));
    47         });
    48     }
    49 }

    实现结果:

    [1, 3, 2, 4, 7, 0, 8]
    [5, 6]
    [9, 11]

  • 相关阅读:
    Pagodas
    Bazinga
    取石子问题
    Sudoku Killer(hdu 1426 数独)
    欧拉函数
    CCPC Ancient Go
    ZZNU 1992: 情人节的尴尬
    fzu Problem 2128 最长子串(KMP + strstr 经典好题)
    POJ
    HDU
  • 原文地址:https://www.cnblogs.com/wlong-blog/p/14252369.html
Copyright © 2020-2023  润新知