今日头条 java笔试题_今日头条笔试第一题
今日头条笔试第一题
思路:简单的集合合并
合并策略:初始自己是一个集合,集合个数为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笔试题_今日头条笔试第一题相关推荐
- 京东校招java笔试题_2017京东校招笔试编程题:进制转换、辗转相除
题目描述 时间限制:C/C++语言 1000MS 其他语言:3000MS 内存限制:C/C++语言 65536KB 其他语言:589824KB 题目内容:尽管是一个CS专业的学生,小B的数学基础很好并 ...
- java笔试题_公司真题 | 用友2018秋招Java笔试题(四)
公司真题 | 用友2018秋招Java笔试题(三)答案: 1.正确答案 A B 2.正确答案 A 3.正确答案 D 4.正确答案 B 5.正确答案 A E 6.正确答案 B 7.正确答案 C D 8. ...
- 用友2020校招java笔试题_用友Java类笔试题大全
如下为大家汇总的是一份用友Java类笔试题,欢迎大家关注! 1.Hashtable和HashMap有什么区别? a.Hashtable是继承自陈旧的Dictionary类的,HashMap继承自Abs ...
- java笔试题_一道简单的 Java 笔试题,但值得很多人反思
专注于Java领域优质技术,欢迎关注 作者:匿蟒 前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问 ...
- 2017年java笔试题_初级java程序员笔试题
Java认证考试是业界唯一经Sun授权的Java认证,考试内容涉及所有Java相关知识.编程概念及applet开发技巧.下面是小编整理的关于java初级程序员面试题,欢迎大家参考! 一:判断题 1.J ...
- 中软融鑫 java笔试题_中软国际java笔试题
中软国际Java程序员笔试题 Java程序员笔试题 1.谈谈final, finally, finalize的区别. 2.Anonymous Inner Class (匿名内部类) 是否可以exten ...
- 中科曙光Java笔试题_中科金财Java开发工程师笔试题的(带答案).docx
中科金财Java开发工程师笔试题的(带答案) Java开发工程师笔试试题(请不要在试题上留任何痕迹,所有答案均写在答题纸上)编程题(共26分)任意写出一种排序算法.(6分)public void so ...
- 中软融鑫 java笔试题_中软融鑫2014校招java开发工程师笔试题
如果你想要应聘中软融鑫的java开发工程师岗位,小编下面分享的内容就是中软融鑫2014校招所考的试题,感兴趣的朋友赶紧收藏吧! 一.选择题 1.下列表达式正确的()? A.byte b = 128; ...
- 中国人民银行计算机招聘笔试题和答案(笔试真题)
中国人民银行计算机招聘面试题(笔试真题) 试题一 网络基础 1.计算机网络是______________与______________相结合的产物. 2.按计算机连网的区域大小,我们可以把网络分为__ ...
- 京东校招java笔试题_京东2018校招技术笔试编程题汇总
1.回文 分析 暴力枚举一下check回文,可以确定出最后答案的一半,就可以得到答案了. 参考代码 #include using namespace std; bool isPalindrome(st ...
最新文章
- python变量类型之间转换_Python变量赋值类型转换
- ASP.NET MVC3 读书笔记三(Html辅助方法下)
- ML之LiR:机器学习经典算法之线性回归算法LiR的简介、使用方法、经典案例之详细攻略
- linux ubuntu16.04 Clion 安装及快捷方式创建
- JS对象变量、闭包的一些问题
- 77 行代码实现 ABAP ALV 中的双击事件处理
- python os.system关闭log_又到牛市!带你学习一个python强大证券数据分析工具
- 小甲鱼python全部视频_小甲鱼全套教程之Python系列视频教程
- 2020 大厂研发岗薪酬排名出炉,看完我真的拖后腿了。。。
- vue watch 修改滚动条_Vue.js 中滚动条始终定位在底部的方法
- oracle如何判断奇数偶数_堆垒素数论之旅(1):奇数哥德巴赫猜想
- 记2014“蓝桥杯全国软件大赛quot;决赛北京之行
- 苏宁大数据怎么运营_苏宁易购的经营模式
- C#不区分大小写的字符串替换(Replace)
- 白话SOA:面向服务+组件+架构
- 解决U盘插入我的电脑中不显示
- 解耦模式--服务定位器
- 机器人学——3.2-正运动学
- echarts柱状图的宽度
- 从安卓/linux固件反编译出dtb和dts