You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

计算在一系列交换操作后,每个节点所占据的唯一位置数量的问题。

问题描述: 给定一个长度为n的数组arr,数组中的元素为0至n-1之间的整数。一开始,每个节点处于初始位置i(arr[i] = i)。现在,对数组进行一系列交换操作,交换arr[i]和arr[j]的位置。要求计算在交换操作后,每个节点所占据的唯一位置数量。

解决方法: 可以使用并查集(Union Find)数据结构来解决这个问题。

步骤如下:

  1. 初始化并查集,将每个节点的父节点设置为自身。
  2. 遍历数组arr,对于每个节点i,进行以下操作: a. 如果arr[i] == i,说明节点i仍然在初始位置,将其所占据的唯一位置数量设置为1。 b. 否则,将节点i与arr[i]进行合并操作,将节点i的父节点设置为arr[i]的父节点,同时将arr[i]的父节点的所占据的唯一位置数量加1。
  3. 遍历数组arr,对于每个节点i,如果节点i的父节点是自身,说明节点i所占据的位置是唯一的,将唯一位置的数量加1。
  4. 返回所有节点的唯一位置数量。

代码示例(Java):

class Solution {
    public int uniquePositionCount(int[] arr) {
        int n = arr.length;
        int[] parent = new int[n];
        int[] count = new int[n];
        for (int i = 0; i < n; i++) {
            parent[i] = i;
            count[i] = 1;
        }
        
        for (int i = 0; i < n; i++) {
            int rootI = find(parent, i);
            if (arr[i] == i) {
                // Node i is still in its initial position
                count[rootI] = 1;
            } else {
                int rootJ = find(parent, arr[i]);
                if (rootI != rootJ) {
                    parent[rootI] = rootJ;
                    count[rootJ] += count[rootI];
                }
            }
        }
        
        int uniqueCount = 0;
        for (int i = 0; i < n; i++) {
            if (parent[i] == i) {
                uniqueCount++;
            }
        }
        
        return uniqueCount;
    }
    
    private int find(int[] parent, int i) {
        if (parent[i] != i) {
            parent[i] = find(parent, parent[i]);
        }
        return parent[i];
    }
}

以上代码使用了路径压缩的优化方式来加速并查集的查找操作。

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

万字长文带你漫游数据结构世界|社区征文

(https://baike.baidu.com/item/计算机/140338)存储、组织[数据](https://baike.baidu.com/item/数据)的方式。数据结构是指相互之间存在一种或多种特定关系的[数据元素](https://baike.baidu.com/item/数据元素/71... 一般不需要的节点我们需要置空,比如 `node = null`, 如果在`C++` 程序中,那么就需要手动回收了,否则容易造成内存泄漏等问题。复杂链表的操作暂时讲到这里,后面我会单独把链表这一块的数据结构以及常用算法单独...

golang pprof

profiling一般翻译为画像。在互联网中,各个app一般都会有自己的用户画像,用户画像会包含年龄、性别、视频偏好等多项特征,从而更方便的为用户去推荐用户可能会感兴趣的内容。而计算机领域的profile指的就是进程的运... 以protobuf格式输出top的每个节点 || traces | 以文本格式输出所有的profile样本 || tree | 输出函数调用栈 ...

干货 | 基于ClickHouse的复杂查询实现与优化

如果右表是一张大表,构建也会比较慢。针对构建问题,近期社区也进行了一些右表并行构建的优化,数据按照Join key进行Split来并行地构建多个Hash Table,但额外的代价是左右表都需要增加一次Split操作。**第三类,则... 并且其生成的Pipeline在一些case下并不能充分并行。因此在某些场景下,难以发挥集群的全部资源。随着企业业务复杂度的不断提升,复杂查询,特别是有多轮的分布式Join,且有很多agg的计算的需求会越来越强烈。在这种...

Go 生态下的字节跳动大规模微服务性能优化实践

字节跳动的在线微服务类型数量已超过 10 万。但作为一家快速发展的企业,字节特殊的内部业务场景也对微服务落地提出了一些挑战,如:* **大规模**:一是集群规模非常大,二是业务的领域比较广泛,业务领域涵盖了短视频、内容推荐、电商等各类场景;* **快迭代**:一是演进速度快,很多新特性被很快发布出来,二是新技术演进快,开发者乐于学习使用新技术;* **多语言**:字节内部的服务以 Go 语言为主,占据 55% 以上,同时兼容了...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

计算在一系列交换操作后,每个节点所占据的唯一位置数量的问题。-优选内容

万字长文带你漫游数据结构世界|社区征文
(https://baike.baidu.com/item/计算机/140338)存储、组织[数据](https://baike.baidu.com/item/数据)的方式。数据结构是指相互之间存在一种或多种特定关系的[数据元素](https://baike.baidu.com/item/数据元素/71... 一般不需要的节点我们需要置空,比如 `node = null`, 如果在`C++` 程序中,那么就需要手动回收了,否则容易造成内存泄漏等问题。复杂链表的操作暂时讲到这里,后面我会单独把链表这一块的数据结构以及常用算法单独...
golang pprof
profiling一般翻译为画像。在互联网中,各个app一般都会有自己的用户画像,用户画像会包含年龄、性别、视频偏好等多项特征,从而更方便的为用户去推荐用户可能会感兴趣的内容。而计算机领域的profile指的就是进程的运... 以protobuf格式输出top的每个节点 || traces | 以文本格式输出所有的profile样本 || tree | 输出函数调用栈 ...
干货 | 基于ClickHouse的复杂查询实现与优化
如果右表是一张大表,构建也会比较慢。针对构建问题,近期社区也进行了一些右表并行构建的优化,数据按照Join key进行Split来并行地构建多个Hash Table,但额外的代价是左右表都需要增加一次Split操作。**第三类,则... 并且其生成的Pipeline在一些case下并不能充分并行。因此在某些场景下,难以发挥集群的全部资源。随着企业业务复杂度的不断提升,复杂查询,特别是有多轮的分布式Join,且有很多agg的计算的需求会越来越强烈。在这种...
Go 生态下的字节跳动大规模微服务性能优化实践
字节跳动的在线微服务类型数量已超过 10 万。但作为一家快速发展的企业,字节特殊的内部业务场景也对微服务落地提出了一些挑战,如:* **大规模**:一是集群规模非常大,二是业务的领域比较广泛,业务领域涵盖了短视频、内容推荐、电商等各类场景;* **快迭代**:一是演进速度快,很多新特性被很快发布出来,二是新技术演进快,开发者乐于学习使用新技术;* **多语言**:字节内部的服务以 Go 语言为主,占据 55% 以上,同时兼容了...

计算在一系列交换操作后,每个节点所占据的唯一位置数量的问题。-相关内容

工业大数据分析与应用——知识总结 | 社区征文

操作系统、基础软件、IT支撑等。#### 1.1.4 大数据的发展历程### 1.2 大数据的概念与特点* 概念:**大数据(Big data)**,指无法在一定时间范围内**用常规软件工具**进行捕捉、管理 和处理的数据集合,是**需... 可以从**完善的计算机基础设施**获得服务 * **按照自己需求**向云计算服务商租用 * 根据**自己的业务需要**增大或减少租用设备的性能和数量,灵活方便,节省费用* PaaS:将**软件研发的平台**作为一种服务,以**S...

Cloud Shuffle Service 在字节跳动 Spark 场景的应用实践

同时,大家可以看到,Reduce 进行的 Shuffle Fetch 请求整体看是一个网状结构,也就是说会存在大量的网络请求,量级大概是 M 乘以 R,这个请求的数量级也是非常大的。这两个问题随着作业规模的扩大,会带来越来越严重的 Shuffle Failure 问题。Shuffle Failure 意味着超时,Shuffle Failure 本身还有可能导致 Stage 重算,甚至导致作业失败,严重影响批式作业的稳定性,同时还会浪费大量的计算资源(因为 Fetch 等待超时的时候,CPU 是...

基于 Flink 构建实时数据湖的实践

火山引擎云原生计算团队本文整理自火山引擎云原生计算研发工程师王正和闵中元在本次 CommunityOverCode Asia 2023 数据湖专场中的《基于 Flink 构建实时数据湖的实践》主题演讲。实时数据湖是... 怎么在一个作业里写多种 Schema 数据?第一个问题的解决办法可以在 Flink CDC Connector 中可以为每条记录设置包含 Schema 信息。所以我们需要实现一个反序列化方法,输出一条记录,包含 Row 和它对应的 Schema ...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

ByConity 0.3.0 版本发布,支持倒排索引等新特性

并且可以减少一些过滤条件的计算开销。为 ByConity 增加倒排索引的支持主要包括写入 / 读取链路的修改——* **写入链路的修改** 主要包括写入时根据列数据生成倒排索引,并写到远端存储;* **读取链路的修改*... 用节点的定期 Get 轮询去模拟 Linux 内核的线程唤醒通知机制,我们就可以用 ByConity 所使用的高可用 KV 存储,通过模拟 CAS 操作去同步多节点之间对“谁是 leader”这个问题答案的竞争: **谁 CAS 成功谁就是 leade...

系统集成在一些特定行业的相关概念

一个大型的综合计算机网络系统,系统集成包括软件、硬件、操作系统技术、数据库技术、网络通讯技术等的集成,以及不同厂家产品选型,搭配的集成,系统集成所要达到的目标整体性能最优,即所有部件和成分合在一起后不但能... 即在物流应用产生文件的时候无法保证集成应用不去修改;2、通信问题,即文件产生后怎么通知集成应用的问题;3、集成系统之间信息不同步。文件共享传输方式的优势:1、在信息交换不是很频繁,而且对于信息的及时...

ELT in ByteHouse 实践与展望

然后进行一系列的数仓的ETL操作,提供给OLAP系统完成分析查询。但有些业务需要从上述的存储中做一个分支,因此会在数据分析的某一阶段,从整体链路中将数据导出,做一些不同于主链路的ETL操作,会出现两份数据存储。其次在这过程中也会出现两套不同的ETL逻辑。当数据量变大,计算冗余以及存储冗余所带来的成本压力也会愈发变大,同时,存储空间的膨胀也会让弹性扩容变得不便利。## 复杂场景从OLAP场景扩展出去,随着数据量的增长和...

「火山引擎」数据中台产品双月刊 VOL.04

在社区版本 MaterializeMySQL 库引擎的基础上支持了集群模式(Distributed_mode),支持将 MySQL 中的库同步到集群并自动分布到每个节点。 - 新增导入数据源:Hive 数据源导入,ClickHosue 数据源导入。... 帮助用户节约计算资源。![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/75e1042c072d4b57a02f115068aec908~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1714321...

ByConity 0.3.0 版本发布,支持倒排索引等新特性

并且可以减少一些过滤条件的计算开销。为 ByConity 增加倒排索引的支持主要包括写入 / 读取链路的修改——- **写入链路的修改**主要包括写入时根据列数据生成倒排索引,并写到远端存储;- **读取链路的修改... 用节点的定期 Get 轮询去模拟 Linux 内核的线程唤醒通知机制,我们就可以用 ByConity 所使用的高可用 KV 存储,通过模拟 CAS 操作去同步多节点之间对“谁是 leader”这个问题答案的竞争:**谁 CAS 成功谁就是 leader*...

Flink OLAP 在字节跳动的查询优化和落地实践

在存算分离架构下,算子下推是一类非常重要的优化。核心思路是尽可能的将一些算子下推到存储层进行计算,大幅减少 Scan 的数据量,降低外部的 IO,同时也能够减少 Flink 引擎需要处理的数据量,从而明显提升 Query 的性能。 **TopN 下推:** 在字节内部的一个典型业务上,大部分 Query 都是取 TopN 的数据。通过支持 TopN 的下推优化,把 Local SortLimit 算子,也就是 Local 的 TopN 算子,下推到了 Scan 节点,最终在存储层做 TopN 计...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询