> 文档中心 > Leetcode--刷题之被虐日记(5月3日)

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

在这里插入图片描述

🎉🎉🎉写在前面:
博主主页:🌹🌹🌹戳一戳,欢迎大佬指点!
博主秋秋: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相距最近的那个summin = 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之间都没有元素的时候,整个循环结束。


🔥图示:

在这里插入图片描述


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

汽车技师网