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

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

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

Note: The solution set must not contain duplicate quadruplets.

For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.A solution set is:[  [-1,  0, 0, 1],  [-2, -1, 1, 2],  [-2,  0, 0, 2]]

 

从数组中找出四个字之和为target的。因为有多组,所以要从头遍历到尾。

 

找出四个数之和为target,做法和三个数之和一样,就是外面多套一层循环。也就是 先排序,遍历数组,然后从剩下的数组中找出三个元素与当前元素之和为target,三个元素之和又是遍历剩下的数组,再从剩剩下的数组中找出两个数,使他们与前两个遍历的元素的和为target,这两个元素从两头往中间遍历。期间要跳过重复元素。具体见代码。每次遍历时还可以多加判断条件,如当前元素和最后三个元素 的和小于target,这时就进入下轮循环了,要使左边数字增大才行。

 

class Solution {    public List
> fourSum(int[] nums, int target) { Arrays.sort(nums); List
> result=new ArrayList
>(); for(int i=0;i
target) break;//前面四个都已经大于target了,就说明没有了(有序) //当前数字和最后三个数字的和小于target,则将当前数字后移,也就是进行下一个循环 if(nums[i]+nums[nums.length-1]+nums[nums.length-2]+nums[nums.length-3]
0&&nums[i]!=nums[i-1])){ for(int j=i+1;j
target) break; if(nums[i]+nums[j]+nums[nums.length-1]+nums[nums.length-2]
i+1&&nums[j]!=nums[j-1])){ int left=j+1,right=nums.length-1,sum=target-nums[i]-nums[j]; while(left
sum) { right--; }else{ left++; } } } } } } return result; }}

 

 

转载于:https://www.cnblogs.com/xiaolovewei/p/8110922.html

你可能感兴趣的文章
单例模式
查看>>
黑马程序员——————> 多线程
查看>>
Bootstrap系列 -- 41. 带表单的导航条
查看>>
Python---时间函数
查看>>
maven必知必会
查看>>
最小生成树
查看>>
获取网址中参数的方式
查看>>
golang log日志
查看>>
一些应该记住的东西(持续更新?再也不会更新了)
查看>>
常用的机器学习&数据挖掘知识点【转】
查看>>
bzoj 1911: [Apio2010]特别行动队 2011-12-26
查看>>
JIRA-6.3.6安装与破解
查看>>
Cron表达式【一】
查看>>
weblogic安全漫谈
查看>>
DEDECMS全版本gotopage变量XSS ROOTKIT 0DAY
查看>>
出路在哪里?出路在于思路!智者无敌
查看>>
Linux基础系列:常用命令(5)_samba服务与nginx服务
查看>>
Web前端开发CSS基础(2)
查看>>
【BootStrap】 概述 & CSS
查看>>
如何把两个查询语句合成一条 语句
查看>>