当前位置: 首页 > news >正文

电信改公网ip可以做网站吗做柱状图 饼状图的网站

电信改公网ip可以做网站吗,做柱状图 饼状图的网站,十堰网站设计,全国网站建设公司排行版树上的操作【LC1993】 给你一棵 n 个节点的树,编号从 0 到 n - 1 ,以父节点数组 parent 的形式给出,其中 parent[i] 是第 i 个节点的父节点。树的根节点为 0 号节点,所以 parent[0] -1 ,因为它没有父节点。你想要设计…

树上的操作【LC1993】

给你一棵 n 个节点的树,编号从 0n - 1 ,以父节点数组 parent 的形式给出,其中 parent[i] 是第 i 个节点的父节点。树的根节点为 0 号节点,所以 parent[0] = -1 ,因为它没有父节点。你想要设计一个数据结构实现树里面对节点的加锁,解锁和升级操作。

数据结构需要支持如下函数:

  • **Lock:**指定用户给指定节点 上锁 ,上锁后其他用户将无法给同一节点上锁。只有当节点处于未上锁的状态下,才能进行上锁操作。

  • **Unlock:**指定用户给指定节点 解锁 ,只有当指定节点当前正被指定用户锁住时,才能执行该解锁操作。

  • Upgrade:

    指定用户给指定节点

    上锁

    ,并且将该节点的所有子孙节点

    解锁

    。只有如下 3 个条件

    全部

    满足时才能执行升级操作:

    • 指定节点当前状态为未上锁。
    • 指定节点至少有一个上锁状态的子孙节点(可以是 任意 用户上锁的)。
    • 指定节点没有任何上锁的祖先节点。

请你实现 LockingTree 类:

  • LockingTree(int[] parent) 用父节点数组初始化数据结构。
  • lock(int num, int user) 如果 id 为 user 的用户可以给节点 num 上锁,那么返回 true ,否则返回 false 。如果可以执行此操作,节点 num 会被 id 为 user 的用户 上锁
  • unlock(int num, int user) 如果 id 为 user 的用户可以给节点 num 解锁,那么返回 true ,否则返回 false 。如果可以执行此操作,节点 num 变为 未上锁 状态。
  • upgrade(int num, int user) 如果 id 为 user 的用户可以给节点 num 升级,那么返回 true ,否则返回 false 。如果可以执行此操作,节点 num 会被 升级
  • 思路

    使用数组记录每个节点的父节点以及上锁状态,并使用list记录每个节点的孩子节点,方便dfs操作

    • lock和unlock函数进行简单判断即可
    • upgrade函数需要判断祖先节点是否上锁,再通过dfs判断是否有上锁的孩子节点,并将其解锁
  • 实现

    class LockingTree {// 记录每个节点的根节点以及加锁状态int[] locked;int[] parent;int n;List<Integer>[] children;public LockingTree(int[] parent) {this.n = parent.length;this.parent = parent;this.locked = new int[n];this.children = new List[n];Arrays.fill(locked, -1);Arrays.setAll(children, e -> new ArrayList<>());for (int i = 0; i < n; i++){if (parent[i] != -1){children[parent[i]].add(i);}}}public boolean lock(int num, int user) {if (locked[num] != -1) return false;locked[num] = user;return true;}public boolean unlock(int num, int user) {if (locked[num] == user){locked[num] = -1;return true;}return false;}public boolean upgrade(int num, int user) {if (locked[num] != -1) return false;// 判断祖先节点是否上锁int p = parent[num];while (p != -1){if (locked[p] != -1) return false;p = parent[p];}// 判断是否有子孙节点加锁了,并给子孙节点解锁boolean[] res = {false};dfs(num, res);if (res[0] == false) return false;locked[num] = user;return true;}public void dfs(int p, boolean[] lock){for (int u : children[p]){if (locked[u] != -1){lock[0] = true;locked[u] = -1;               }dfs(u, lock);}}
    }/*** Your LockingTree object will be instantiated and called as such:* LockingTree obj = new LockingTree(parent);* boolean param_1 = obj.lock(num,user);* boolean param_2 = obj.unlock(num,user);* boolean param_3 = obj.upgrade(num,user);*/
    
    • 复杂度
      • 时间复杂度: n n n为二叉树的节点数目,lock和unlock为 O ( n ) \mathcal{O}(n) O(n),upgrade为 O ( 1 ) \mathcal{O}(1) O(1)
      • 空间复杂度: O ( n ) \mathcal{O}(n) O(n)
http://www.yayakq.cn/news/15659/

相关文章:

  • 有没有专门做中考卷子的网站建设自己的淘宝优惠券网站
  • 网站开发需要2个月吗手机系统网站有哪些
  • 无锡网站建设工作做网站用的三角形图片
  • 渭南网站建设推广国外 定制网站
  • 济南网站忧化杨小刀网站建设
  • 网站建设代码结构招聘网站设计师要求
  • 怎么用虚拟主机做网站步骤推广黄冈软件必备软件
  • 用js做的网站专做外贸的网站有哪些资料
  • 成都h5模板建站网站页面布局图片
  • 惠州网站建设 惠州邦谷歌怎么做网站优化
  • 网站开发需求文件西安网站制作厂家
  • 2014山东春季高考网站建设凡科做的网站不能被收录
  • 合川建网站东莞网站提升排名
  • 长春880元网站建设化妆品商城网站建设
  • 手机网站排名汽车网站源码
  • 怎么自建一个网站最经典最常用的网站推广方式
  • 学校网站的目的wordpress模版推荐
  • 专做中医教学网站浙江圣大建设集团有限公司网站
  • 旅游网站建设与实现蒙古文网站建设情况
  • 西安做公司网站建设一个电商网站的流程图
  • 网站开发流程中网站制作包括网站电脑基础培训班
  • 网站建设培训 上海公司装修样板
  • 怎样做外贸网站建设口碑好的购物平台
  • 专业俄文网站建设在线短网址缩短工具
  • .mom域名可以做网站吗织梦做网站主页容易吗
  • 网站建设的架构设计手机非法网站怎么解决方案
  • 网站开发有哪些书籍公司网站怎么做百度竞价
  • wordpress 精品主题一键优化为什么不能100
  • 北海涠洲岛旅游网站建设分析学校让做网站做完怎么交
  • 餐饮网站建设设计价格英文网站建设 论文