递归
树形
- 【105】从前序与中序遍历序列构造二叉树
一维
-
【4】求两有序数组第k个数⭐
-
每次排除k/2个数
-
func findK(nums1,nums2 []int,l1,l2,k int) int{ if len(nums1)-l1 > len(nums2)-l2{ return findK(nums2,nums1,l2,l1,k) } if len(nums1)==l1{ return nums2[l2+k-1] } if k==1{ return min(nums1[l1],nums2[l2]) } m1,m2:=min(len(nums1),l1+k/2),l2+k/2 if nums1[m1-1]<nums2[m2-1]{ return findK(nums1,nums2,m1,l2,k-(m1-l1)) }else{ return findK(nums1,nums2,l1,m2,k-(m2-l2)) } }
-
-
【215】数组中的第K个最大元素:快排优化
-
寻找两数组第k位数
归并
- 归并排序
- 【23】合并k个上升链表:归并+链表合并
- 【offer 51】数组中的逆序对:归并过程中,num[i]>num[j],ans+=mid-i+1
字符串
- 回文串问题:Manacher
- 字符串匹配问题:KMP
字典序
从前向后依次比大小,如果长度不一样且包含:ab在abc之前
-
【49】字母异位词分组:字典序排序+hash记录
-
【179】最大数,将数组排列成字典序最大
- 结果的字典序一定是a1>=a2>=a2...,反证法即可
-
sort.Slice(nums,func (i,j int)bool{ s1,s2:=strconv.Itoa(nums[i]),strconv.Itoa(nums[j]) return s1+s2>s2+s1 })
KMP
【28】找出字符串中第一个匹配项的下标
Trie树
- 【208】实现 Trie (前缀树):标准Trie