| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> LeetCode刷题第2周小结 -> 正文阅读 |
|
[数据结构与算法]LeetCode刷题第2周小结 |
本周题目汇总:关键字:字符串算法、快慢指针、哈希集合、隐式链表、递归、KMP算法 1.字符串相加难度:★ 链接:力扣 ?解题思路: 对两个大整数模拟“竖式加法”的过程,即如下图所示:将两个数的相同数位对齐,从低位到高位相加,如果和超过10则向高位进一。所以我定义一个carry变量来存储这个进位值,由于两个整数的数位不一定相同,当指向某个整数的指针移动至负数时返回0,这样就等价于对数位较短的数字进行“补零”操作,进行下一轮对应数位的相加。特殊情况是:当两个整数的指针都指向了负数即计算到最后一个数位了但是此时进位值carry不为0,还需进行最后一次循环,即0+0+carry将进位值carry放置到结果的最高位。 ? 解题代码:
2.判断子序列难度:★ 链接:力扣 解题思路: 采用双指针法,分别为两个字符串设置指针i ,j? 对应主串与模式串,从两个字符串的首个字符进行匹配,若匹配成功,则模式串与主串对应的指针都右移一位;若匹配不成功,则将主串的指针向右移动一位,模式串指针不动。最后判断模式串的指针长度是否等于模式串的串长,如果相等,则说明模式串是主串中的一个子串且与主串中字符的相对位置一致,因为我们是顺序遍历进行匹配的;若不相等则说明模式串不是主串的一个子串。 解题代码:
? 3.找不同难度:★ 链接:力扣 解题思路: 蛮力法,先将字符串转换成字符数组,调用排序方法将其进行排序,然后逐一比对字符找出被添加的那个字符返回即可,思路简单。 解题代码:
4.字符串中的第一个唯一字符难度:★ 链接:力扣 ? 解题思路: 蛮力法,统计字符串中每个字符出现的频次存放于数组中,然后以字符串的逐个字符为索引依次顺序遍历频次数组,返回第一个频次为1的下标,此时 i 即为字符串中第一个唯一字符的索引。 解题代码:
? 5.快乐数难度:★ 链接:力扣 ? 解题思路: 本题解法很多,下面分别分享三种思路: 方法一:哈希集合法
解题代码:
方法二: 快慢指针法 先来看两个例子: (1)以7为例,根据题目要求可以先出如下过程: ?可以看到最后各位数的平方和为1,所以7是一个快乐数。 (2)下面以116为例,过程图如下: ? 可以看到,等到算到58的时候,经过一番循环最终又回到了58,即它 构成了一个“环”,我们可以将其视为一个“隐式链表”,因为其没有真正意义上的的链表节点和指针,但是其数据形成了链表结构。所以问题转换成了判断该“隐式链表”中是否存在一个“环”,若存在环则会进入一个无限循环最终永远不可能到达1,所以有环的情况下肯定不是快乐数。如果无环,则快指针会先到达1,慢指针后到达1,最终判断慢指针是否到达1即可。 解题代码:
方法三:蛮力法+递归
解题代码:
? 6.最后一个单词的长度难度:★ 链接:力扣 ? 解题思路: 蛮力法+逆向思维:题目要求求最后一个单词的长度,显然没有必要正向遍历,当然是反向遍历,设置一个变量index将其移动到反向第一个字符的位置,该位置就是最后一个单词的最后一个字母,下面就是在其中将空格筛选出去统计字母的个数计算最后一个单词的长度 解题代码:
? ? 7.重复的子字符串难度:★ 链接:力扣 ? 解题思路: 如果一个长度为n的字符串s可以由它的长度为m的字串s'重复多次构成,那么有以下几点结论:
上面这三点是解题的关键,可以这么理解,s中长度为m的前缀就是s',并且在这之后的每一个位置上的字符s[i] ,都需要与它前面的第m个字符s[i-m]相同。所以可以从小到大枚举m,对字符串s进行遍历,进行上述的判断。一个小细节就是,因为字串至少需要重复一次,suoyim不会大于n的一半,所以只需要在[1,n/2]范围内枚举长度为m的字串进行判断即可 解题代码:
?本周重点学习了字符串匹配的相关算法,包括最经典最晦涩难懂的KMP算法,这里我推荐一篇文章供大家学习,文章很棒,仔细阅读,结合在纸上模拟与推导,KMP算法直接拿下! 下周继续,每日一题,让刷题成为一种习惯! ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:33:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |