力扣热门100题之三数之和【中等】

这篇具有很好参考价值的文章主要介绍了力扣热门100题之三数之和【中等】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

提示:
力扣热门100题之三数之和【中等】,LeetCode力扣,leetcode,算法,职场和发展
解法1:三重for循环暴力破解

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) {
    nums.map(num=>parseInt(num));
    nums.sort((a,b)=>a-b)
    let s=[]
    let s1=[]
    for(let i=0;i<nums.length;i++){
        for(let j=i+1;j<nums.length;j++){
            for(let k=j+1;k<nums.length;k++){
                if(nums[i]+nums[j]+nums[k]==0){
                    let arr=[nums[i],nums[j],nums[k]].sort((a,b)=>a-b);
                    let str=arr.join("")
                    if(s1.indexOf(str)==-1){
                        s.push(arr);
                        s1.push(str);
                    }
                }
            }
        }
    }
    return s
};

执行结果:
力扣热门100题之三数之和【中等】,LeetCode力扣,leetcode,算法,职场和发展


解法2:双指针

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) {
    if(nums==null||nums.length<3) return [];
    nums.map(num=>parseInt(num));
    nums.sort((a,b)=>a-b)
    let s=[]
    let left=0;
    let right=0;
    for(let i=0;i<nums.length-1;i++){
        if(nums[i]>0) break;
        if(i>0&&nums[i]==nums[i-1]){
            continue;
        }else{
            left=i+1;
            right=nums.length-1;
            while(left<right){
                if(nums[i]+nums[left]+nums[right]>0){
                    //太大了 
                    right--;
                }else if(nums[i]+nums[left]+nums[right]<0){
                    //有点小
                    left++;
                }else{
                    s.push([nums[i],nums[left],nums[right]]);
                    while(left<nums.length-1&&nums[left++]==nums[left+1]){}
                    while(right>left&&nums[right--]==nums[right]){}
                }
            }
        }
    }
    return s
};

力扣热门100题之三数之和【中等】,LeetCode力扣,leetcode,算法,职场和发展
解法3:动态规划算法

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
let s=[]
let tmp=[0,0,0];
let usedIndex=[-1,-1,-1];
let str=[]
let numss=[]
var threeSum = function(nums) {
    if(nums==null||nums.length<3) return [];
    s=[]
    tmp=[0,0,0];
    usedIndex=[-1,-1,-1];
    str=[]
    nums.map(num=>parseInt(num));
    nums.sort((a,b)=>a-b)
    numss=nums;
    dfs(0)
    return s
};
function dfs(p){
    if(p==3){
        tmp=[numss[usedIndex[0]],numss[usedIndex[1]],numss[usedIndex[2]]]
        if(tmp[0]+tmp[1]+tmp[2]==0){
            tmp.sort((a,b)=>parseInt(a)-parseInt(b))
            let s1=tmp.join("")
            if(str.indexOf(s1)==-1){
                s.push([tmp[0],tmp[1],tmp[2]])
                str.push(s1)
            }
        }
        return
    }
    for(let i=0;i<numss.length;i++){
        if(usedIndex.indexOf(i)==-1){
            usedIndex[p]=i;            
            dfs(p+1);
        }
    }
}

力扣热门100题之三数之和【中等】,LeetCode力扣,leetcode,算法,职场和发展文章来源地址https://www.toymoban.com/news/detail-601843.html

到了这里,关于力扣热门100题之三数之和【中等】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 三数之和[中等]

    优质博文:IT-BLOG-CN 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j 、 i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1: 输入: nums = [-1,0,1,2,-1,-4

    2024年02月07日
    浏览(25)
  • 力扣-三数之和

    三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例1: 示例2: 示例3: 分析: 题解:

    2024年01月19日
    浏览(24)
  • 【算法Hot100系列】三数之和

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月04日
    浏览(32)
  • LeetCode15.三数之和

    15.三数之和 一、题目 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j 、 i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 你返回所有和为 0 且不重复的三元组。 **注意:**答案中不可以包含重复的三元组。 示例 1: 示例 2: 示例 3: 提

    2024年02月13日
    浏览(49)
  • LeetCode 15. 三数之和

    题目链接 15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j 、 i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 你返回所有和为 0 且不重复的三元组。 **注意:**答案中不可以包含重复的三元组。 示例 1: 示例 2: 示例 3:

    2024年02月08日
    浏览(26)
  • LeetCode - 15 三数之和

    目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 15. 三数之和 - 力扣(LeetCode) 题目描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 你返回所有和为 0 且不重复的三

    2024年02月09日
    浏览(29)
  • leetcode两数、三数、四数之和

    如有错误,感谢不吝赐教、交流 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返

    2023年04月23日
    浏览(62)
  • 【算法】排序+双指针——leetcode三数之和、四数之和

    三数之和 (1)排序+双指针   算法思路: 和之前的两数之和类似,我们对暴力枚举进行了一些优化,利用了 排序+双指针 的思路:   我们先排序,然后固定⼀个数 a ,接着我们就可以在这个数后面的区间内,使用之前两数之和使用的算法,快速找到两个数之和和固定的

    2024年02月13日
    浏览(40)
  • leetcode15. 三数之和(java)

    给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1: 输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,

    2024年02月10日
    浏览(28)
  • 【leetcode】15. 三数之和(medium)

    给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 这题真的好难,试了好多方法,最后参考了代码随想录的

    2024年02月13日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包