272. Closest Binary Search Tree Value II
2016-11-30 09:35
495 查看
一刷。
在BST里找到K个和给定target值最接近的点。
BST的特性就是可以过in-order traversal来得到sorted list.
有一个sorted list,用大小为k的滑窗来滑动就可以了。
停止的标准是:
1)窗口已填满。
2)左端和target的差距 < 当前(最右边)和target的差距
我们可以直接通in-order traversal来模拟滑窗的过程,一旦停止标准达到,直接返还滑窗里面的值就行了。
Time: O(n) 最差要整个BST搂一遍,一般可以提前停止,所以算是比题目要求的O(n)好一点。。
Space: O(k) 的窗口 O(lgN)的memory stack,因为在用rececursion.
hint我没太搞明白什么意思,好像是给ROOT加一个parent,相当于parent = > entire Tree => tail,实际还是个sorted list?
哦哦哦哦,搞错了,hint说的是用inOrder从左边找到target,从右边找到target,分别放到2个stack里。
2个stack同时从堆顶开始pop,每次pop和target的diff小的那个,总共pop出K个就行了。
不是很efficient。
Space: 先需要2个Stack,总共是O(n),还需要inorder的recursion memory O(lgn)
O(n) + O(lgN)
Time: O(n) inorder traversal + O(k)的POP()出K个元素。
O(N) + O(k)
在BST里找到K个和给定target值最接近的点。
BST的特性就是可以过in-order traversal来得到sorted list.
有一个sorted list,用大小为k的滑窗来滑动就可以了。
停止的标准是:
1)窗口已填满。
2)左端和target的差距 < 当前(最右边)和target的差距
我们可以直接通in-order traversal来模拟滑窗的过程,一旦停止标准达到,直接返还滑窗里面的值就行了。
Time: O(n) 最差要整个BST搂一遍,一般可以提前停止,所以算是比题目要求的O(n)好一点。。
Space: O(k) 的窗口 O(lgN)的memory stack,因为在用rececursion.
public class Solution { public List<Integer> closestKValues(TreeNode root, double target, int k) { List<Integer> res = new ArrayList<>(k); if (root == null) return res; inOrder(res, root, target, k); return res; } public void inOrder(List<Integer> res, TreeNode root, double target, int k) { if (root == null) return; inOrder(res, root.left, target, k); if (res.size() < k) { res.add(root.val); } else { double oldDiff = Math.abs((double)target - (double)res.get(0)); double newDiff = Math.abs((double)target - (double)root.val); if (oldDiff < newDiff) { return; } else { res.remove(0); res.add(root.val); } } inOrder(res, root.right, target, k); } }
hint我没太搞明白什么意思,好像是给ROOT加一个parent,相当于parent = > entire Tree => tail,实际还是个sorted list?
哦哦哦哦,搞错了,hint说的是用inOrder从左边找到target,从右边找到target,分别放到2个stack里。
2个stack同时从堆顶开始pop,每次pop和target的diff小的那个,总共pop出K个就行了。
不是很efficient。
Space: 先需要2个Stack,总共是O(n),还需要inorder的recursion memory O(lgn)
O(n) + O(lgN)
Time: O(n) inorder traversal + O(k)的POP()出K个元素。
O(N) + O(k)
相关文章推荐
- 272. Closest Binary Search Tree Value II
- [leetcode] 272. Closest Binary Search Tree Value II 解题报告
- [LeetCode#272] Closest Binary Search Tree Value II
- 272. Closest Binary Search Tree Value II
- Leetcode 272. Closest Binary Search Tree Value II
- [Leetcode] 272. Closest Binary Search Tree Value II 解题报告
- 272. Closest Binary Search Tree Value II
- 272. Closest Binary Search Tree Value II
- [LeetCode] 272. Closest Binary Search Tree Value II 最近的二叉搜索树的值 II
- Leetcode 272. Closest Binary Search Tree Value II (Hard) (cpp)
- LeetCode 272. Closest Binary Search Tree Value II
- LeetCode 272. Closest Binary Search Tree Value II(二叉搜索树查找)
- [LeetCode282]Closest Binary Search Tree Value II
- Closest Binary Search Tree Value II
- [?]*Closest Binary Search Tree Value II
- LeetCode-Closest Binary Search Tree Value II
- [Leetcode]Closest Binary Search Tree Value II
- Leetcode: Closest Binary Search Tree Value II
- [Locked] Closest Binary Search Tree Value & Closest Binary Search Tree Value II
- LeetCode "Closest Binary Search Tree Value II"