算法之双指针

双指针算法的作用

双指针算法是一种使用2个变量对线性结构(逻辑线性/物理线性),进行操作的算法,双指针可以对线性结构进行时间复杂度优化,可以对空间进行记忆。

双指针算法的分类

1.快慢指针

2.滑动窗口

3.左右指针

4.前后指针

双指针OJ题目

Leetcode.27.移除元素

给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于 val的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

使用左右指针,一个指向左值,一个指向右值。

Leetcode.15.三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != kj != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

**注意:**答案中不可以包含重复的三元组。

排序+双指针(前后指针),排序用来剪枝。

通过i遍历整个数组,得到第一个数,left,right得到其他2个数,因为数组被排序后,只要sum大于0,则right--,若小于0,则left++,对比暴力算法,双指针减少了一次遍历,降低了时间复杂度。

Leetcode.209.长度最小子数组

给定一个含有 n个正整数的数组和一个正整数 target

找出该数组中满足其总和大于等于target的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度**。** 如果不存在符合条件的子数组,返回 0

滑动窗口

Leetcode.151.反转字符串

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意: 输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

前后指针,左右指针,整体反转,局部反转,去除重复空格。

相关推荐
青岛少儿编程-王老师2 小时前
CCF编程能力等级认证GESP—C++7级—20250927
数据结构·c++·算法
nanaki502134 小时前
数据结构(3) ----------- 栈、队列
数据结构
一只小透明啊啊啊啊4 小时前
b树,b+树,红黑树
数据结构·b树·b+树
Mingze03144 小时前
C语言四大排序算法实战
c语言·数据结构·学习·算法·排序算法
程序员东岸5 小时前
学完顺序表后,用 C 语言写了一个通讯录
数据结构·笔记·学习
独自破碎E6 小时前
Leetcode2166-设计位集
java·数据结构·算法
Cikiss6 小时前
LeetCode160.相交链表【最通俗易懂版双指针】
java·数据结构·算法·链表
2301_789015628 小时前
算法与数据结构——排序算法大全
c语言·开发语言·数据结构·c++·算法·排序算法·visual studio
无限进步_8 小时前
冒泡排序的多种实现方式详解
c语言·数据结构·c++·算法
new coder9 小时前
[算法练习]Day 7: 变长滑动窗口
数据结构·算法·leetcode