京东第一题(暴力解法)

先建立邻接矩阵,然后矩阵每一行当作一个key放map里,value是Set,存行号 同一个集合的元素,这个元素标识的每一行肯定是相同的(可以自己画图看看) 之后遍历每一个key,遍历到key中为1的位置,查看对应Set中是否存在这个元素,若存在则错误。然后遍历另外的key和set,对于其他set的每一个元素,当前key对应下标是必须为1的。

public class Main {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int time = in.nextInt();
int index = 0;
while(index++ < time){
int N = in.nextInt();
int M = in.nextInt();
int mIndex = 0;
int[][] arr = new int[N][N];
while(mIndex < M){
int i = in.nextInt();
int j = in.nextInt();
arr[i-1][j-1] = 1;
arr[j-1][i-1] = 1;
mIndex++;
}
Map<String,Set<Integer>> map = new HashMap<String,Set<Integer>>();
for(int i = 0; i < N; i++){
StringBuilder str = new StringBuilder();
for(int j = 0; j < N; j++){
str.append(arr[i][j]);
}
if(!map.containsKey(str.toString())){
Set<Integer> set = new HashSet<Integer>();
set.add(i);
map.put(str.toString(), set);
}else{
Set<Integer> set = map.get(str.toString());
set.add(i);
}
}
boolean b = true;
for(Map.Entry<String, Set<Integer>> entry : map.entrySet()){
String key = entry.getKey();
Set<Integer> set = entry.getValue();
for(int i = 0; i < N; i++){
if(key.charAt(i) == '1'){
if(set.contains(i)){
b = false;
break;
}
}
}
if(!b){
break;
}
for(Map.Entry<String, Set<Integer>> otherEntry : map.entrySet()){
String otherKey = otherEntry.getKey();
if(key != otherKey){
Set<Integer> otherSet = otherEntry.getValue();
for(int otherNum : otherSet){
if(key.charAt(otherNum) == '0'){
b = false;
break;
}
}
}
if(!b)
break;
}
}
if(b)
System.out.println("Yes");
else
System.out.println("No");
}
}

}

#笔试题目##京东#
全部评论
大哥 你的答案真好看
点赞 回复 分享
发布于 2018-09-09 21:36

相关推荐

买蜜雪也用卷:我觉得应该没有哪个人敢说自己熟练使用git,代码分支一复杂还是得慢慢寻思一下的,不过基本的拉代码提交代码还有分支什么的是应该会
点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务