双指针
文章平均质量分 60
剑指Offer中双指针专题
不 良
知足,上进,不负野心!!!
展开
-
剑指 Offer 57. 和为s的两个数字
双指针法:定义两个指针分别指向数组的首元素和尾元素,然后让两个指针指向的元素相加和target比较大小并根据比较结果移动指针,情况分为以下几种:如果两边指针指向的元素相加比target大,即nums[left] + nums[right] > target,那此时需要向左移动right指针,即right--;如果两边指针指向的元素相加比target小,即nums[left] + nums[right] < target,那此时需要向右移动left指针,即left++;如果两边指针指向的元素相……原创 2023-06-03 08:30:00 · 525 阅读 · 25 评论 -
剑指 Offer 22. 链表中倒数第k个节点
思路一:1.先定义一个节点cur,cur = head,然后向后遍历一遍链表,算出链表中元素个数count,如果链表为空,则直接返回nullptr;2.链表的尾节点是倒数第1个节点,那么倒数第k个节点从头节点开始数也就是第count - k个节点;3.再让cur = head,从头开始遍历找到第count - k个节点,返回第count - k个节点就是链表中倒数第k个节点。 思路二:双指针法:1.设置快慢指针fast和slow,让fast = head; slow = head;2.让fast指针先向后走原创 2023-06-02 15:02:48 · 208 阅读 · 30 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
双指针:设定两个指针`left`和`right`分别指向数组的左边和右边,然后通过计算判断数组中这两边是奇数还是偶数并且分情况进行操作: 当`nums[left] % 2 = 0 `即左边为偶数且`nums[right] % 2 = 1`即右边为奇数时,交换然后移动左右指针; - 当`nums[left] % 2 = 1 `即左边为奇数时,`left++`即可,因为此时如果当`nums[right] % 2 = 1`,那么`right`指针是不能移动的,所以只要当`nums[left] % 2 =原创 2023-06-01 08:49:05 · 404 阅读 · 28 评论 -
剑指 Offer 52. 两个链表的第一个公共节点
双指针法:1.先定义两个指针fast和slow分别记录链表中当前节点,再定义两个变量nA和nB用来记录链表中节点个数;2.然后分别遍历这两个链表,统计链表中节点个数,然后计算出节点个数差值dif并让节点个数多的链表先向前移动dif步;3.再然后就是让两个指针同时向后移动,当两个指针相等时指针指向的就是两个链表的第一个公共节点。 哈希集合:unordered_set容器即无序set容器,和set容器唯一的区别就是set容器会自行对存储的数据进行排序,而unordered_set容器不会……原创 2023-05-31 20:20:13 · 769 阅读 · 12 评论 -
剑指 Offer 25. 合并两个排序的链表
思路一:申请一个头节点preHead,然后再申请一个节点prev,让prev = preHead,然后通过向后遍历和比较l1和l2两个链表,同时将其中值较小的节点链接到prev的后面,直至将其中一个链表遍历结束。当其中一个为空之后,找出哪个不为空,然后将该链表接入到新链表中。注意返回的时候返回的是头节点的下一个节点即preHead->next……原创 2023-05-30 08:00:00 · 419 阅读 · 8 评论 -
剑指 Offer 18. 删除链表的节点
双指针法:因为题目中保证链表中节点的值互不相同,所以我们可以通过比较链表中节点值是否和val相等来删除节点。链表头节点为空的情况就不再细说,直接返回nullptr,情况1.先判断头节点是否等于val,如果等于val直接返回头节点的下一个节点即返回head->next;情况2.如果头节点不等于val,则设置两个节点prev和cur分别记录上一个节点和当前节点,如果cur节点的值等于val,则prev节点的next指针指向cur节点的下一个节点即原创 2023-05-28 18:53:02 · 1027 阅读 · 9 评论 -
剑指 Offer 58 - I. 翻转单词顺序
逆序双指针:1.用n记录当前字符串长度,再开辟一个新的字符串str用来存放逆序遍历到的单词;2.逆序遍历,当字符不为空格时,使用right记录下当前i的位置,然后i--向前查找下一个空格,当s[i] == ' '时,可以通过right - i 得到当前单词的长度,i + 1得到单词的首字母,通过substr函数将该单词放到新的字符串str中;3.当我们逆序遍历完成之后,得到新的字符串,此时str已经是原来字符串翻转后形成的……原创 2023-05-25 11:27:25 · 1172 阅读 · 14 评论