Go最全力扣热门100题之三数之和【中等】(1),2024年最新掌握了这些Golang高级工程师必备知识

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

示例 3:

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

提示:
在这里插入图片描述
解法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
};

执行结果:
在这里插入图片描述


解法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
};

在这里插入图片描述
解法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];


![img](https://img-blog.csdnimg.cn/img_convert/1da1452a86fc10a2c6b94854eaab3196.png)
![img](https://img-blog.csdnimg.cn/img_convert/82f9c0073a26535077e23339c48315de.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

tps://bbs.csdn.net/topics/618658159)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值