10.5 - hard总结4

312. Burst Balloons: 区间dp+backtracking
315. Count of Smaller Numbers After Self: 利用segment tree, 利用sorted nums的index作为range的范围,然后每次update的时候就update某个index range上有几个值,query的时候就query 0~index的范围内有多少值就可以了
316. Remove Duplicate Letters: 利用stack和hash来做,很精妙的一道题
317. Shortest Distance from All Buildings: 有点儿复杂的一道bfs,不过利用bfs可以清晰的得到每一层的距离
321. Create Maximum Number:首先想到用分类来做,也就是说k个元素分成i,j,在1和2中各取i和j个,得到的最大值是多少
327. Count of Range Sum:mergesort的高级应用,重点关注下
329. Longest Increasing Path in a Matrix: 滑雪道问题,dp代表以i,j 最大值的最长的长度
330. Patching Array:一道greedy的题目,从1开始一步一步朝大组合
335. Self Crossing: 这是一道数学题,画画图才能好做一些
336. Palindrome Pairs:利用hash来枚举每一种情况,把一个词分成prefix和postfix来考虑
340. Longest Substring with At Most K Distinct Characters: 前向型指针问题
352. Data Stream as Disjoint Intervals: 利用heap来保持一定的有序性
354. Russian Doll Envelopes: 用dp的方法很好做,不过时间复杂读比较高。用二分法很巧妙,估计面试的时候是无法想到的。
358. Rearrange String k Distance Apart: 这题有些greedy的意味在里面,不过用heap来维护一个顺序。
363. Max Sum of Rectangle No Larger Than K: 实在是做不动了。。。
381. Insert Delete GetRandom O(1) - Duplicates allowed: 保存一个dict val -> index set, 一个arr,存储val,然后利用最后一个值的index来进行remove操作
391. Perfect Rectangle: 四个边角上的点只会出现一次,所有内部的点出现的次数mod 2等于0
403. Frog Jump: 这种非顺序类的一般都需要用到memory search
407. Trapping Rain Water II: 用heap保存四周的高度
410. Split Array Largest Sum:按值二分法,在判断的时候用数个数

推荐阅读更多精彩内容