zoukankan      html  css  js  c++  java
  • 272. Closest Binary Search Tree Value II

    一刷。

    在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)

  • 相关阅读:
    基于HSharp使用C#对象建立并输出HTML
    基于HSharp 使用C#反序列化HTML并获取HTML中的特定内容
    iis最大连接数和队列长度
    强网拟态 2021 showyourflag Writeup
    ByteCTF 2021 bytecert Writeup
    基于 OpenSSL 的 RSA 消息加密及签名实现
    思维导图-2020的目标
    我的第一个博客
    【网络流24题】洛谷P4015 运输问题
    CSP/NOIP 防爆指南
  • 原文地址:https://www.cnblogs.com/reboot329/p/6116366.html
Copyright © 2011-2022 走看看