lc算法题:双指针

这篇博客探讨了三种算法问题,包括反转字符串中的元音字母、计算社交媒体上的好友请求总数以及寻找区间右侧的最小起始位置。这些问题涉及字符串操作、数组处理和双指针技巧,对于提升编程技能和理解算法有很好的帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

345. 反转字符串中的元音字母
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

825. 适龄的朋友
在社交媒体网站上有 n 个用户。给你一个整数数组 ages ,其中 ages[i] 是第 i 个用户的年龄。
如果下述任意一个条件为真,那么用户 x 将不会向用户 y(x != y)发送好友请求:
age[y] <= 0.5 * age[x] + 7
age[y] > age[x]
age[y] > 100 && age[x] < 100
否则,x 将会向 y 发送一条好友请求。
注意,如果 x 向 y 发送一条好友请求,y 不必也向 x 发送一条好友请求。另外,用户不会向自己发送好友请求。
返回在该社交媒体网站上产生的好友请求总数。

436. 寻找右区间
给你一个区间数组 intervals ,其中 intervals[i] = [starti, endi] ,且每个 starti 都 不同 。
区间 i 的 右侧区间 可以记作区间 j ,并满足 startj >= endi ,且 startj 最小化 。
返回一个由每个区间 i 的 右侧区间 的最小起始位置组成的数组。如果某个区间 i 不存在对应的 右侧区间 ,则下标 i 处的值设为 -1 。

一般来说可以用双指针跟二分有关系,能二分才使用双指针。
这道题可以将start和end两个端点分别存在两个数组中,分别排好序后。遍历每一个start,遍历end的指针j只会右移,得以减少时间复杂度。另外需要注意,结果是下标,因此这两个数组需要存储位置信息。

面试题 17.11. 单词距离
有个内含单词的超大文本文件,给定任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?

法:如果不考虑优化,可以直接用双指针优化模拟,遍历时两个指针分别指向两个单词最新出现的位置,因为最短距离不会出现在以前的位置,例如 student the the the student a,遍历到a时,index2指向第二个student,而index1指向第一个a,可知最短距离不会由第一个student和第一个a得出。因此只用两个指针以双O(1)复杂度得出。

考虑的话,则用map记住每个单词出现位置的有序集合,在两个单词的有序集合上做双指针(类似合并两个有序数组)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值