双指针是一种思想,而不是说真的就是定义了两个指针,它和语言没有关系,比如C++,Java,Python等都可以使用双指针算法解题,而且是一种非常常见的算法 本篇博客适合所有语言学者阅读,因为算法是思想,每个题目除超详细的算法解析外后面还附赠了Java代码来供参考 常见的双指针有两种形式,一种是左右指针,一种是快慢指针 ...
常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针对撞指针:⼀般⽤于顺序结构中,也称左右指针。 ●对撞指针从两端向中间移动。⼀个指针从最左端开始,另⼀个从最右端开始,然后逐渐往中间逼近。 ●对撞指针的终⽌条件⼀般是两个指针相遇或者错开(也可能在循环内部找到结果直接跳出循环),也就是:...
用两个指针(L, R)从左右开始: 如果numbers[L] + numbers[R] == target, 说明找到,返回对应的数。 如果numbers[L] + numbers[R] < target, 此时L指针右移,只有这样才可能让和更大。 反之使R左移。 L和R相遇还没有找到就说明没有解。 看一个题目:是比较巧妙的双指针使用!!! 277. 搜寻名人 假设你...
// 测试链接 : https://leetcode.cn/problems/sort-array-by-parity-ii/ 奇数指针,偶数指针 package class050; // 按奇偶排序数组II // 给定一个非负整数数组 nums。nums 中一半整数是奇数 ,一半整数是偶数 // 对数组进行排序,以便当 nums[i] 为奇数时,i也是奇数 // 当 nums[i] 为偶数时, i 也是...
双指针:主要分为两类 1、左右指针 两个指针相向而行或者相背而行 2、快慢指针 两个指针同向而行,一快一慢 一、快慢指针技巧 原地修改数组 力扣23题、原地删除有序数组的重复项 使用快慢指针,快指针在面前,如果…
压缩字符串 题目链接:https://leetcode-cn.com/problems/string-compression/ classSolution{public:intcompress(vector<char>& chars){intn = chars.size();intcur =0;for(inti =0, j =0; i < n;) { j = i +1;while(j < n && chars[i] == chars[j]) j++;if(j - i >1) ...
双指针,第一个指针先走k步,然后第二个指针指向头,两个指针相差k。两个指针同时往前走。 当第一个指针到尾部的时候,第二个指针刚好在倒数第k个节点。 func removeNthFromEnd(head *ListNode, n int) *ListNode { // 使用双指针,一个指针先走n步,然后另一个指针同步走,等第一个指针走到尾的时候就是要删...
labuladong的算法秘籍中,双指针技巧在链表问题解决中展现了强大威力。以下是七种常见链表题目及其解决方案:1. 合并两个有序链表 使用虚拟头结点处理,遍历两个链表,将较小节点插入到虚拟头结点后,直到一个链表为空,再将另一个链表接上,返回虚拟头结点的下一个节点。2. 单链表分解 创建两个虚拟头...
同向双指针 • 相向双指针• 几乎所有 Two Sum 变种 • Partition • Quick Select • 分成两个部分 • 分成三个部分• 一些你没听过的(但是面试会考的)排序算法 1. 2. 3. 4. 一个典型的相向双指针问题就是翻转字符串的问题。 相向双指针模板1 Python: """ @param s: a list of characte...
双指针,第一个指针先走k步,然后第二个指针指向头,两个指针相差k。两个指针同时往前走。 当第一个指针到尾部的时候,第二个指针刚好在倒数第k个节点。 5、单链表的中点 快慢指针,一个指针走1步,一个指针走2步。当走两步的指针到尾部时,另一个指针就到中间。