拼多多2018/8/5算法工程师笔试

给定一个含有N<=100个用户的朋友列表<=100,对于一个指定用户,找到这个用户最可能认识的人。最可能认识的人定义为这个人和当前用户不是朋友关系(a是b的朋友,b是a的朋友),但是有最多共同朋友。如果用户和所以人都没有共同朋友返回-1.

输入:

5 0
1 2 3
4 0
4 0
4 0
1 2 3

输出:
4

c++代码

/*
5 0
1 2 3
4 0
4 0
4 0
1 2 3
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;

int n,m;
string a[110];

int main()
{
    scanf("%d%d", &n,&m);
    getchar();
    for (int i=0; i<n; i++)
    {
        getline(cin, a[i]);
        // cout<<a[i]<<endl;
    }
    int maxs=-1;
    int mark=-1;
    for(int k=0; k<n; k++)
    {
        if(k==m)
            continue;
        int count=0;
        int key=0;
        for(int i=0; i<a[m].length(); i+=2)
        {

            int val = a[m][i] - 48;

            for(int j=0; j<a[k].length(); j+=2)
            {

               int aa = a[val][j] - 48;
               if(val==k&&aa==m)
               {
                   key=1;
                   break;
               }
               // if(val==aa)
                if(a[m][i]==a[k][j])
                {
                    count++;
                    break;
                }

            }
            if(key)
            continue;
        }
        if(key)
            continue;
        if(count>maxs)
        {
            maxs=count;
            mark=k;
        }
    }

    printf("%d\n",mark);

    return 0;
}

java代码:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;

public class QuestionThree {

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int k=in.nextInt();
        in.nextLine();
        HashMap<Integer, ArrayList<Integer>> inputMap=new HashMap<>();
        for(int i=0;i<n;i++) {
            String s=in.nextLine();
            ArrayList<Integer> tempList=new ArrayList();
            for(String val:s.split(" ")) 
                tempList.add(Integer.parseInt(val));
            if(i==k||!tempList.contains(k))
                inputMap.put(i,tempList);
        }
        System.out.println(find(k, inputMap));
    }
    
    public static int find(int k, HashMap<Integer, ArrayList<Integer>> inputMap) {
        ArrayList<Integer> kList=inputMap.get(k);
        Iterator iter=inputMap.entrySet().iterator();
        int index=Integer.MAX_VALUE;
        int maxFriends=0;
        while (iter.hasNext()) {
            Map.Entry  entry=(Map.Entry) iter.next();
            ArrayList<Integer>  tempList=(ArrayList<Integer>) entry.getValue();
            int count=0;
            if((int)entry.getKey()==k)  continue;
            for(int val:tempList) 
                if(kList.contains(val))
                    count++;
            if(count>maxFriends) {
                maxFriends=count;
                index=(int) entry.getKey();
            }
            if(maxFriends==count&&index>(int)entry.getKey())
                index=(int)entry.getKey();
        }
        
        return index;
    }

}

猜你喜欢

转载自www.cnblogs.com/dshn/p/9427690.html