指针指针的过程:在遍历数组的过程中,定义两个相同方向或者相反方向的指针进行遍历,根据两个指针所在的数据进行处理,从而达到相应的目的。 首尾指针(对撞指针) 对撞指针是指在数组中,将最左侧的索引(0)定义为左指针(left),最右侧的索引(数组长度-1)定义为右指针(right),然后两个指针都 ...
转载 2021-10-10 17:09:00
242阅读
2评论
走进快慢指针法
原创 精选 2022-03-10 15:59:15
1756阅读
相信大家已经对双指针法很熟悉了,但是双指针法并不隶属于某一种数据结构,我们在讲解数组,链表,字符串都用到了双指针法,所有有必要针对双指针法做一个总结。数组篇在数组:就移除个元素很难么?中,原地移除数组上的元素,我们说到了数组上的元素,不能真正的删除,只能覆盖。一些同学可能会写出如下代码(伪代码):for (int i = 0; i < array.size(); i++) {    if (
原创 2021-03-02 19:53:39
290阅读
给「代码随想录」一个星标吧!❝又是一波总结❞相信大家已经对双指针法很熟悉了,但是双指针法并不隶属于某一种数据结构,我们在讲解数组,链表,字符串都用到了双指针法,所有有必要针对双指针法做一个总结。数组篇在数组:就移除个元素很难么?中,原地移除数组上的元素,我们说到了数组上的元素,不能真正的删除,只能覆盖。一些同学可能会写出如下代码(伪代码):for(inti=0;i<array.size();
原创 2020-12-29 15:58:03
600阅读
一、双指针法简介  所谓双指针,指的是在遍历对象的过程中,不是普通的使用单个指针(索引、游标、指针或可迭代对象皆可)进行访问,而是使用两个相同方向或
原创 10月前
123阅读
三数之和解法链接public List<List<Integer>> fourSum(int[] nums, int target) { List
原创 2022-05-31 07:43:20
173阅读
【LeetCode 03】双指针法总结一、适用条件适用条件为:数组问题链表问题数组与链表中涉及到元素覆盖、删除
原创 2022-08-02 18:52:50
189阅读
指针每次移动两个节点,慢指针每次移动一个节点,当快指针到达链表的尾部时,慢指针指向的就是链表的中间节点。这个原理也很简单,因为快指针走得快,所以当快指针到达链表的尾部时,慢指针刚好走了一半。使用快指针每次移动两个节点,慢指针每次移动一个节点,如果快指针追上了慢指针,那么链表就有环。另外,在使用快慢指针算法
原创 2023-03-17 13:56:25
143阅读
版本一:public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> res = new A
原创 2022-05-31 07:43:11
68阅读
记录leetcode上刷过的算法题,本文对双指针进行总结。算法简述1、左右指针1)最长回文子串2)排序数组查找元素第一个和最后一个位置2、快慢指针3、滑动窗口1.)力扣03.无重复字符的最长子串2)暴力实现strStr() 算法简述在处理数组和链表有关的问题时,经常会用到双指针的方法,双指针技巧主要分为两类,左右指针 和 快慢指针。 而在针对的对象上,双指针技巧又可以分为 针对单个元素 的,和针
指针:指的是在遍历对象的过程中,引用两个指针来进行访问(可以是同方向–>快慢指针,也可以是反方向–>左右指针)从而达到相应的目的。1 快慢指针例一:26. 删除有序数组中的重复项 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结
ector<int>& nums, int val) { int slow = 0; for (int fast = 0; fast &l
原创 2022-12-06 05:58:43
122阅读
# 使用双指针法反转链表 ## 介绍 在Java编程中,反转链表是一个常见的问题,同时也是面试中经常出现的问题之一。本文将介绍如何使用双指针法反转链表。双指针法是一种常用的解决链表问题的方法,通过设置两个指针,可以在链表上进行迭代操作。 ## 反转链表的流程 下面是使用双指针法反转链表的流程: | 步骤 | 操作 | | --- | --- | | 1 | 初始化三个指针:previous、
原创 8月前
66阅读
欢迎点击「算法与编程之美」↑关注我们!本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。问题描述Python算...
原创 2022-02-11 14:19:18
216阅读
算法
原创 2022-12-31 01:38:06
158阅读
【代码随想录】二刷-双指针法
  问题描述 Python算法题目中,掌握一定的方法和技巧或者说是了解基础解题规律,能够在解决更多复杂问题的过程中思路更清晰,算法更简单易懂。接下来用一个leetcode题目“原地删除排序数组重复项”的案例来介绍一下“双指针法”的具体应用。 题目描述: 给定一个排序数组,需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后新的数组。 输入:[1,1,2] 输出:[1,2] 解决方案
原创 2021-06-29 17:10:31
472阅读
前言Java 程序调优是一个程序员必备的技能。对象内存结构对象头:    Mark Word :32bit机 4B;64bit机 8B 是固定的。    类型指针:klass pointer,引用类型在方法区的地址。 开启指针压缩占4字节,不开启占8个字节。数组长度:对象不是数组占0字节,对象是数组占4字节,开启指针压缩,数组长度会放到类型指针的后
使用双指针模拟栈简要思路使用双指针模拟元素的 出栈进栈 操作括号的匹配方法与使用栈的方法相同动画复杂度分析时间复杂度 O(N):只需要遍历一次字符串空间复杂度 O(N):因为 java 无法直接使用下标操作字符串,需要将字符串转换为数组(C++ 可实现 O(1) 空间)代码实现class Solution { public boolean isValid(String
原创 10月前
47阅读
编号:27. 移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并「原地」修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,1,
原创 2021-07-09 10:07:16
541阅读
  • 1
  • 2
  • 3
  • 4
  • 5