/assets/images/avatar.jpeg

Harry's Space

数据结构(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。