[七日打卡]之第三卡:有效的括号、合并两个有序链表、删除排序数组中的重复项

116 阅读2分钟

有效的括号

思路:

对于括号是否正确闭合,可以总结一下,靠后的左括号需要先闭合,靠前的左括号需要后闭合,这种场景与“栈”相同。

那么如何匹配同种类型的左括号与右括号呢?可以考虑使用hash,但是此处需要以右括号为key,以左括号为value。因为我们需要判断当前字符是否是右括号,需要用到map.containsKey方法。

同时,判断map.getkey取出左括号与栈顶的左括号是否相同。


合并两个有序链表

思路:

两个有序链表l1和l2,比较两个链表的首个元素的value,取出最小的元素,然后比较剩余元素与另一个链表的首个元素,取出两个链表的第二小的元素,将最小元素的next值指向第二小的元素,以此类推(可以使用递归)

链表的方便之处就在于其pre及next,合理利用这两个属性可以带来意想不到的效果。


删除排序数组中的重复项

思路:

使用双指针法,一个慢指针,从头部开始,一个快指针,从慢指针+1的位置开始,比较快慢指针两处的元素是否相等。

如果相等,快指针+1,慢指针不动。

如果不相等,将快指针处的元素赋值给慢指针+1处的元素。

最后,返回新数组长度,注意此时慢指针的值为下标,需要加一才为新数组长度值。


最后给大家推荐一款idea刷算法题的插件,在插件中心搜索leetcode即可,安装后需要用户名、密码登录。长这个样子(网络原因,有些图片无法加载。。。)

明天见~~~