Leetcode--刷题之被虐日记(5月3日)

在这里插入图片描述

🎉🎉🎉写在前面:
博主主页:🌹🌹🌹戳一戳,欢迎大佬指点!
博主秋秋:QQ:1477649017 欢迎志同道合的朋友一起加油喔💪
目标梦想:进大厂,立志成为一个牛掰的Java程序猿,虽然现在还是一个小菜鸟嘿嘿
-----------------------------谢谢你这么帅气美丽还给我点赞!比个心-----------------------------

在这里插入图片描述

在这里插入图片描述


🌈一,题目解读

这个题的目标十分的明确,就是从数组nums里面,找到某三个数的和与我们给出的target目标相距最近(我们判定的标准就是差值的绝对值),最后要求我们返回这个和。


🌈二,解法揭秘

🌟三指针遍历元素之和

class Solution {
    public int threeSumClosest(int[] nums, int target) {
            int tail = nums.length - 1;
            int min = Integer.MAX_VALUE;
            int head = 0;
            int mid = 0;
            int result = 0;//用来保存那个符合要求的对应的和
            while(head + 1 < tail){
                while (head + 1 < tail) {//在一个固定的tail下,进行每一轮的遍历
                    int sum = 0;
                    mid = head + 1;//mid之夹在head与tail之间的
                    for (int i = mid; i < tail; i++) {//去遍历head与tail之间的元素
                        sum = nums[head] + nums[tail] + nums[i];//因为此时head,tail都是固定的,去求和
                        if (Math.abs(sum - target) < min) {//找出与target相距最近的那个sum
                            min = Math.abs(sum - target);
                            result = sum;
                        }
                        
                    }
                    head++;//head加1,继续遍历
                }
                tail--;//在固定tail转完一轮以后,tail减1
                head = 0;//新的一轮head重新初始化为0
                mid = 0;//新的一轮mid重新初始化为0
            }
            return result;
    }
}

🔥解析:

这个解法是我自己的解法,不是官方的标答,但是大体的思路差不多。原理上很简单,就是利用三个下标变量,类似于指针,然后去遍历元素,如下图:

在这里插入图片描述

主体部分是一个嵌套的循环,用来控制轮数,在每一轮中,tail尾指针都是不变的,head,mid去遍历元素,加上尾指针的元素,就一共有三个数,然后求出这个和,去比较找到与target相距最近的。在每一轮里面,head不断自增,在每一轮完成后,tail自减,head,mid重新初始化为0,又重复上面相同的工作,直至head与tail之间都没有元素的时候,整个循环结束。


🔥图示:

在这里插入图片描述


今天的刷题小日记到这里就结束了,如果大家觉得还行的话,还请帮忙点点赞咯,十分感谢!🌹🌹🌹
在这里插入图片描述

  • 31
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习.java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值