15.3 Sum

来源:互联网 发布:人工智能语言 编辑:程序博客网 时间:2024/06/06 11:18

3 Sum

题目

给定一个具有n个整数的数组S,问在S中是否存在这样的元素a, b, c满足 a + b + c = 0?找到数组中所有的满足和为零的特有三元素。
注:答案集中不能包含重复的三元素。

比如,给定数组 S = [-1, 0, 1, 2, -1, -4],
答案集为:
[
[-1, 0, 1],
[-1, -1, 2]
]

代码块

class Solution {    public List<List<Integer>> threeSum(int[] nums) {            List<List<Integer>> result = new ArrayList<List<Integer>>(); //建立一个列表的列表        Arrays.sort(nums);//排序        int i = 0 ;        for( i = 0; i < nums.length - 2; i++){            if(i != 0 && nums[i] == nums[i-1]){                continue; //去除重复的元素            }            int j = i + 1;            int k = nums.length - 1;            while(j < k && j< nums.length - 1){                List<Integer> temp = new ArrayList<Integer> ();                if(nums[i] + nums[j] + nums[k] < 0){                    j++;                }else if(nums[i] + nums[j] + nums[k] > 0){                    k--;                }else{                    temp.add(nums[i]);                    temp.add(nums[j]);                    temp.add(nums[k]);                    result.add(temp);                    j++;                    k--;                    while(j < k && nums[j] == nums[j-1]){                        j++; //j与它前一个元素相等否                    }                    while(j < k && nums[k] == nums[k+1]){                        k--;//k与后一个元素相等否                    }                   }            }        }        return result;    }}

代码分析

第一步,对数组进行排序;(java中具有自动排序功能,可以直接调用Array**s** .sort 记着加s ,然后进行补全)
第二步,进行查找。再看i是否满足条件。
进入循环:length-2 是为了保证j,k不越界(i控制条件是与前一个元素不相等);
然后给j,k 赋初值(j=i+1;k=length-1)。
满足第二层循环条件的话(j 是否满足条件j<k,j小于length-1),
- 1.再将j后移(小于0);
- 2.k前移(大于0);
- 3.相等的话添加到列表内,并进行jk移位,以及去重。
第三步,返回结果。

因为使用了排序,以及两个循环。所以算法复杂度,O(nlogn+n^2)→O(n^2)。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 买手机刷信用卡怎么办 无限流量降速怎么办 手机流量降速怎么办 阿里巴巴买东西不发货怎么办 小朋友帮帮代写作业怎么办 连凯软件侵权怎么办 中国联通路由器网速慢怎么办 cpu铜触点掉落怎么办 商场没人气商户怎么办 58会员账号冻结怎么办 58账号冻结资金怎么办 超市买过期东西怎么办 淘宝没发货退款怎么办 申请退款发货了怎么办 51微投票异常怎么办 信用卡逾期收到律师函怎么办 淘宝商品被模仿怎么办 电脑数字间距大怎么办 有源码没有模块怎么办 花盆里有爬虫怎么办 家里有长条爬虫怎么办 有了网站源码后怎么办 第五人格闪退怎么办 超市买东西多收钱怎么办 王者荣耀换系统怎么办 夹娃娃夹子松怎么办 天猫魔盒遥控器没了怎么办 合约机被骗了怎么办 二手苹果合约机怎么办 手机系统老化了怎么办 手机显示电池老化怎么办 手机移动数据打不开怎么办 武汉移动大王卡怎么办 红米手机卡死了怎么办 红米手机死机怎么办 红米note5装卡大怎么办 手机卡二不显示怎么办 小米手机声音小怎么办 小米4手机屏幕失灵怎么办 安装包证书异常怎么办 安装包出现异常怎么办