• LeetCode OJ


    题目:

    Given an array S of n integers, are there elements abc in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

    Note:

    • Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
    • The solution set must not contain duplicate triplets.
        For example, given array S = {-1 0 1 2 -1 -4},
    
        A solution set is:
        (-1, 0, 1)
        (-1, -1, 2)

    解题思路:

      先将数组排序。 然后分别固定第一个元素为num[0], num[n]。 用2Sum的方法找剩下的两个数。

    代码:

     1 public class Solution {
     2     public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
     3         Arrays.sort(num);
     4         ArrayList<ArrayList<Integer>> ans = new ArrayList<ArrayList<Integer>>();
     5         for (int first = 0; first < num.length;) {
     6             int left = first + 1, right = num.length - 1;
     7             while (left < right) {
     8                 int sum = num[first] + num[left] + num[right];
     9                 if (sum == 0) {
    10                     ArrayList<Integer> cur_ans = new ArrayList<Integer>();
    11                     cur_ans.add(num[first]); cur_ans.add(num[left]); cur_ans.add(num[right]);
    12                     ans.add(cur_ans);
    13                     left++; right--;
    14                 } else if (sum > 0) {
    15                     right --;
    16                 } else {
    17                     left ++;
    18                 }
    19                 while (left < right && (left != first+1 && num[left] == num[left-1])) left ++; // delete duplicate triplets
    20                 while (left < right && (right != num.length-1 && num[right] == num[right+1])) right --;// delete duplicate triplets
    21             }
    22             for (first++; first < num.length && num[first] == num[first-1]; first ++);// delete duplicate triplets
    23         }
    24         return ans;
    25     }
    26 }
  • 相关阅读:
    (六)软件测试分工
    <C++>FILE和fstream
    <C#>序列化
    <C#>多线程
    <C++>面试
    <C#>面试
    <Linux>Linux系统命令
    <Linux>Linux基础知识
    <CAN>汽车诊断基础知识
    <C++>查询
  • 原文地址:https://www.cnblogs.com/dongguangqing/p/3788790.html
Copyright © 2020-2023  润新知