笔试刷题-拼多多

题目描述:

给出一个是否为朋友的矩阵输入用逗号分隔, isFriend[i][j]==1表示为朋友,否则不是朋友;

找出一对i, j使得i, j不是直接朋友,但是i,j有共同的朋友,求这种共同的朋友数量最多的情况即可。

思路:

简单枚举计算即可。(这里用了split所以用了java)

代码如下:

package fall_2018;

import java.util.*;

public class Test03 {
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		int N, targetId;
		N=sc.nextInt();
		targetId=sc.nextInt();
		//吃掉回车
		sc.nextLine();
		//构建朋友矩阵
		boolean[][] isFriendMatrix=new boolean[N][N];
		for(int i=0; i<N; i++){
			String friendListStr = sc.nextLine();
			String[] friendIdStrArr=friendListStr.split("\\s+");
			for(String friendIdStr:friendIdStrArr){
				int friendId=Integer.parseInt(friendIdStr);
				isFriendMatrix[i][friendId]=true;
				isFriendMatrix[friendId][i]=true;
			}
		}
		//找出与targetId共同朋友最多的人
		int resultId=-1, resultMaxCommonFriendNum=0;
		for(int uId=0; uId<N; uId++){
			if(uId==targetId)
				continue;
			//若为朋友不用
			if(isFriendMatrix[targetId][uId])
				continue;
			int commonFriendNum=0;
			for(int vId=0; vId<N; vId++){
				if(isFriendMatrix[targetId][vId] && isFriendMatrix[uId][vId]){
					commonFriendNum++;
				}
			}
			if(commonFriendNum>resultMaxCommonFriendNum){
				resultMaxCommonFriendNum=commonFriendNum;
				resultId=uId;
			}
		}
		//输出结果
		System.out.println(resultId);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值