现有n个人,每个人有一个唯一的数字作为标签,标签数字的范围:1~n;为了统计分组情况,有人提议有分组意愿的人提交一个数字,表示其会和以该数字为标签的人分到一组。

现在知道每个人的选择,您能统计出一共有多少个小组吗?

注意:1和2一组,2和3一组,那么1,2,3属于一组。默认为自己一定和自己一组。

输入:

第一行:n(表示n个人,1<=n<=100000)

第二行:n个数(1<=a[i]<=100000)

输出:

输出一个整数,表示最终这些人被分成了多少个小组

样例输入:

5

1 3 4 2 1

样例输出:

2

思路:

比如说有r个分组:1、2、3......r,就把第r组中第一个人(也就是组r中序号最小的一位)的组数设为r,之后该组的所有人的组数都设为和第一个人的一样(相当于没棵树代表一个集合,每个集合中的成员每次都指向根节点);这样,当第i+1个人时,只需看第i个人提交的序号代表的那个人是第几组,就将其改为第几组就行了。那上面示例距离,比如a[2]=3,将其与a[2]=2比较,取最小值,即a[2]=2,那么将a[3]=2。每次都取最小值即可。

代码如下:

import java.util.HashMap;
import java.util.Scanner;public class TeamGroup2 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n =in.nextInt();int[] a = new int[n+1];HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();for(int i=1;i<=n;i++){a[i]=in.nextInt();}//使得每次都指向根节点for(int i=1;i<=n;i++){a[a[i]]=Math.min(i, a[a[i]]);a[i]=Math.min(i, a[a[i]]);if(a[a[i]] < a[i])a[i]=a[a[i]];}for(int i=1;i<=n;i++){System.out.println(a[i]);}for(int i=1;i<=n;i++){if(!map.containsKey(a[i]))map.put(a[i], i);}System.out.println(map.size());}
}

下面思路差不多,另一种写法,可能比较好理解一点:

import java.util.Scanner;public class TeamGroup {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n =in.nextInt();int[] a = new int[n+1];int temp=0;int ans=n;for(int i=1;i<=n;i++){a[i]=i;}for(int i=1;i<=n;i++){temp=in.nextInt();ans=Union(i,temp,a,ans);}System.out.println(ans);}private static int Union(int x, int y,int[] a,int an) {int fx = find(x,a);int fy = find(y,a);if(fx < fy){a[fy] = fx;an--;}else if(fx > fy){a[fx] = fy;an--;}return an;}private static int find(int x,int[] a) {if(x != a[x]){a[x] = find(a[x], a);}return a[x];}
}

笔试题——团队活动分组相关推荐

  1. 尚书视频群活动:投资分析师笔试题

    跨界知识聚会系列文章,"知识是用来分享和传承的",各种会议.论坛.沙龙都是分享知识的绝佳场所.我也有幸作为演讲嘉宾参加了一些国内的大型会议,向大家展示我所做的一些成果.从听众到演讲 ...

  2. Java相邻数值后比大小后并分组_笔试题:给出一个数组,排序后,取相邻两值差的最大值...

    ε=(´ο`*)))   一个笔试题,就这样了,不想优化了   能出答案就行 import java.util.Scanner; /** * 需求:给出一个数组,排序后,取相邻两值差的最大值 */ p ...

  3. 软件测试工程师笔试题带答案(二)

    如何对web系统进行全面测试? 一. 功能测试 1.链接测试 链接是Web应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段.链接测试可分为三个方面.首先,测试所有链 ...

  4. 【银行笔试题】技术+业务,综合题类

    测试工程师笔试题 1.B 2.B 3.B 4.B 5.C 6.B 7.C 8.A 9.C 10.C 11.A 12.C 13.D 14.B 15.C 16.D 17.D 18.C 19.B 20.A ...

  5. 数字IC笔试题---千题解,量大管饱,图文并茂

    前言 出笔试题汇总,是为了总结秋招可能遇到的问题,做题不是目的,在做题的过程中发现自己的漏洞,巩固基础才是目的. 所有题目结果和解释由笔者给出,答案主观性较强,若有错误欢迎评论区指出,资料整理来自于& ...

  6. Java面试题(一)100家大公司java笔试题汇总

    Java考试题 一:单选题 -– 1.下列哪一种叙述是正确的(D ) A. abstract修饰符可修饰字段.方法和类 B. 抽象方法的body部分必须用一对大括号{ }包住 C. 声明抽象方法,大括 ...

  7. 100家大公司java笔试题汇总

    NHN CHINA公司笔试题 1.在这写代码 Var array1 = [10,20]; Var array2 = [8,5]; Var result = array1.add(array2); Al ...

  8. ⑪(面试篇 2/3)、《史上最全iOS八股文面试题》2022年,金三银四我为你准备了,iOS《1000条》笔试题以及面试题(包含答案)。带面试你过关斩将,(赶紧过来背iOS八股文)

    iOS面试题 一共分为笔试题和面试题两部分 笔试题 一共分为10个 总共613题 面试题 一共400题 笔试题 一个10个系列 分别为 ①(语法篇) 共147题 已更新 ②(常识篇) 共72题 已更新 ...

  9. JAVA面试、笔试题

    @[TOC]目录 JAVA面试.笔试题 @目录 一. CoreJava部分 7 1. java中有哪些基本类型? 7 2. java反射 7 3. 易错,理解题 7 4. Java有几种创建对象的方法 ...

  10. 互联网公司招聘--去哪儿--产品运营--2014年笔试题

    互联网公司招聘–去哪儿–产品运营–2014年笔试题 互联网公司招聘–去哪儿–产品运营–2014年笔试题 互联网公司招聘–去哪儿–产品运营–2014年笔试题 1.如果你是旅游产品经理,怎么保证你的用户评 ...

最新文章

  1. 业界丨全球AI人才只有2万多,但仅3000人在求职
  2. window 下Eclipse c++的开发环境配置
  3. [收藏]为DataGrid添加CheckBox控件
  4. 数据集的使用方法和技巧
  5. SAP采购订单抬头、行项目屏幕增强的两种方法
  6. C语言学习之用函数处理,而且用指针类型的数据作函数参数,对输入的两个整数按大小顺序输出
  7. 建立代理,而不是框架
  8. 【转载】shell实例手册
  9. CentOS 7上搭建Spark 3.0.1 + Hadoop 3.2.1分布式集群
  10. java设计模式刘伟模拟题答案,灵魂拷问
  11. 22.搜索大纲及重定向(Search Synonyms and Re-directs)
  12. 如何设置电脑减少服务器响应时间,电脑反应慢,软件响应时间长原因分析和解决办法...
  13. 【生信MOOC】生信数据库1
  14. 新高考如何选科?职引教你一招简单又直接的方法
  15. 全文检索技术Lucene
  16. 优化 | Pick and delivery problem的简介与建模实现(二)
  17. OA系统中如何实现合同管理?
  18. 立场开源 | 电动锡膏挤出器
  19. 欧几里得及欧几里得扩展算法
  20. 【马仔创业记】一只猴子的创业独白(5)心理咨询行业痛点分析

热门文章

  1. android的EditText字数检测和限制
  2. php微信支付宝第三方接口开发平台,帝国CMS第三方个人支付接口微信支付宝免签约即时到账api_帝国网站管理系统插件...
  3. pyinstaller里居然有木马?
  4. 用命令提示符打开MySQL并编译sql语句
  5. Smartbi报表工具二次开发和集成能力怎么样?
  6. 忽现的Mybatis foreach 失效记录.
  7. PIE二次开发(一)入门介绍及环境搭建
  8. Blowfish加密算法
  9. PHP 视频格式转换类
  10. 小小总结之渗透测试面试题以及答案