1. 程式人生 > 其它 >檔案管理-空閒儲存空間的管理

檔案管理-空閒儲存空間的管理

連結

給你一個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c ,使得a + b + c = 0 ?請你找出所有和為 0 且不重複的三元組。

注意:答案中不可以包含重複的三元組。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Solution {
    public static List<List<Integer>> threeSum(int[] nums) {
        if (nums == null || nums.length == 0) {
            return new ArrayList<>(0);
        }

        List<List<Integer>> ret = new ArrayList<>();

        Arrays.sort(nums);

        int n = nums.length;

        for (int i = 0; i < n - 2; ++i) {
            if (i != 0 && nums[i] == nums[i - 1]) {
                continue;
            }
            int l = i + 1, r = n - 1;
            while (l < r) {
                if (l != i + 1 && nums[l] == nums[l - 1]) {
                    l++;
                    continue;
                }
                if (nums[l] + nums[r] == -nums[i]) {
                    ret.add(Arrays.asList(nums[i], nums[l], nums[r]));
                    l++;
                    r--;
                } else if (nums[l] + nums[r] > -nums[i]) {
                    r--;
                } else {
                    l++;
                }
            }
        }

        return ret;
    }
}
心之所向,素履以往 生如逆旅,一葦以航