/assets/images/avatar.jpeg

Harry's Space

算法(1): 双指针

双指针通常用在有序数组,链表的数据结构上,根据题目条件移动对应的指针。比如判断子串、链表是否有环的问题。

1.1 最长子串

LeetCode No.524

题目描述:给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串 输入: s = “abpcplea”, d = [“ale”,“apple”,“monkey”,“plea”] 输出: “apple”

数据结构(4): 树

4.1 根据前序与中序序列构造二叉树

LeetCode No.105

问题描述:根据一棵树的前序遍历与中序遍历构造二叉树。

思路:根据二叉树的前序和中序(或后序和中序)的序列可唯一构造一棵二叉树,必须要有中序。前序遍历的第一个为根节点,找到根节点在中序中的位置,中序左边的节点都是根节点的左子树,右边的同理,然后可以用递归的方式求解。

数据结构(3): 链表

3.1 删除单向链表倒数第n个节点

LeetCode No.19

问题描述:删除单向链表倒数第n个节点(只遍历一次) Input: head = [1,2,3,4,5], n = 2 Output: [1,2,3,5]

思路:两个指针,p1先走n步,然后p1和p2再一起走,当p1到链表结尾,p2就是要删除的节点。注意处理可能删除的是头结点(n=length)或者不需要删除(n>length)的情况。 可以通过增加一个虚拟的头节点,避免对头节点的特殊处理。

数据结构(2): 数组

2.1 大于n/k次的元素

LeetCode No.229

题目描述:给一个整数数组,找出所有出现次数大于n/3的元素。 Input: nums = [3,2,3] Output: [3]

摩尔投票法: 一般情况一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/k ⌋ 次的元素。n/k的众数最多只有k - 1个,原因:假设有k个众数,则 出现次数(⌊ n/k ⌋ +1) × \times× 众数个数 k > n。