【Leetcode】2471. Minimum Number of Operations to Sort a Binary Tree by Level
admin
2024-01-30 01:34:07
0

题目地址:

https://leetcode.com/problems/minimum-number-of-operations-to-sort-a-binary-tree-by-level/description/

给定一个值互不相等的二叉树,可以对每一行进行重排,重排的过程中每一步允许交换两个节点的值,问要将整棵树的每一行都变成严格单调增,至少需要多少步。

问题最后划归为,给定一个数字各不相同的数组AAA,允许交换两个数的位置,要将其升序排列至少需要多少步。这是个经典的数学问题。先将AAA进行保序离散化,最小值离散化为000(为111也可以,如果为111那就将离散化之后的数组视为1∼n1\sim n1∼n上的置换。为000则视为0∼n−10\sim n-10∼n−1上的置换),将AAA视为一个置换,如果其恰好是一个轮换,那么最少交换次数即为这个轮换的长度减111(即元素个数减111)证明可以参考https://blog.csdn.net/qq_46105170/article/details/119366423。如果AAA不是一个轮换而是多个轮换的乘积,则交换次数即为每个轮换的元素减111再求总和。代码如下:

class Solution {public:int minimumOperations(TreeNode* root) {if (!root) return 0;int res = 0;queue q;q.push(root);while (q.size()) {vector v, ids;for (int i = q.size(); i--;) {auto t = q.front();q.pop();v.push_back(t->val);ids.push_back(ids.size());if (t->left) q.push(t->left);if (t->right) q.push(t->right);}sort(ids.begin(), ids.end(), [&](int i, int j) { return v[i] < v[j]; });for (int i = 0; i < ids.size(); i++) {if (ids[i] == -1) continue;int x = ids[i], len = 0;while (~ids[x]) {len++;int y = x;x = ids[y];ids[y] = -1;}res += len - 1;}}return res;}
};

时间复杂度O(∑inilog⁡ni)O(\sum_i n_i\log n_i)O(∑i​ni​logni​),nin_ini​为二叉树每一行的节点个数,空间O(n)O(n)O(n),nnn为节点总个数。

相关内容

热门资讯

专业师傅教你“欢聚茶室到底有挂... 欢聚茶室辅助是一款专注玩家量身打造的游戏记牌类型软件,在皮皮胡子辅助这款游戏中我们可以记录下每张牌的...
专业师傅教你“新百道到底有挂吗... 专业师傅教你“新百道到底有挂吗?其实是有挂(揭秘手机上必赢技巧)1、让任何用户在无需AI插件第三方神...
专业师傅教你“奕福麻将到底有挂... 现在人们打麻将谁不想赢?但是手机麻将是这么好赢的吗?在手机上打麻将想赢,不仅需要运气,也需要技巧。掌...
专业师傅教你“丁丁麻将到底有挂... 现在人们打麻将谁不想赢?但是手机麻将是这么好赢的吗?在手机上打麻将想赢,不仅需要运气,也需要技巧。掌...
专业师傅教你“乐易四川麻将到底... 专业师傅教你“乐易四川麻将到底有挂吗?其实是有挂(揭秘手机上必赢技巧)是一款可以让一直输的玩家,快速...
专业师傅教你“万盛竞技到底有挂... 自定义万盛竞技系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是想分...
专业师傅教你“好友跑得快到底有... 自定义好友跑得快系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是想...
专业师傅教你“波特互娱到底有挂... 自定义波特互娱系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是想分...
专业师傅教你“喜乐川南棋牌到底... 喜乐川南棋牌辅助是一款专注玩家量身打造的游戏记牌类型软件,在皮皮胡子辅助这款游戏中我们可以记录下每张...
专业师傅教你“多乐山东麻将到底... 多乐山东麻将辅助是一款专注玩家量身打造的游戏记牌类型软件,在皮皮胡子辅助这款游戏中我们可以记录下每张...
专业师傅教你“金花互娱到底有挂... 金花互娱辅助是一款专注玩家量身打造的游戏记牌类型软件,在皮皮胡子辅助这款游戏中我们可以记录下每张牌的...
专业师傅教你“掌上风云到底有挂... 现在人们打麻将谁不想赢?但是手机麻将是这么好赢的吗?在手机上打麻将想赢,不仅需要运气,也需要技巧。掌...
专业师傅教你“南通长牌到底有挂... 专业师傅教你“南通长牌到底有挂吗?其实是有挂(揭秘手机上必赢技巧)1、让任何用户在无需AI插件第三方...
专业师傅教你“纸蛙盐城麻将到底... 您好,纸蛙盐城麻将这款游戏可以开挂的,确实是有挂的,需要了解{请加QQ群客服咨询:107507578...
专业师傅教你“小小艺术家到底有... 专业师傅教你“小小艺术家到底有挂吗?其实是有挂(揭秘手机上必赢技巧)一、小小艺术家AI软件牌型概率发...
专业师傅教你“乐伴到底有挂吗?... 亲,乐伴这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,乐伴的开挂软件,名称叫乐伴...
专业师傅教你“心悦麻将到底有挂... 专业师傅教你“心悦麻将到底有挂吗?其实是有挂(揭秘手机上必赢技巧)1、让任何用户在无需AI插件第三方...
专业师傅教你“福建十三道到底有... 您好:福建十三道确实真的有挂,软件请加QQ群客服咨询:1075075785确实是有挂的,很多玩家在这...
专业师傅教你“启航竞技到底有挂... 现在人们打麻将谁不想赢?但是手机麻将是这么好赢的吗?在手机上打麻将想赢,不仅需要运气,也需要技巧。掌...
专业师傅教你“南门口到底有挂吗... 专业师傅教你“南门口到底有挂吗?其实是有挂(揭秘手机上必赢技巧)1、让任何用户在无需AI插件第三方神...