4Sum

来源:互联网 发布:掌炙世家淘宝网有买吗 编辑:程序博客网 时间:2024/04/30 11:40

题目描述:

Given an array S of n integers, are there elements a,b,c, and d in S such that a + b +c +d = target? Find all unique quadruplets in the array which gives the sum of target.

Note:

  • Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie,abcd)
  • The solution set must not contain duplicate quadruplets.
    For example, given array S = {1 0 -1 0 -2 2}, and target = 0.    A solution set is:    (-1,  0, 0, 1)    (-2, -1, 1, 2)    (-2,  0, 0, 2)

思路和前面的2sum,3sum差不多,先排序,关键就是最后的要把相同的全部都去掉。

这里的indexOf源码:

<pre name="code" class="java">public int indexOf(Object o) {    if (o == null) {        for (int i = 0; i < size; i++)            if (elementData[i]==null)                return i;    } else {        for (int i = 0; i < size; i++)            if (o.equals(elementData[i]))                return i;    }    return -1;}


equals源码:

public boolean equals(Object o) {    if (o == this)        return true;    if (!(o instanceof List))        return false;    ListIterator<E> e1 = listIterator();    ListIterator<?> e2 = ((List<?>) o).listIterator();    while (e1.hasNext() && e2.hasNext()) {        E o1 = e1.next();        Object o2 = e2.next();        if (!(o1==null ? o2==null : o1.equals(o2)))            return false;    }    return !(e1.hasNext() || e2.hasNext());}
所以当list中查找是按照equals方法来查找的,而equals又支持List,只要每个元素相等就返回true。所以可以这样去除List<List<Integer>>中重复的list

代码如下:


0 0
原创粉丝点击