[leedcode 15] 3Sum

public class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        //本题需要对重复数字进行考虑,主要涉及以下几处:
        //1.外层循环时,需要与前一个数进行比较,如果重复,使用 if 和continue
        //2.求target时,注意重复数字。使用while
        //多举例子
        List<List<Integer>> res=new ArrayList<List<Integer>>();
        if(nums.length<3) return res;
        Arrays.sort(nums);
        for(int i=0;i<nums.length;i++){
            int target=0-nums[i];
            int first=i+1;
            int end=nums.length-1;
            if(i>0&&i<nums.length&&nums[i-1]==nums[i]){//判断重复数。例如-2 -1 -1 -1 0 1 1 1 1 2
                continue;
            }

            while(first<end){
                if(nums[first]+nums[end]==target){
                    List<Integer> temp=new ArrayList<Integer>();
                    temp.add(nums[i]);
                    temp.add(nums[first++]);
                    temp.add(nums[end--]);
                    res.add(temp);
                   /* first++;
                    end--;*/
                    while(first<end&&nums[first]==nums[first-1])first++;//[-2,0,0,2,2]
                 }

                if(nums[first]+nums[end]>target)
                      end--;
                else  if(nums[first]+nums[end]<target)
                            first++;
            }
        }
          return res;  

    }
}
时间: 2024-10-08 10:29:12

[leedcode 15] 3Sum的相关文章

1. Two Sum&amp;&amp;15. 3Sum&amp;&amp;18. 4Sum

题目: 1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. Given nums = [2, 7, 1

Leetcode之15. 3Sum (medium)

15. 3Sum (medium) 描述 Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: The solution set must not contain duplicate triplets. Example

[LeetCode] 15. 3Sum

Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: The solution set must not contain duplicate triplets. For example, given array S = [-1,

15.3sum(Nsum总结)

如果不用hashmap解决2sum,而是把2sum看成nSum中的一部分,那么就需要用two pointers来解决问题. 2sum伪代码: 1. 先对给定的数组进行排序 2. walker指第一个元素,runner指最后一个元素 3.当walker小于runner: 1)如果walker和runner的和等于target,那么: (1)如果只需要一对解,记录答案,break (2)如果需要所有解,那么walker++, runner-- 2) else如果和小于target,walker++

【leetcode】15. 3Sum

题目描述: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. 解题分析: 这道题注意一下几点即可: 1,先固定前两个数的位置,移动第三个数,这样的查找方式不会有数字组合的遗漏: 2,要考虑到数组元素有重复的情况下的处理. 3,若先为数组排

LeetCode 15. 3Sum(三数之和)

Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: The solution set must not contain duplicate triplets. For example, given array S = [-1,

15. 3Sum java solutions

Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: The solution set must not contain duplicate triplets. For example, given array S = [-1,

leetcode 15. 3Sum 双指针

题目链接 给n个数, 找出三个数相加结果为0的所有的组, 不可重复. 用双指针的思想,O(n^2)暴力的找, 注意判重复. 1 class Solution { 2 public: 3 vector<vector<int>> threeSum(vector<int>& nums) { 4 int sz = nums.size(); 5 vector <vector<int> > ans; 6 vector <int> tmp;

[LeetCode][15]3Sum解析与快速排序算法-Java实现

Q: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: The solution set must not contain duplicate triplets. For example, given array S = [-