大家好,今后我会在博客分享自己一些算法解题思路和一些有趣的推理题,欢迎有兴趣的朋友们一起来学习呀双指针是一种思想或一种技巧并不是特别具体的算法。
具体就是用两个变量动态存储两个结点,来方便我们进行一些操作。通常用在线性的数据结构中。解决双指针问题四种常用思想:1、普通双指针(two sum),一般两个for循环,外层i和内层j可以认为是普通的双指针;
2、左右指针(二分搜索):需要两个指针,一个指
转载
2023-07-22 16:26:22
240阅读
第二章 双指针2.1 介绍算法思想
双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是排好序的。2.2 Two Sum问题167. 两数之和 II -
转载
2023-08-24 23:06:33
56阅读
指针可以指向基本类型,也可以指向复合类型,因此也可以指向另外一个指针变量,称为指向指针的指针。
转载
2010-03-12 02:07:00
117阅读
2评论
1.相向双指针Reverse型:翻转字符串、判断回文串TwoSum型:两数之和、三数之和Partition型:快速排序、颜色排序框架pythondefisPalindrome(s):一左一右两个指针(索引),分别从中间开始移动left,right=0,len(s)1left一定要小于rightwhileleft<right:ifsleft!=sright:returnFalseleft+=1lef
原创
2022-06-26 22:50:20
296阅读
leetcode209】长度最小的子数组public class MinSubArrayLen { public int minSubArrayLen(int s, int[] nums) { if (nums == null || nums.length == 0) { return 0; } int minl...
原创
2021-06-11 21:50:20
167阅读
双指针
本文是面试经典 150 题双指针问题的详细解读。
在LeetCode中,双指针问题通常是指使用两个指针在一个序列中向相反方向移动,以协同完成某种操作或达成某种条件的问题。
在解决双指针问题时,一般要满足以下条件:
序列是有序的。
需要在序列中寻找或比较元素。
操作需要在 O(n) 的时间复杂度内完成。
双指针问题的解法一般有两种:
两个指针从两端开始向中间移动。
原创
2023-06-15 09:57:08
145阅读
【题目描述】 给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。 【输入格式】 第一行包含整数 n。 第二行包含 n 个整数(均在 0∼105 范围内),表示整数序列。 【输出格式】 共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。 【数据范围】 1 ...
转载
2021-10-16 19:57:00
116阅读
2评论
相向而行 反转字符串 https://leetcode-cn.com/problems/reverse-string/solution/shuang-zhi-zhen-by-zhang-bo-b-7u4y/ class Solution { public: void reverseString(ve ...
转载
2021-11-04 11:39:00
216阅读
2评论
1.判断子序列原题给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k
原创
2024-03-11 11:12:14
0阅读
双指针一、介绍双指针指的是在遍历对象的过程中,使用两个指针进行相同或相反方向的扫描,从而达到相应的目的。此处的指针并非C语言中的指针,而是索引。双指针算法是一个遍历对象的过程,因而其常应用于数组、链表双指针算法的最重要的目的是,将较高时间复杂度(O(n^2))降为线性的时间复杂度(O(n)),是一种对暴力搜索算法的优化。二、场景引入问题:给定一个升序排列的数组和一个目标值,从该数组中找出两个元素,
转载
2023-07-12 19:24:25
137阅读
双指针1. 双指针基础知识1. 双指针简介2. 对撞指针3. 快慢指针4. 分离双指针2. 滑动窗口2.1 算法介绍2.2 适用范围:2.3 固定长度窗口2.4 不定长度窗口3. 双指针相关题目:2.1 对撞指针167.两数之和||输入有序数组125.验证回文串344.反转字符串15.三数之和2.2 快慢指针80.删除有序数组中的重复项||283.移动零2.3 分离指针88.合并两个有序数组 1
转载
2023-12-01 11:02:24
62阅读
int hoare_partition(int arr[],int start,int end){
int pivot = arr[start];
int i = start;
int j = end;
while(true){
while(i<j && arr[i]<=pivot) i++;
转载
2023-12-15 08:39:11
43阅读
1.双向指针在链表中的应用所谓双指针,指的是在遍历对象的过程中,不是使用单个指针进行访问,而是使用两个相同方向或者相反方向的指针进行遍历,从而达到相应的目的。双指针的使用可以降低程序的时间复杂度或者空间复杂度,总之是一种有效的解决问题的方案。 (注:这里所说的指针,并不是C/C++中指针的概念,而是指索引,游标或指针,可迭代对象等)
转载
2023-08-30 19:58:16
85阅读
双指针思路及其实现双指针就是在一个循环里有两个变量同时向前推进,循环结束条件可以是一个或多个(只要不是死循环就可)。一般模型为i(第一个指针,以下同),j(第二个指针,以下同)。第一种模型为一个数组(i从首位开始,j从末尾开始)第二种模型为二个数组(i从第一个数组首位开始,j从第二个数组尾部出发),第三钟为两个数组(i从第一个数组首位开始,j从第二个数组首位开始)双指针一般都是两层循环优化而来,特
转载
2023-12-14 10:42:07
29阅读
同向双指针 移动速度相同,一般同向移动 指针再向后移动一位,第二个指针再从第一个指针的位置向后遍历整个数组,以此类推。(有点像选择排序的过程)时间复杂度:n..
原创
2022-11-17 00:58:35
94阅读
今晚跟一个朋友突然问我,你懂双指针遍历吗?并叫我敲出代码。当时自己愣住了,但是还是写出来了,第一个版本是:#include <iostream>
using namespace std;
int main(int argc, char** argv, char** arge)
{
cout<<"输出参数个数:"<<argc<<endl;
转载
2024-07-02 07:48:50
45阅读
双指针双指针在快速排序中和归并排序中,以及二分法中…都已经用到了,原理就是创建两个变量当做指向标点,然后通过单调性的规律来使两个指针移动,最终找到方案或答案。例题来进一步了解双指针【例题1:】 给定一个长度为n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。输入格式 第一行包含整数n。第二行包含n个整数(均在0~100000范围内),表示整数序列。输出格式 共一行,包含一个整数,表
转载
2023-11-06 22:35:20
173阅读
1.移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明:必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。 var moveZeroes = function(nums) {
let n = nums.length;
for (let i = 0;
转载
2023-10-23 09:24:34
68阅读
一、什么是双指针双指针我所理解地是在遍历对象时,不是使用单个指针进行访问,而是使用两个相同方向或者相反方向的指针进行遍历,从而达到相应的目的。在JAVA中并没有像C/C++指针地概念,所以这里所说的双指针是指索引,游标或可迭代对象等。双指针在链表中也有很多用处,比如前面写到过的找出链表中的倒数第k个结点,就巧妙地利用到了双指针,此外,判断链表中是否有环也可以使用双指针,设两个快慢指针,让快指针一次
转载
2023-06-19 22:17:10
225阅读
双指针:可以将其分成快慢指针和左右指针,两者有不一样的应用场景。快慢指针:主要是用于一些判断链表问题的,比如说判断当前的链表是否包含有环存在,这些题目往往使用单个指针是很难解决的。//判断当前的链表是否有环
struct ListNode{
struct ListNode *next;
int val
};
bool hasCycle(ListNode* head)
{
ListNode f
转载
2023-12-18 17:05:35
31阅读