算法---双指针题型(题目来源于力扣题库)

力扣题库合集(1):双指针 双指针算法是一种非常常见且实用的算法技巧,它使用两个指针同时在数据结构上移动,从而达到特定的目的。这种算法通常用于解决数组或链表等线性数据结构中的问题,比如寻找某个元素、删除某个元素、反转数组等。对撞指针(Two Pointers): 两个指针从不同的方向"对撞"而前进,直到满足某个条件为止。这种方法常用于解决数组或链表的查找、删除等问题。快慢指针(Slow and Fast Pointers): 两个指针以不同的速度移动,比如一个指针每次移动一步,另一个指针每次移动两步。 阅读详情

🍋双指针是什么?

在刷题之前,需要先了解什么是双指针,双指针是刷一维数组题目的算法技巧。
双指针一般可分为对碰指针和快慢指针,对碰指针指的是两个指针分别从一维数组的开始和结尾开始移动,快慢指针指的是两个指针都是从一维数组的起始位置开始移动,但一个指针每次移动的步长较少叫慢指针,一个指针每次移动的步长较多叫快指针,快慢指针步长具体多少得视题目情况而定;不过,下面的题目一般都是使用双指针中的对碰指针。

🍋1. 两数之和 II - 输入有序数组(力扣167/LeetCode167)

题目描述链接

https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/

题目特点

一维数组非递减排序。

完整代码

直接暴力破解,根据题目的意思直接解答。

public int[] twoSum(int[] numbers, int target) {
    int index1=0;
    int index2=0;
    for (int i = 0; i <numbers.length ; i++) {
        index1=i;
        for (int j = i+1; j <numbers.length ; j++) {
            index2=j;
            if (numbers[index1]+numbers[index2]==target){
                int[] arr={index1+1,index2+1};
                return arr;
            }
        }
    }
    return null;
}

双指针方法:

public int[] twoSum1(int[] numbers, int target) {
    int left=0;
    int right=numbers.length-1;
    while(left<right){
        if (numbers[left]+numbers[right]==target){
            int[] arr={left+1,right+1};
            return arr;
        }else if (numbers[left]+numbers[right]>target){
            right--;
        }else{//numbers[left]+numbers[right]<target
            left++;
        }
    }
    return null;
}
时间复杂度和空间复杂度

下面是上述两种方法的时间复杂度和空间复杂度的比较,前者是暴力破解,后者是双指针方法。

时间复杂度:O(n^2)VSO(n);

空间复杂度:O(1)VSO(1)。

因此,通过以上比较,双指针方法表现更加优秀。

🍋2. 两数平方和(力扣633/LeetCode633)

题目描述链接

https://leetcode.cn/problems/sum-of-square-numbers/

题目特点

一维数组非递减排序。

完整代码

巧用sqrt函数:

public boolean judgeSquareSum1(int c) {
    for (long i = 0; i*i <=c ; i++) {
        double b = Math.sqrt(c - i * i);
        if (b==(int)b){
            return true;
        }
    }
    return false;
}

双指针方法:

public boolean judgeSquareSum2(int c) {
    int a=0;
    int b= (int) Math.sqrt(c);
    while(a>b){
        if (a*a+b*b==c){
            return true;
        }else if (a*a+b*b>c){
            b--;
        }else{
            a++;
        }
    }
    return false;
}
时间复杂度和空间复杂度

下面是上述两种方法的时间复杂度和空间复杂度的比较,前者是巧用sqrt函数方法,后者是双指针方法。

时间复杂度:O(n)VSO(n);

空间复杂度:O(1)VSO(1)。

但整体表现双指针方法更加优秀。

🍋3. 反转字符串中的元音字符(力扣345/LeetCode345)

题目描述链接

https://leetcode.cn/problems/reverse-vowels-of-a-string/

题目特点

一维字母交换。

完整代码

双指针方法:

(力扣正解答案)

public String reverseVowels1(String s) {
    int n = s.length();
    char[] arr = s.toCharArray();
    int i = 0, j = n - 1;
    while (i < j) {
        while (i < n && !isVowel(arr[i])) {
            ++i;
        }
        while (j > 0 && !isVowel(arr[j])) {
            --j;
        }
        if (i < j) {
            swap(arr, i, j);
            ++i;
            --j;
        }
    }
    return new String(arr);
}

public boolean isVowel(char ch) {
    return "aeiouAEIOU".indexOf(ch) >= 0;
}

public void swap(char[] arr, int i, int j) {
    char temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

(自解答案)

public static  String reverseVowels(String s) {
    char[] chars = s.toCharArray();
    int left=0;
    boolean flag1=false;
    int right=chars.length-1;
    boolean flag2=false;
    while(left<=right){
        if (!(chars[left]=='a'||chars[left]=='e'||chars[left]=='i'||chars[left]=='o'||chars[left]=='u'||
                chars[left]=='A'||chars[left]=='E'||chars[left]=='I'||chars[left]=='O'||chars[left]=='U')){
            left++;
        }else{
            flag1=true;
        }
        if (!(chars[right]=='a'||chars[right]=='e'||chars[right]=='i'||chars[right]=='o'||chars[right]=='u'||
                chars[right]=='A'||chars[right]=='E'||chars[right]=='I'||chars[right]=='O'||chars[right]=='U')){
            right--;
        }else{
            flag2=true;
        }
        if (flag1&&flag2){
            char temp=chars[left];
            chars[left]=chars[right];
            chars[right]=temp;
            flag1=false;
            flag2=false;
            left++;
            right--;
        }
    }
    String x="";
    for (int i = 0; i < chars.length; i++) {
        x +=chars[i];
    }
    return x;
}
时间复杂度和空间复杂度

下面是双指针的时间复杂度和空间复杂度。

时间复杂度:O(n);

空间复杂度:O(1)。

🍋4. 回文字符串(力扣680/LeetCode680)

题目描述链接

https://leetcode.cn/problems/valid-palindrome-ii/

题目特点

一维数组回文判断,从两头走。

完整代码

双指针方法,使用该方法要注意全集和子集的保握。

public boolean validPalindrome1(String s) {
    int low = 0, high = s.length() - 1;
    while (low < high) {
        char c1 = s.charAt(low), c2 = s.charAt(high);
        if (c1 == c2) {
            ++low;
            --high;
        } else {
            return validPalindrome(s, low, high - 1) || validPalindrome(s, low + 1, high);
        }
    }
    return true;
}

public boolean validPalindrome(String s, int low, int high) {
    for (int i = low, j = high; i < j; ++i, --j) {
        char c1 = s.charAt(i), c2 = s.charAt(j);
        if (c1 != c2) {
            return false;
        }
    }
    return true;
}
时间复杂度和空间复杂度

下面是双指针方法的时间复杂度和空间复杂度。

时间复杂度:O(n);

空间复杂度:O(1)。

🍋5. 归并两个有序数组(力扣88/LeetCode88)

题目描述链接

https://leetcode.cn/problems/merge-sorted-array/

题目特点

两个一维数组,一个新的一维数组,有需要才把数组往后移动。

完整代码

直接暴力破解,先把需要的元素都放入一个数组,再对它进行排序。

public static void merge(int[] nums1, int m, int[] nums2, int n) {
    int[] arr=new int[m+n];
    for (int i = 0; i < m; i++) {
        arr[i]=nums1[i];
    }
    for (int i = 0; i < n; i++) {
        arr[m+i]=nums2[i];
    }
    Arrays.sort(arr);
    for (int i = 0; i < arr.length; i++) {
        nums1[i]=arr[i];
    }
}

双指针方法,使用该方法,类似于合并两个链表,但链表的合并更加复杂。

public void merge1(int[] nums1, int m, int[] nums2, int n) {
    int p1 = 0, p2 = 0;
    int[] sorted = new int[m + n];
    int cur;
    while (p1 < m || p2 < n) {
        if (p1 == m) {
            cur = nums2[p2++];
        } else if (p2 == n) {
            cur = nums1[p1++];
        } else if (nums1[p1] < nums2[p2]) {
            cur = nums1[p1++];
        } else {
            cur = nums2[p2++];
        }
        sorted[p1 + p2 - 1] = cur;
    }
    for (int i = 0; i != m + n; ++i) {
        nums1[i] = sorted[i];
    }
}
时间复杂度和空间复杂度

下面是上述两种方法的时间复杂度和空间复杂度的比较,前者是直接暴力破解,后者是双指针方法。

时间复杂度:O(约(n+m)^2)VSO(n);

空间复杂度:O(1)VSO(1)。

综上所述,双指针的表现更加优秀。

🍋6. 判断链表是否存在环(力扣141/LeetCode141)

题目描述链接

https://leetcode.cn/problems/linked-list-cycle/

题目特点

是否存在环问题,依然是类一维数组问题,使用快慢指针解决,以及使用哈希集合的特点来解决。

完整代码

哈希集合方法Set:

public boolean hasCycle1(ListNode head) {
    Set<ListNode> set=new HashSet<>();
    while(head!=null){
        if (!set.add(head)){
            return true;
        }
        head=head.next;
    }
    return false;
}

双指针方法,快慢指针,一个走得快,一个走得慢,但其边界条件判断需要注意。

public boolean hasCycle2(ListNode head) {
    if (head==null||head.next==null){
        return false;
    }
    ListNode slow=head;
    ListNode fast=head.next;
    while(slow!=fast){
        if (fast==null||fast.next==null){
            return false;
        }
        slow=slow.next;
        fast=fast.next.next;
    }
    return true;
}
时间复杂度和空间复杂度

下面是上述两种方法的时间复杂度和空间复杂度的比较,前者是巧用哈希集合方法,后者是双指针方法。

时间复杂度:O(n^2)VSO(n);

空间复杂度:O(1)VSO(1)。

双指针的表现更加优秀。

🍋7. 最长子序列(力扣524/LeetCode524)

题目描述链接

https://leetcode.cn/problems/longest-word-in-dictionary-through-deleting/

题目特点

两个一维数组,比较其两者是否相同,相同才进行下一步。

完整代码

双指针方法,字符串的compareTo可以判断字典序。

public String findLongestWord1(String s, List<String> dictionary) {
    String y="";
    for (String x:dictionary) {
        int l1=x.length();
        int l2=y.length();
        //字符串的compareTo可以判断字典序
        if (l2>l1 ||(l1==l2&&y.compareTo(x)<0)){
            continue;
        }
        if (isFlag(s,x)){
            y=x;
        }
    }
    return y;
}
//判断分离子串的方法
public static boolean isFlag(String s,String target){
    int i=0,j=0;
    while(i<s.length()&&j<target.length()){
        if (s.charAt(i)==target.charAt(j)){
            j++;
        }
        i++;
    }
    return j==target.length();
}
时间复杂度和空间复杂度

下面是双指针方法的时间复杂度和空间复杂度。

时间复杂度:O(n^2);

空间复杂度:O(1)。

🍋题型总结

使用条件:在一个一维数组或者两个一维数组的时候使用,一个一维数组需要满足非递减排序,两个一维数组则不需要满足非递减排序的条件。

优势:一般一维数组的题目时间复杂度都需要O(N^2),如果可以使用双指针方法,将把时间复杂度降为O(N),极大降低了时间复杂度。
在这里插入图片描述

真的神了~无意中发现1500道的2021LeetCode算法刷题pdf笔记 昨晚逛GitHub,无意中看到一位大佬的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙伴没有看到。 关于算法刷题的困惑和疑问也经常听朋友们提及。这份笔记里面共包含作者刷力扣算法题后整理的上千道题,每道题均附有详细题解过程。有了这个笔记的总结,对校招和社招的算法刷题帮助之大不言而喻,果断收藏安利。 累计1500+道...拿来即刷!word很大,你忍一下,我就不一一截图了,诸君自行下载哈。 可以看到,每道题的原题,题目大意,解题思路,以及代码实现都非常 阅读详情

相关推荐

LeetCode算法分类刷题实战指南与系统化解决方案

LeetCode作为全球领先的编程题库平台,汇聚了上千道涵盖算法、数据结构、系统设计等方向的高质量题目,广泛应用于程序员技术能力训练与名企面试备战。其核心价值不仅在于提供标准化的在线编码环境,更在于通过精准的测试用例反馈机制和实时性能评估(时间/空间复杂度),帮助开发者建立严谨的问题求解闭环。刷题过程实质是对“问题抽象→模型匹配→代码实现→调试优化”这一工程思维链的高频强化,尤其在应对FAANG等企业高频考察的动态规划、双指针、图论等题型时,LeetCode的典型题库与讨论区优质题解形成了强大的学习飞轮。

weixin_42181686的博客 1623

Leetcode刷题日记(五)

又来到一天一度的leetcode刷题时间,在像往常一样打开leetcode题库时,突然看到了双指针这个主题的题库,心里一想,想起了这不是前天博主刚刚写的一篇双指针的总结方法文章。这不拿几道题来练练手,于是博主就点击了这个双指针这三个字。随之出现的就是很多很多题目。故在这里博主特地挑选了一道经典题目来进行分享。 1.题目: 解题方法:这一方法将两个数组看作队列,每次从两个数组头部取出比较小的数字放到结果中。 class Solution { public: void merge(vect...

m0_63932570的博客 200

西电计组实验二 运算器实验

算术逻辑运算实验 一.实验目的   1.了解简单运算器的数据传输通路。   2.验证运算功能发生器的组合功能。   3.掌握算术逻辑运算加、减、与的工作原理。   4.验证实验台运算的8位加、减、与、直通功能。   5.按给定数据,完成几种指定的算术和逻辑运算。 二.实验原理   算术逻辑单元ALU的数据通路如图2-1所示。其中运算器ALU181根据74LS181的功能用VHDL硬件描述语言编辑而成,构成8位字长的ALU。参加运算的两个8位数据分别为A[7…0]和B[7…0],运算模式由S[3…0]的16种

Polaris的博客 1万+

leetcode 88. 合并两个有序数组(逆向双指针)

leetcode 88. 合并两个有序数组 题目: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

weixin_46669927的博客 300

SDR实战(四)-AD9361使用手册(三)

本节定义了并行数据端口和串行外设接口(SPI),它们使得AD9361与基带处理器(BBP)之间能够传输数据和控制/状态信息。图63展示了这些接口,并提供了AD9361和BBP在宽带无线系统中使用方式的高级概述。数据接口以两种模式之一运行:兼容标准CMOS模式或兼容低压差分信号(LVDS)模式。每个接口都具有以下部分描述的独特特性。使用CMOS模式时:保持了单端-CMOS逻辑兼容性。可以使用一个或两个数据端口。使用两个端口可以提高数据吞吐量。

hutx0924的博客 6242

手把手教你用AFL挖掘C程序漏洞:从安装到实战(附常见错误排查)

本文详细介绍了如何使用American Fuzzy Lop (AFL)对C/C++程序进行模糊测试,从环境准备、目标程序插桩编译、初始语料库构建到实战运行与结果分析。重点讲解了AFL的安装、常见错误排查(如核心转储配置、执行速度优化)以及提升测试效率的高级策略(如持久模式、并行化),帮助开发者和安全工程师高效挖掘程序漏洞。

weixin_29014237的博客 407

力扣-数组/字符串/链表

记录,用于复习

weixin_44965579的博客 544

STM32 使用SYN6288语音模块

本篇文章带大家学习一下SYN6288语音模块,这个模块可以用于车载设备,语音电子书等众多产品当中,而且这个模块支持多种编码格式,GB2312,GBK等字符编码格式。SYN6288语音合成模块是一种语音合成设备,其可实现文字转语音功能,将输入的文字信息通过内部的处理和合成,输出相对应的语音信息。SYN6288模块具有语音合成质量高、输出音质好、使用方便等特点,因此广泛应用于语音播报、语音提示、语音识别、智能家居、智能家电、安防监控等领域。支持多语言:包括中文、英文、日文、韩文等多种语言。

m0_49476241的博客 2万+

合并两个有序数组-双指针法

class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int p1 =0,p2=0; int sorted[m+n];//声明一个m+n大小的数组 int cur; while (p1<m||p2<n){ if(p1==m){//.

m0_47994271的博客 921

Python实现稳态传热传质的偏微分方程求解

通过这种方法,我们可以求解更复杂的传热传质问题,并对系统的温度和浓度分布进行分析和优化。稳态传热传质是一个重要的工程问题,涉及到物质在空间中的分布以及热量和质量的传递。每次迭代中,我们使用上一次迭代的温度值来计算下一次迭代的温度值。该图显示了平板内部各点的温度分布,其中中心温度为T1,边界温度为T2。接下来,我们创建一个N x N的温度矩阵,并将边界条件初始化为边界温度T2。假设我们有一个矩形平板,其中心温度为T1,四个边界温度为T2。假设平板的长度为L,宽度为W,中心温度为T1,边界温度为T2。

HackDashX的博客 306

高并发网络爬虫实践(欧赔、亚盘、大小指数数据爬取)

本文通过对一个实战化的高并发网络爬虫脚本进行深度模块化剖析,展示了如何构建一个兼具性能、健壮性和易用性的数据采集工具。核心设计思想总结模块化与单一职责: 每个函数都专注于解决一个特定问题,无论是网络请求、数据解析还是文件操作。并发与效率: 通过ThreadPoolExecutor实现了高效的并发抓取,极大缩短了总耗时。健壮性与容错: 强大的重试机制、细致的异常处理和线程安全的文件写入,保证了程序在复杂网络环境下的稳定运行。断点续传: 精心设计了进度记录与恢复机制,使得大规模抓取任务变得轻松可控。

猫敷雪 469

【Java版算法思想】双指针算法

一、什么是双指针算法? 严格的来说,双指针只能说是是算法中的一种技巧。 双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。 二、双指针算法的适用范围 常用在数组遍历中,我们使用两个指针进行操作,遍历完整个数组来实现我们的目的。一般能用双指针算法解决的问题,都可以用暴力解法解决。所以双指针问题基本有以下几个细节: 1、注意双指针的初始位置。 2、注意双指针的移动方法。 3、注意遍历的结束条件。 三、顺序

haohaoxuexiyai的博客 3670

3步搞定.NET Core在UOS上的部署?手把手教你从零到上线!

本文详细介绍了如何在统信UOS系统上部署.NET Core应用程序的完整流程。首先,通过安装.NET Core SDK,确保UOS系统能够编译和运行C#代码。接着,创建一个简单的控制台应用,并验证其本地运行情况。最后,通过发布应用、传输文件到UOS服务器,并解决权限问题,确保应用能够在UOS上顺利运行。文章还提供了常见问题的解决方案,如依赖缺失、权限不足和服务启动失败等,帮助开发者避免常见陷阱。通过本文的指导,开发者可以轻松将.NET Core应用部署到UOS系统,并实现24/7的稳定运行。

java专栏 586

蓝桥杯---力扣题库第38题目解析

1.题目重述 2.外观数列举例说明 3.思路分析(双指针+模拟) 4.代码说明

大学成长道路上的探索经历与点滴思考,与君共勉,共筑成长。 933

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Leetcode各种题型题目+思路+代码(共176道题及答案)

文章目录 第一章:Leetcode 每日很多题 1、Leetcode-1047 删除字符串中的所有相邻重复项 2、剑指 Offer 53 - I. 在排序数组中查找数字 I 3、Leetcode704:二分查找 4、 Leetcode 227:基本计算器II 5、leetcode 224:基本计算器(带括号的计算) 6、Leetcode 15:三数之和:排序+双指针 7、剑指 offer 38.字符串的排列 8、Leetcode409:最长回文串 9、Leetcode 331:验证二叉树的前序序列化 10、

muli522的博客 4万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【leetcode】高频题目整理_双指针篇( High Frequency Problems, Two Pointers )

截止至今LeetCode题目总量已经有1582题,估计将来每年平均增长300题左右,大部分人肯定是刷不完的,所以得有选择地刷LeetCode。 一种公认的刷题策略是按类别刷题,可是每个类别也有许多题,在有限的时间里到底该刷哪些题呢?个人根据LeetCode官方给出的每个题目的出现频率,整理并收录了每个类别里高频出现的题目,对于官方统计频率太低的题目,不予收录,最终得到了这个高频题目表格。 例如,对于下图中题号#275与#270的题目将被收录,并且#275出现频率大于#270;而对于题号#1011与#11

嵌入式与Linux那些事的博客 1326

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

LeetCode-Questions-CompanyWise:企业面试算法题库完整指南与实战教程

LeetCode-Questions-CompanyWise是一个开源项目,专门为求职者提供按公司分类整理的LeetCode面试题库。这个项目根据面试频率和时间范围对所有题目进行了系统化排序,帮助开发者针对特定公司进行精准的算法面试准备。通过分析数百家科技公司的面试数据,该项目为求职者提供了最直接有效的学习路径。 ## 📊 企业面试题库数据可视化分析 通过项目的可视化图表,我们可以清晰地看到

gitblog_00751的博客 1021

[力扣题目之双指针]有效三角形的个数,超详细干货讲解!!!

本文主要介绍了利用双指针法来优化寻找有效三角形的个数,通过将数组排序之后只需要比较一个条件的优化思路.该方法将时间复杂度优化至O(n^2),有效解决了暴力枚举的高复杂度问题。

Steadfast_GG的博客 838

【LeetCode力扣题库】27. 移除元素(简单)

原题目链接:27. 移除元素 题目描述: 给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下: // num...

一个平平无奇的攻城狮 4486

力扣刷题_主题库(按题目顺序)_python

1. 两数之和 (1)知识点 (2)思想 通过字典用保存原数组的值和索引。 (3)结果

qq_41915623的博客 4114

力扣刷题百天计划 Day13 通过删除字母匹配到字典里最长单词 力扣题库第524题 C# 双指针 中等难度

我会持续更新我独特的算法思路,希望能给大家带来不一样的思维拓展! 如果大家感觉有帮助的话,欢迎点赞关注支持哦! 你们的鼓励是我坚持下去的动力! !!!

m0_48781656的博客 390

LeetCode算法题库解析

随着人工智能和大数据时代的到来,算法能力的需求日益增长,LeetCode也在不断更新题目,涵盖机器学习、并行计算等新兴领域。其次,定期练习和复习是关键,可以制定每日或每周计划,保持学习的连续性。通过解决LeetCode上的问题,开发者能够深入理解数据结构和算法的核心原理,掌握不同场景下的问题解决策略,从而在技术面试和实际工作中游刃有余。题库中的题目覆盖了从基础到高级的众多概念,如数组、链表、树、动态规划、图论等,每一道题都旨在锻炼特定的技能点,帮助用户构建坚实的计算机科学基础。

u011200601的博客 373

【LeetCode】LeetCode经典题目合集,面试刷这些就够了(持续更新)

经典lc题目整理,有个人理解,可以作为学习和准备面试使用

GEEK-BANANA 9283

双指针算法在力扣面试题中的核心应用与实战技巧

双指针算法是解决数组和链表问题的经典技术,通过两个指针的协同移动实现高效遍历。其核心原理是通过指针的特定移动策略(如同向移动、对向移动或滑动窗口)将时间复杂度从O(n²)优化到O(n)。在工程实践中,双指针技术广泛应用于数据处理、字符串操作和内存优化等场景,特别是在力扣(LeetCode)算法面试中,双指针题目如'两数之和'和'环形链表'等高频出现。掌握快慢指针、滑动窗口等技巧,不仅能提升算法效率,还能培养对边界条件的敏感度,是面试官考察候选人编码能力的重要维度。

weixin_33290540的博客 288

【LeetCode力扣题库】58. 最后一个单词的长度(简单)

原题目链接:58. 最后一个单词的长度 题目描述: 给你一个字符串 s,由若干单词组成,单词之间用空格隔开。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s = "Hello World" 输出:5 示例 2: 输入:s = " " 输出:0 提示: 1 <= s.length <= 104 s 仅有英文字母和空格 ' ' 组成 来源:力扣(LeetCode) 链...

一个平平无奇的攻城狮 4795
上一篇: 【零基础】手把手教你使用Docker部署Springboot项目(详细版)
下一篇: 贪心算法题型总结
fengprogrammer
博客等级 码龄6年 2985粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值