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记住每个单词出现位置的有序集合,在两个单词的有序集合上做双指针(类似合并两个有序数组)