算法和数据结构

java实现 数组中两元素相加等于指定数的所有组合

2018-03-28  本文已影响90人  Ferrari1001

题目大意:

  给一个正整数列表alist和指定正整数T,每个数只能用一次,返回两元素相加之和等于指定数的所有组合的链表。形如:alist = [1,2,3,4,4,,5,6,7] T = 8 ,返回链表[[1,7],[2,6],[3,5],[4,4]].

思路:

  遍历一遍链表,利用Set集合元素的唯一性,记录中间处理过程。

代码实现:

**
 * @author lm
 * @create 2018-03-28 10:20
 * @desc 返回整形列表中所有元素相加之和等于目标值的元素列表
 **/
public class GettingList {

    public List<ArrayList<Integer>> getList(List<Integer> list, int target) {

        List<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
        Set<Integer> set = new HashSet<>();
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            ArrayList<Integer> subList = new ArrayList<>();
            int temp = iterator.next();
            if (temp == target) {
                subList.add(temp);
            }else if (set.contains(target - temp)) {
                subList.add(temp);
                subList.add(target - temp);
            }
            set.add(temp);
            if (subList.size() != 0) {
                lists.add(subList);
            }
        }
        return lists;
    }
}

//测试用例
public class GettingListTest {

    @Test
    public void getList() throws Exception {
        GettingList gettingList = new GettingList();
        ArrayList<Integer> lists = new ArrayList<>();
        lists.add(1);
        lists.add(3);
        lists.add(5);
        lists.add(4);
        lists.add(2);
        lists.add(7);
        lists.add(6);
        lists.add(4);
        int target = 8;
        assertEquals(4, gettingList.getList(lists, target).size());

    }
}

要点:

  
【1】利用Set集合中元素唯一性的特点,
【2】集合的嵌套的声明及实例化(泛型参数要一致)。

上一篇 下一篇

猜你喜欢

热点阅读