• 拼多多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
    ",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;
        }
    
    }
  • 相关阅读:
    画笔
    进程和线程<二>
    进程和线程<一>
    文件<2>
    文件<1>
    窗口(3)
    窗口<二>
    窗口(1)
    消息
    位图
  • 原文地址:https://www.cnblogs.com/dshn/p/9427690.html
Copyright © 2020-2023  润新知