/**
 * 
 * @param num int整型一维数组 
 * @return int整型二维数组
 */
function threeSum(num) {
    // write code here
    num = num.sort((a, b) => { return a - b });
    if (num.length < 3) {
        return [];
    }
    let len = num.length;
    let ans = [];
    for (let i = 0; i < len - 2; ++i) {
        if (num[i] > 0) {
            break;
        }
        if (i > 0 && num[i] == num[i - 1]) {
            continue;
        }
        let a = i, b = i + 1, c = len - 1;
        while (b < c) {
            let sum = num[a] + num[b] + num[c];
            if (sum > 0) {
                --c;
            } else if (sum == 0) {
                ans.push([num[a], num[b], num[c]]);
                ++b;
                --c;
            } else {
                ++b;
            }
        }
    }
    // 结果去重
    let obj = {};
    ans.map(item => {
        obj[item] = item;
    })
    return Object.values(obj);
}
module.exports = {
    threeSum: threeSum
};