首页 > 其他分享 >15. 三数之和

15. 三数之和

时间:2023-03-09 19:55:58浏览次数:44  
标签:15 nums int 三数 List len 数组

class Solution {
    //定义三个指针,保证遍历数组中的每一个结果
    //画图,解答
    public List<List<Integer>> threeSum(int[] nums) {
        //定义一个结果集
        List<List<Integer>> res = new ArrayList<>();
        //数组的长度
        int len = nums.length;
        //当前数组的长度为空,或者长度小于3时,直接退出
        if(nums == null || len <3){
            return res;
        }
        //将数组进行排序
        Arrays.sort(nums);
        //遍历数组中的每一个元素
        for(int i = 0; i<len;i++){
            //如果遍历的起始元素大于0,就直接退出
            //原因,此时数组为有序的数组,最小的数都大于0了,三数之和肯定大于0
            if(nums[i]>0){
                break;
            }
            //去重,当起始的值等于前一个元素,那么得到的结果将会和前一次相同
            if(i > 0 && nums[i] == nums[i-1]) continue;
            int l = i +1;
            int r = len-1;
            //当 l 不等于 r时就继续遍历
            while(l<r){
                //将三数进行相加
                int sum = nums[i] + nums[l] + nums[r];
                //如果等于0,将结果对应的索引位置的值加入结果集中
                if(sum==0){
                    // 将三数的结果集加入到结果集中
                    res.add(Arrays.asList(nums[i], nums[l], nums[r]));
                    //在将左指针和右指针移动的时候,先对左右指针的值,进行判断
                    //如果重复,直接跳过。
                    //去重,因为 i 不变,当此时 l取的数的值与前一个数相同,所以不用在计算,直接跳
                    while(l < r && nums[l] == nums[l+1]) {
                        l++;
                    }
                    //去重,因为 i不变,当此时 r 取的数的值与前一个相同,所以不用在计算
                    while(l< r && nums[r] == nums[r-1]){
                        r--;
                    } 
                    //将 左指针右移,将右指针左移。
                    l++;
                    r--;
                    //如果结果小于0,将左指针右移
                }else if(sum < 0){
                    l++;
                    //如果结果大于0,将右指针左移
                }else if(sum > 0){
                    r--;
                }
            }
        }
        return res;
    }
}

参考:https://leetcode.cn/u/tian-fang-6/

标签:15,nums,int,三数,List,len,数组
From: https://www.cnblogs.com/chenyi502/p/17201202.html

相关文章

  • percona-server-8.0.25-15源码编译安装
    ###############################     初始化:mysqld--initialize#mysqld--initialize--user=work--basedir=/home/work/mysql_3306--datadir=/home/wo......
  • CCF 2015-12
    一:试题编号:2015-12-1试题名称:数位之和时间限制:1.0s内存限制:256.0MB问题描述:问题描述 给定一个十进制整数n,输出n的各位数字之和。输入格式 输入一个整数n。输出格式 输......
  • 15:swift-反初始化器
      正文/*15:初始化1:反初始化在类实例被释放的时候,反初始化器就会立即被调用。你可以是用deinit关键字来写反初始化器,就如同写初始化器要......
  • 【题解】ARC157 A-D
    因为有的题代码没写出来,所以代码就先咕咕咕了。A.XXYYX题目分析:可以发现每一个XY必然伴随着出现一次YX,当然可能会有一个XY没有伴随的YX的。而且若必须存在XX......
  • 【题解】[Ynoi2015] 我回来了
    题目分析:所谓的期望乘以\(R-L+1\)其实就是求亵渎的触发次数,因为我们能选择的伤害只有\(R-L+1\)种。有一个很显然的转化,就是对于伤害\(d\),我们以随从的血量......
  • PAT Basic 1015. 德才论
    PATBasic1015.德才论1.题目描述:宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡......
  • P4824 [USACO15FEB] Censoring S
    希望在Str中删掉1个屏蔽词(一个屏蔽词可能出现多次)求最后的串 栈+hash #include<iostream>#include<cstring>usingnamespacestd;constintN=1e6+3;......
  • 【Azure Redis 缓存】使用StackExchange.Redis,偶发ERROR - Timeout performing HSET
    问题描述使用StackExchange.Redis作为Redis客户端SDK,连接AzureRedis服务,长期运行后发现,每天都偶发TimeoutError。错误消息如下: StackExchange.Redis.RedisTimeou......
  • MCP2515国产替代DP2515带有SPI 接口的独立CAN 控制器
    DP2515是一款独立控制器局域网络(ControllerAreaNetwork,CAN)协议控制器,完全支持CANV2.0B技术规范。该器件能发送和接收标准和扩展数据帧以及远程帧。DP2515自带的两个验......
  • 【APIO2015】Palembang Bridges
    容易想到先排除不用过桥的再把过桥的1加上,剩下只需要考虑河边走的距离。首先考虑k=1的情况,容易发现相当于是一个直线上2n个点选一个点到所有点距离和最小,经典的结论选在中......