博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode15
阅读量:4679 次
发布时间:2019-06-09

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

Given an array nums of n integers, are there elements abc 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:

Given array nums = [-1, 0, 1, 2, -1, -4],A solution set is:[  [-1, 0, 1],  [-1, -1, 2]]
Accepted
522,004
Submissions
2,197,404
 
解答:
/*首先对原数组进行排序,然后开始遍历排序后的数组,这里注意不是遍历到最后一个停止,而是到倒数第三个就可以了,中间如果遇到跟前一个数相同的数字就直接跳过。对于遍历到的数,如果大于0则跳到下一个数,因为三个大于0的数相加不可能等于0;否则用0减去这个数得到一个sum,我们只需要再之后找到两个数之和等于sum即可,这样一来问题又转化为了求two sum,这时候我们一次扫描,找到了等于sum的两数后,加上当前遍历到的数字,按顺序存入结果中即可,然后还要注意跳过重复数字。时间复杂度为 O(n2)*/class Solution {    public static void main(String[] args) {        int[] nums = {-2, -3, 4, -5, 1};        List
> res = threeSum(nums); } public static List
> threeSum(int[] nums) { List
> result = new ArrayList<>(); if(nums == null || nums.length < 3) { return result; } // 对数组进行排序 Arrays.sort(nums); // 从前向后进行遍历, for(int i = 0; i < nums.length-2; i++) { if(nums[i] > 0) { break; } if(i > 0 && nums[i-1] == nums[i]) { continue; } int sum = -nums[i]; int left = i + 1; int right = nums.length-1; while(left < right) { if(nums[left] + nums[right] == sum) { ArrayList
t = new ArrayList<>(); t.add(nums[i]); t.add(nums[left]); t.add(nums[right]); result.add(t); while(left < right && nums[left++] == nums[left]) { } while(left < right && nums[right--] == nums[right]) { } } else if(nums[left] + nums[right] < sum) { while(left < right && nums[left++] == nums[left]) { } } else { while(left < right && nums[right--] == nums[right]) { } } } // end of while }// end of for return result; }}

  

转载于:https://www.cnblogs.com/wylwyl/p/10726416.html

你可能感兴趣的文章
java中svg图片怎么用_svg如何使用
查看>>
java dart 官司_From Java to Dart
查看>>
java ftp 读取excel_从Excel文件读取数据表
查看>>
oracle 有哪些字典表,oracle 常用字典表
查看>>
linux c多进程多线程,linux下的C\C++多进程多线程编程简易例子
查看>>
linux 命令 考试,linux常用命令总结-第一次考试
查看>>
linux动态库编译多重依赖,Linux动态库多重依赖
查看>>
linux网卡缓冲区设置,【Linux】tcp缓冲区大小的默认值、最大值
查看>>
opus编译linux,Linux 下源码编译FFMEG
查看>>
linux 运行real basic,REALbasic 快速入门.pdf
查看>>
linux启动tomcat不停的触发gc,tomcat启动时就频繁gc和full gc
查看>>
linux uart串口驱动,X-017-KERNEL-串口驱动开发之uart driver框架
查看>>
linux 添加串口数量,如何在Linux中添加4个以上的串口设备?
查看>>
SCUT - 482 - 生成树上的点 - Prufer
查看>>
SCUT - G - 魔法项链 - 树状数组
查看>>
洛谷 - P1462 - 通往奥格瑞玛的道路 - 二分 - Dijkstra
查看>>
洛谷 - P1346 - 电车 - Dijkstra/01BFS
查看>>
洛谷 - P1522 - 牛的旅行 - Cow Tours - Floyd
查看>>
模板 - Prim
查看>>
模板 - Floyd
查看>>