今日头条笔试第一题

思路:简单的集合合并

合并策略:初始自己是一个集合,集合个数为n;

遍历第i名同学————第n名同学,i同学和他朋友们依次判断是否是一个集合,如果没在一个集合,进行合并,n--;

数据结构:并查集结构

import java.util.*;

public class Main {

public static class Node {

public Set friends = new HashSet<>();

}

public static HashMap fatherMap;

public static HashMap sizeMap;

public static void main(String[] args) {

//1、输入数据,组织数据结构

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

if (n <= 0 || n >= 100000) {

System.out.println(0);

return;

}

Node[] nodes = new Node[n + 1];

int tmp;

fatherMap = new HashMap();

sizeMap = new HashMap();

for (int i = 1; i <= n; ++i) {

nodes[i] = new Node();

fatherMap.put(nodes[i], nodes[i]);

sizeMap.put(nodes[i], 1);

while ((tmp = sc.nextInt()) != 0) {

nodes[i].friends.add(tmp);

}

}

//2、遍历每个节点,根据合并策略进行合并

for (int i = 1; i < nodes.length; i++) {

if (nodes[i].friends.size() == 0) continue;

for (Iterator iterator = nodes[i].friends.iterator(); iterator.hasNext(); ) {

Integer one = iterator.next();

if (!isSameSet(nodes[i], nodes[one])) {

union(nodes[i], nodes[one]);

n--;

}

}

}

//3、result

System.out.println(n);

}

private static Node findHead(Node node) {

Node father = fatherMap.get(node);

if (father != node) {

father = findHead(father);

}

fatherMap.put(node, father);

return father;

}

public static boolean isSameSet(Node a, Node b) {

return findHead(a) == findHead(b);

}

public static void union(Node a, Node b) {

if (a == null || b == null) {

return;

}

Node aHead = findHead(a);

Node bHead = findHead(b);

if (aHead != bHead) {

int aSetSize = sizeMap.get(aHead);

int bSetSize = sizeMap.get(bHead);

if (aSetSize <= bSetSize) {

fatherMap.put(aHead, bHead);

sizeMap.put(bHead, aSetSize + bSetSize);

} else {

fatherMap.put(bHead, aHead);

sizeMap.put(aHead, aSetSize + bSetSize);

}

}

}

}

今日头条 java笔试题_今日头条笔试第一题相关推荐

  1. 京东校招java笔试题_2017京东校招笔试编程题:进制转换、辗转相除

    题目描述 时间限制:C/C++语言 1000MS 其他语言:3000MS 内存限制:C/C++语言 65536KB 其他语言:589824KB 题目内容:尽管是一个CS专业的学生,小B的数学基础很好并 ...

  2. java笔试题_公司真题 | 用友2018秋招Java笔试题(四)

    公司真题 | 用友2018秋招Java笔试题(三)答案: 1.正确答案 A B 2.正确答案 A 3.正确答案 D 4.正确答案 B 5.正确答案 A E 6.正确答案 B 7.正确答案 C D 8. ...

  3. 用友2020校招java笔试题_用友Java类笔试题大全

    如下为大家汇总的是一份用友Java类笔试题,欢迎大家关注! 1.Hashtable和HashMap有什么区别? a.Hashtable是继承自陈旧的Dictionary类的,HashMap继承自Abs ...

  4. java笔试题_一道简单的 Java 笔试题,但值得很多人反思

    专注于Java领域优质技术,欢迎关注 作者:匿蟒 前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问 ...

  5. 2017年java笔试题_初级java程序员笔试题

    Java认证考试是业界唯一经Sun授权的Java认证,考试内容涉及所有Java相关知识.编程概念及applet开发技巧.下面是小编整理的关于java初级程序员面试题,欢迎大家参考! 一:判断题 1.J ...

  6. 中软融鑫 java笔试题_中软国际java笔试题

    中软国际Java程序员笔试题 Java程序员笔试题 1.谈谈final, finally, finalize的区别. 2.Anonymous Inner Class (匿名内部类) 是否可以exten ...

  7. 中科曙光Java笔试题_中科金财Java开发工程师笔试题的(带答案).docx

    中科金财Java开发工程师笔试题的(带答案) Java开发工程师笔试试题(请不要在试题上留任何痕迹,所有答案均写在答题纸上)编程题(共26分)任意写出一种排序算法.(6分)public void so ...

  8. 中软融鑫 java笔试题_中软融鑫2014校招java开发工程师笔试题

    如果你想要应聘中软融鑫的java开发工程师岗位,小编下面分享的内容就是中软融鑫2014校招所考的试题,感兴趣的朋友赶紧收藏吧! 一.选择题 1.下列表达式正确的()? A.byte b = 128; ...

  9. 中国人民银行计算机招聘笔试题和答案(笔试真题)

    中国人民银行计算机招聘面试题(笔试真题) 试题一 网络基础 1.计算机网络是______________与______________相结合的产物. 2.按计算机连网的区域大小,我们可以把网络分为__ ...

  10. 京东校招java笔试题_京东2018校招技术笔试编程题汇总

    1.回文 分析 暴力枚举一下check回文,可以确定出最后答案的一半,就可以得到答案了. 参考代码 #include using namespace std; bool isPalindrome(st ...

最新文章

  1. python变量类型之间转换_Python变量赋值类型转换
  2. ASP.NET MVC3 读书笔记三(Html辅助方法下)
  3. ML之LiR:机器学习经典算法之线性回归算法LiR的简介、使用方法、经典案例之详细攻略
  4. linux ubuntu16.04 Clion 安装及快捷方式创建
  5. JS对象变量、闭包的一些问题
  6. 77 行代码实现 ABAP ALV 中的双击事件处理
  7. python os.system关闭log_又到牛市!带你学习一个python强大证券数据分析工具
  8. 小甲鱼python全部视频_小甲鱼全套教程之Python系列视频教程
  9. 2020 大厂研发岗薪酬排名出炉,看完我真的拖后腿了。。。
  10. vue watch 修改滚动条_Vue.js 中滚动条始终定位在底部的方法
  11. oracle如何判断奇数偶数_堆垒素数论之旅(1):奇数哥德巴赫猜想
  12. 记2014“蓝桥杯全国软件大赛quot;决赛北京之行
  13. 苏宁大数据怎么运营_苏宁易购的经营模式
  14. C#不区分大小写的字符串替换(Replace)
  15. 白话SOA:面向服务+组件+架构
  16. 解决U盘插入我的电脑中不显示
  17. 解耦模式--服务定位器
  18. 机器人学——3.2-正运动学
  19. echarts柱状图的宽度
  20. 从安卓/linux固件反编译出dtb和dts

热门文章

  1. python爬虫:获取12306网站火车站对应三字码
  2. Python 爬取4K美女图片
  3. WPS 2005看起来还是蛮不错的
  4. ElasticJob 快速上手
  5. 小白必看的经典机器学习入门项目
  6. Ubuntu ADB 环境变量配置
  7. ie tab chrome_将IE Tab集成添加到Google Chrome
  8. 米思齐 Mixly 解决函数模块无法上下连接。
  9. Linux rpm 命令使用详解
  10. 遗传算法(一) 遗传算法的基本原理