博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3sum问题
阅读量:5255 次
发布时间:2019-06-14

本文共 1433 字,大约阅读时间需要 4 分钟。

3sum问题

1.问题描述

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, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]
题目翻译:
一个给定的数组中,是否存在a,b,c满足a+b+c=0?找出这个数组中所有满足条件的三元组,同时答案中不能包含重复的情况。

2.解题思路

看到3sum问题,首先想到的是2sum问题,在解决2sum问题的时候,是使用HashMap()来寻找差值,并解决重复问题。而3sum问题内部是一个变化了的2sum问题,因为当确定了a的时候,就需要在剩下的数值中寻找b+c=-a,又变成一个寻找等于任意可能数值2sum问题了。

这里在解决内层2sum问题的时候,使用的类似解决water container的方法,使用两个指针指向数组的头和尾,通过判断两者想加的sum来对位置进行调整,为了避免重复,相同的数值略过处理。

3.代码实现

 class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
          int len = nums.length;
  List<List<Integer>> res = new ArrayList<List<Integer>>();
    //注意List<>是一个抽象类,它的实例化要用子类来完成。   
  if(len<=2)
   return res;
  Arrays.sort(nums);  //实现排序的类都实现了comparable接口
  int target = 0;
  for(int i=0;i<=len-2;i++) {
       int tmp = target - nums[i];
    if(i>0&&nums[i]==nums[i-1])//处理重复问题,同时也解决了i=0的边界问题
     continue;
    if(nums[i]>0)//当数值大于0的时候,停止寻找,因为是从负数开始查找的
     break;
    int l = i+1;
    int r = len-1;
    while(l<r){
     int sum= nums[l]+nums[r];
     if(tmp==sum) {
      res.add(Arrays.asList(nums[i], nums[l], nums[r]));
      while(l<r&&nums[l]==nums[l+1])//处理重复数值
       l++;
      while(l<r&&nums[r]==nums[r-1])//处理重复数值问
       r--;
      l++;
      r--;
     }
     else if(tmp<sum) {
      r--;
     }
     else {
      l++;
        }
   }
  }
  return res;
   
    }
}

转载于:https://www.cnblogs.com/chailinbo/p/7559920.html

你可能感兴趣的文章
负载均衡策略
查看>>
微信智能开放平台
查看>>
ArcGIS Engine 中的绘制与编辑
查看>>
Oracle--通配符、Escape转义字符、模糊查询语句
查看>>
子网划分讲解及练习(一)
查看>>
c# 文件笔记
查看>>
第一页 - 工具的使用(webstorm)
查看>>
Linux 进程资源用量监控和按用户设置进程限制
查看>>
IE浏览器整页截屏程序(二)
查看>>
D3.js 之 d3-shap 简介(转)
查看>>
制作满天星空
查看>>
类和结构
查看>>
CSS3选择器(二)之属性选择器
查看>>
adidas crazylight 2018 performance analysis review
查看>>
js向数组中插入元素
查看>>
Maximum-SubsequenceSum
查看>>
用Lua控制Nginx静态文件的url访问权限
查看>>
表分区的阴暗面
查看>>
Kubernetes1.6新特性:全面支持多颗GPU
查看>>
Node.js模板引擎的深入探讨
查看>>