美文网首页
算法----三数相加

算法----三数相加

作者: 咕哒咕 | 来源:发表于2021-02-25 10:08 被阅读0次

给定一个包含n个整数的数组,判断其中是否存在三个元素相加和为0,如果有输出和为0且不重复的三元组。

eg.

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]

解法:排序+双指针

① 先将数组排序

② 对数组进行遍历,nums[i],使用左右指针指向数组剩余的两端,计算三个数的和是否为0。

※ nums[i]>0;和一定大于零,结束循环;

※ nums[i] == nums[i+1] 需要去重

※ 左指针L nums[L] == nums[L+1] 需要去重 L ++;

※ 右指针R nums[R] == nums[R-1] 需要去重 R --;

class Solution {
    public static List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> result = new ArrayList();
        int length = nums.length;
        if(nums == null || len < 3) return result;
        Arrays.sort(nums); // 排序
        for (int i = 0; i < length ; i++) {
            if(nums[i] > 0) break; // 如果当前数字大于0,则三数之和一定大于0,结束循环
            if(i > 0 && nums[i] == nums[i-1]) continue; // 去重
            int L = i+1;
            int R = length-1;
            while(L < R){
                int sum = nums[i] + nums[L] + nums[R];
                if(sum == 0){
                    result.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 (sum < 0) L++;
                else if (sum > 0) R--;
            }
        }        
        return result;
    }
}

相关文章

  • 算法----三数相加

    给定一个包含n个整数的数组,判断其中是否存在三个元素相加和为0,如果有输出和为0且不重复的三元组。 eg. 解法:...

  • 每日Leetcode—算法(17)

    2.两数相加 算法: 3. 无重复字符的最长子串 算法:

  • 算法-四数相加II

    题目: 分析: 总共四个数组,简单的暴力做法是一层一层遍历数组里的元素,拿到所有的组合,将计算的值和0进行对比。这...

  • 算法实现两数相加

    需求描述:请封装一个add()方法,用于计算两个a->b格式的字符串的和(其中a和b都是[0, 9]之间的整数)。...

  • [算法题]两数相加

    本文由黑壳博客整理 本文来源[算法题]两数相加 今日总结 不会画画的程序猿不是个好博主 正文 场景问题 上次整理完...

  • OC算法-两数相加

    题目 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个...

  • 算法题:两数相加

    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 ...

  • 数字游戏 - 九宫格

    将123456789填九宫格中,要保证每行三个数相加, 每列三个数相加,与斜对角三个数相加的和都相等。请问如何填上...

  • 几分钟,算出你和他到底合不合

    先算出两人的生命灵数,再相加成个位数。 生命灵数算法:将阳历出生年月日相加至个位 例:A生日是1988年6月24日...

  • 【数据结构与算法】复杂度知识

    什么是算法? 算法是用于解决特定问题的一系列的执行步骤。 以下算法是为了解决两数相加的问题。 以下算法是为了解决 ...

网友评论

      本文标题:算法----三数相加

      本文链接:https://www.haomeiwen.com/subject/pvlsfltx.html