Leetcode--刷题之被虐日记

Leetcode--刷题之被虐日记,第1张

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

Leetcode数组篇
  • 🌈一,题目解读
  • 🌈二,解法揭秘
    • 🌟三指针遍历元素之和


🌈一,题目解读

这个题的目标十分的明确,就是从数组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之间都没有元素的时候,整个循环结束。


🔥图示:


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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/801525.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-07
下一篇 2022-05-07

发表评论

登录后才能评论

评论列表(0条)

保存