zoukankan      html  css  js  c++  java
  • java用最少循环求两个数组的交集、差集、并集

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;
    
    /**
     * 用最少循环求两个数组的交集、差集、并集
     * 
     * @author ZQC
     *
     */
    public class Test
    {
    
        public static void main(String[] args)
        {
            Integer[] m = { 1, 2, 3, 4, 5 };
            Integer[] n = { 3, 4, 6 };
    
            System.out.println("----------并集------------");
            Integer[] b = getB(m, n);
            for (Integer i : b)
            {
                System.out.println(i);
            }
    
            System.out.println("----------交集------------");
            Integer[] j = getJ(m, n);
            for (Integer i : j)
            {
                System.out.println(i);
            }
    
            System.out.println("----------差集------------");
            Integer[] c = getC(m, n);
            for (Integer i : c)
            {
                System.out.println(i);
            }
        }
    
        /**
         * 求并集
         * 
         * @param m
         * @param n
         * @return
         */
        private static Integer[] getB(Integer[] m, Integer[] n)
        {
            // 将数组转换为set集合
            Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(m));
            Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(n));
    
            // 合并两个集合
            set1.addAll(set2);
    
            Integer[] arr = {};
            return set1.toArray(arr);
        }
    
        /**
         * 求交集
         * 
         * @param m
         * @param n
         * @return
         */
        private static Integer[] getJ(Integer[] m, Integer[] n)
        {
            List<Integer> rs = new ArrayList<Integer>();
    
            // 将较长的数组转换为set
            Set<Integer> set = new HashSet<Integer>(Arrays.asList(m.length > n.length ? m : n));
    
            // 遍历较短的数组,实现最少循环
            for (Integer i : m.length > n.length ? n : m)
            {
                if (set.contains(i))
                {
                    rs.add(i);
                }
            }
    
            Integer[] arr = {};
            return rs.toArray(arr);
        }
    
        /**
         * 求差集
         * 
         * @param m
         * @param n
         * @return
         */
        private static Integer[] getC(Integer[] m, Integer[] n)
        {
            // 将较长的数组转换为set
            Set<Integer> set = new HashSet<Integer>(Arrays.asList(m.length > n.length ? m : n));
    
            // 遍历较短的数组,实现最少循环
            for (Integer i : m.length > n.length ? n : m)
            {
                // 如果集合里有相同的就删掉,如果没有就将值添加到集合
                if (set.contains(i))
                {
                    set.remove(i);
                } else
                {
                    set.add(i);
                }
            }
    
            Integer[] arr = {};
            return set.toArray(arr);
        }
    
    }
  • 相关阅读:
    ....
    CodeForces 375A(同余)
    POJ 2377 Bad Cowtractors (最小生成树)
    POJ 1258 AgriNet (最小生成树)
    HDU 1016 Prime Ring Problem(全排列)
    HDU 4460 Friend Chains(bfs)
    POJ 2236 Wireless Network(并查集)
    POJ 2100 Graveyard Design(尺取)
    POJ 2110 Mountain Walking(二分/bfs)
    CodeForces 1059B Forgery(模拟)
  • 原文地址:https://www.cnblogs.com/a2b1/p/7520099.html
Copyright © 2011-2022 走看看