竞赛题6235。逐层排序二叉树所需的最少操作数目
#头条创作挑战赛#题目:
给你一个 值互不相同 的二叉树的根节点 root 。
在一步操作中,你可以选择 同一层 上任意两个节点,交换这两个节点的值。
返回每一层按 严格递增顺序 排序所需的最少操作数目。
节点的 层数 是该节点和根节点之间的路径的边数。
示例 1 :
image.png
输入:root = [1,4,3,7,6,8,5,null,null,null,null,9,null,10]
输出:3
解释: 交换 4 和 3 。第 2 层变为 [3,4] 。 交换 7 和 5 。第 3 层变为 [5,6,8,7] 。 交换 8 和 7 。第 3 层变为 [5,6,7,8] 。
共计用了 3 步操作,所以返回 3 。
可以证明 3 是需要的最少操作数目。
示例 2 :
image.png
输入:root = [1,3,2,7,6,5,4]
输出:3
解释: 交换 3 和 2 。第 2 层变为 [2,3] 。 交换 7 和 4 。第 3 层变为 [4,6,5,7] 。 交换 6 和 5 。第 3 层变为 [4,5,6,7] 。
共计用了 3 步操作,所以返回 3 。
可以证明 3 是需要的最少操作数目。
示例 3 :
image.png
输入:root = [1,2,3,4,5,6]
输出:0
解释:每一层已经按递增顺序排序,所以返回 0 。
提示: 树中节点的数目在范围 [1, 10^5] 。1 <= Node.val <= 10^5 树中的所有值 互不相同 。 思路:
先进行树的层次遍历,再看每一层需要交换的次数。 交换次数的计算可以用一个排好序的数组ordered和一个map. map记录原始树层次上的数的位置。 java代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public int minimumOperations(TreeNode root) { if (root == null) { return 0; } int res = 0; Queue queue = new LinkedList(); queue.offer(root); while (!queue.isEmpty()) { int size = queue.size(); int[] temp = new int[size]; for (int i = 0; i < size; i++) { TreeNode node = queue.poll(); temp[i] = node.val; if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } } res += exchangeTime(temp); } return res; } private int exchangeTime(int[] temp) { int size = temp.length; if (size <= 1) { return 0; } int[] ordered = new int[size]; System.arraycopy(temp, 0, ordered, 0, size); Arrays.sort(ordered); Map map = new HashMap(size); for (int i = 0; i < size; i++) { map.put(temp[i], i); } int res = 0; for (int i = 0; i < size; i++) { if (ordered[i] != temp[i]) { res++; exchange(temp, map, map.get(ordered[i]), i); } } return res; } private void exchange(int[] temp, Map map, Integer j, int i) { int t = temp[j]; temp[j] = temp[i]; temp[i] = t; map.put(temp[j], j); map.put(temp[i], i); } }
美国加息,我们的投资风向应该如何调整?基本概念在开始讨论之前,本文先介绍外汇市场三个基础知识。第一,和股票不同,货币汇率是一个相对概念,是一国货币相对于另一国货币的价格。如果全球所有货币一起升值,等同于都没有升值。全球
算计着,算计着,美国要把自己装进去了美国联邦储备委员会日前宣布连续第四次加息75个基点,试图应对居高不下的通胀。虽然今年第三季度美国经济实现增长,但现实困境无法掩盖,主流经济学家认为美国经济难逃衰退。为遏制高通胀,美
在银行存100万,是存在一家银行好,还是存在多家银行好?很多人都有多个银行的储蓄账户,因此在把钱存到银行时,就可以有多种选择,既可以存在一家银行里,也可以存在多家银行里。那么,如果要把100万存银行,是存一家银行好还是多家银行好呢?10
卓达财富帝国,杨卓舒卓达财富帝国创始人发展史杨卓舒,1952年生于黑龙江省肇东市,幼年时期的另类人生,养成了其叛逆的性格。在杨卓舒6岁的时候,其父亲不幸被打成右派,直到1978年才得以平反。在将近20
抄底!抄底!赵诣林乐峰谢书英等大举出手!1200亿新子弹来了中国基金报记者吴君在近期震荡市场环境下,一些次新基金已经开始积极建仓,抓住结构性机会创造收益,比如赵诣管理的泉果旭源三年持有期林乐峰掌舵的南方均衡成长谢书英管理的兴证全球合瑞等近3
有研硅半导体硅片迎来高景气周期,老牌国产硅片企业蓄势待发11月10日,有研半导体硅材料股份公司(股票代码688432简称有研硅)成功在科创板上市。上市首日,有研硅开盘报价20。00元股,较发行价9。91元股大涨101。82,截至当日收盘
贵州茅台股票,个人见解买股票的朋友,都知道贵州茅台吧,价值投资的代表,让人又爱又恨!超高的毛利率和净资产收益率!以下是个人对它的价值看法先说利空1房地产不景气大家都知道吧?!房地产不景气,请客的人就少,
22年st分析之准摘帽股,食铁兽基本面我市维一一家烟花公司,总股本1。66亿。资产负债率20。22,营收和扣非连续三年增长主营p2p和烟花历史两次带星,一次带帽(21年5月摘星)带帽原因否定意见的审计报告,年报保
币圈危机持续发酵!多家大机构踩雷,红杉认栽见习记者周倬睿FTX破产危机还在持续发酵!币安宣布不再继续收购FTX后,币圈普遍认为FTX的财务窟窿或已无法弥补,FTX流动性枯竭成定局,币圈雷曼时刻已至。多家知名外资大机构踩雷F
直播清流遇上大国质造,京东京造与东方甄选联手带货今天是我们出圈5个月的日子,感触很多,也希望为大家带来更多的惊喜。在11月9日的东方甄选直播间中,主播董宇辉这样说道。当日,由京东京造冠名的京造好物甄选会不期而至。从纯水湿巾,到杂
最新胡润百富榜发布,12位富豪家住湖北近日,胡润研究院发布2022胡润百富榜,农夫山泉68岁的浙商钟睒睒财富比去年增长650亿元,以4550亿元第二次成为中国首富,字节跳动的张一鸣和宁德时代的曾毓群分列二三名。榜单上湖