![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
双指针
baj001
这个作者很懒,什么都没留下…
展开
-
LeetCode 18. 四数之和 后来做的
原题链接此题是三数之和的变换不再要求和 为0 ,而是任意的target同理:但是此处需要两层for循环,每一层for循环后都要跟一个去重操作,去重的时候,都要满足当前的位置不是循环开始的位置,即 第一层时,要求i > 0 … 第二层时要求 j > i + 1…之后的操作和之前相同class Solution { public List<List<Integer>> fourSum(int[] nums, int target) { .原创 2022-03-13 17:27:02 · 174 阅读 · 0 评论 -
LeetCode 15. 三数之和 后来做的
原题链接使用双指针的方法关键是要进行去重,在开始的时候对nums[i] 进行去重,在while循环里,对左右指针进行去重如下三种去重方式各不相同对右指针进行去重的时候,是比较的当前的 nums[right] 和 nums[right - 1] 的关系。原因:因为当前处理的是,最右边的right,他的右边没有值了,所以只能和他左边的比较看是不是重复的,若是重复的则,先right–,等到后面还会right–,则可以直接跳过左侧的重复值。对left指针进行去重的时候,比较的是其前方的指针,原理同上。.原创 2022-03-13 17:09:20 · 205 阅读 · 0 评论 -
leetcode 18 四数之和
思路原题链接与三数之和类似,只要是多加了一层for循环三数之和,需要在for i 的时候,先进行一次去重,然后在寻找到满足条件的sum后,执行L 和 R 的两次去重四数之和,要在for i 和for j 的时候,进行两次去重,然后在寻找到满足条件的sum后,执行L 和 R 的两次去重class Solution { public List<List<Integer>> fourSum(int[] nums, int target) {原创 2022-01-23 11:45:56 · 437 阅读 · 0 评论 -
leetcode 15 三数之和
思路原题链接使用双指针 定义 L 和 R定义一个ans用来存储结果当nums为空或者其长度小于3的时候,直接返回ans,而不是返回null,直接返回ans,代表此时的值为一个空的数组将nums进行排序,**Arrays.sort(nums);**开始循环判断第i个字符 当首字符大于0的时候,直接break,当出项重复的时候去重(continue)定位L R 当 L 小于 R的时候,计算sum的值当sum为0则将结果添加进入ans 然后进行去重,Arrays.asList将数组转化为list然原创 2022-01-23 10:34:43 · 225 阅读 · 0 评论 -
leetcode 142 环形链表II
思路原题链接使用双指针 定义 fast 和 slowfast 每次移动两个结点,slow每次只移动一个结点因为fast是走两步,slow是走一步,其实相对于slow来说,fast是一个节点一个节点的靠近slow的,所以fast一定可以和slow重合现在已经发现链表是有环的了,之后要做的是,寻找链表的入口处。此时的fast和slow都指向了同一个位置,之后让fast指向head,当fast不等于slow的时候,让两个指针都移动一次,最后两个指针相等的时候,就是环的入口。public clas原创 2022-01-23 10:03:24 · 293 阅读 · 0 评论 -
leetcode 160 相交链表
思路原题链接使用双指针对于相交链表问题,首先判断两个链表是否为空让pA pB 分别指向两个链表的头节点while(两个指针没有重合的时候)判断 指针是否是到了尾部:到了 :让指针指向另一个链表的头节点没到 : 指向下一个节点public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if(headA == null || headB原创 2022-01-23 08:53:50 · 174 阅读 · 0 评论 -
这图画的真是好啊好啊好啊 leetcode 19 删除链表的倒数第N个结点
思路原题链接使用双指针 和 虚拟头结点dummy首先定义slow 和 fast 指向虚拟头结点dummy执行while(n-- > 0)时,将fast向后移动,即会将fast向后移动n步。此处删除倒数第3个结点,即将fast向后移动3步。定义一个pre结点当fast非空的时候,将pre 指向 slow,即将pre指向slow的前面一个位置,将slow和fast都向后移动当fast指向null的时候,执行:pre.next = slow.next; 让pre指向slow的后面一个结点,原创 2022-01-22 14:41:40 · 308 阅读 · 0 评论 -
leetcode 206 反转链表
思路原题链接使用双指针的方法定义pre 和 cur 和一个tmp指针具体操作步骤如下:首先,将pre和tmp都指向null,让cur指向head,之后,使用tmp来保存cur.next 即来保存cur的下一个节点然后,让cur.next 指向pre 即 cur.next=pre之后,让pre 指向 cur 即 pre = cur 最后,让 cur 指向 tmp,即cur = tmp之后,就是循环执行此过程… class Solution { public List原创 2022-01-22 13:21:00 · 181 阅读 · 0 评论 -
leetcode 344 反转字符串
思路原题链接使用双指针定义left 和 right ,right指向数组的最后一个位置定义一个tmp用来做交换当left < right的时候,交换左右,每次交换完,执行left++,right–class Solution { public void reverseString(char[] s) { int left = 0; int right = s.length - 1; while(left < right){原创 2022-01-21 11:10:39 · 242 阅读 · 0 评论 -
leetcode 27 移除元素
思路原题链接使用双指针 定义fast和slow指针让fast在前首先判断 nums[fast] != val 若成立则说明此位置上的val不是要去除的val,则将此值赋值给slow,然后执行slow++if条件外执行fast++,含义是每次的if不管是否成立,都要执行fast++,只有当fast当前位置的val不是要去除的val时,才执行slow++class Solution { public int removeElement(int[] nums, int val) {原创 2022-01-21 10:50:13 · 495 阅读 · 0 评论