腾讯笔试 9.6(附代码)

一开始不知道啥情况,进不去笔试,少考十分钟。只 a 了 4.05,哭了。

题目记不得了,等其他大佬补充,我把代码附上。

  1. ac
    思路:有序的,直接遍历比较就可以了
import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Node head1 = new Node();
        Node head2 = new Node();
        int n = sc.nextInt();
        Node cur = head1;
        for(int i = 0; i < n; i++) {cur.next = new Node(sc.nextInt()); cur = cur.next;}
        int m = sc.nextInt();
        cur = head2;
        for(int i = 0; i < m; i++) {cur.next = new Node(sc.nextInt()); cur = cur.next;}
        Solution s = new Solution();
        s.solve(head1.next, head2.next);
    }
}


class Solution{
    void solve(Node head1, Node head2) {
        StringBuilder ans = new StringBuilder();
        while(head1 != null && head2 != null) {
            if(head1.val > head2.val) head1 = head1.next;
            else if(head2.val > head1.val) head2 = head2.next;
            else {
                ans.append(head1.val + " ");
                head1 = head1.next;
                head2 = head2.next;
            }
        }
        System.out.println(ans.toString().substring(0,ans.length() - 1));
    }
}

class Node{
    int val;
    Node next;
    public Node() {}
    public Node(int val) {
        this.val = val;
    }
}
  1. ac
    思路:
    把团队看成节点,人在哪些团队里,这些团队直接就连条边。
    从 0 所在的团队出发,遍历到的团队,就是能通知到的团队。里面的人数就是答案
import java.util.*;
//2.小团队
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        Map<Integer, List<Integer>> map1 = new HashMap();//存放每个组里有哪些人
        Map<Integer, List<Integer>> map2 = new HashMap();//存放一个人在哪些组里
        for(int i = 0; i < m; i++) {
            List<Integer> list = new ArrayList();
            int pn = sc.nextInt();
            for(int j = 0; j < pn; j++) {
                int p = sc.nextInt();
                list.add(p);
                List<Integer> zuList = map2.getOrDefault(p, new ArrayList());
                zuList.add(i);
                map2.put(p, zuList);
            }
            map1.put(i, list);
        }
        Solution s = new Solution();
        s.solve(n, m, map1, map2);
    }
}


class Solution{
    void solve(int n,int m, Map<Integer, List<Integer>> map1, Map<Integer, List<Integer>> map2) {
        Set<Integer>[] nextZu = new Set[m];
        for(int i = 0; i < m; i++) nextZu[i] = new HashSet();
        boolean[] vis = new boolean[n];
        for(Integer p: map2.keySet()) {
            for(Integer zu: map2.get(p)) {
                for(Integer zu2: map2.get(p)) {
                    nextZu[zu].add(zu2);
                    nextZu[zu2].add(zu);
                }
            }
        }
        Set<Integer> visZu = new HashSet();
        for(Integer zu: map2.get(0)) {
            dfs(visZu, zu, nextZu);
        }
        Set<Integer> visP = new HashSet();
        for(Integer zu: visZu) {
            for(Integer p: map1.get(zu)) visP.add(p);
        }
         System.out.println(visP.size());
    }

    void dfs(Set<Integer> visZu, int zu, Set<Integer>[] nextZu) {
        if(visZu.contains(zu)) return;
        visZu.add(zu);
        for(Integer zu2: nextZu[zu]) {
            if(visZu.contains(zu2)) continue;
            dfs(visZu, zu2, nextZu);
        }
    }
}

3.ac
思路:top k问题,用堆就可以了

import java.util.*;
字符串比较
public class Main{
    public static void main(String[] args) {
        Solution s = new Solution();
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int K = sc.nextInt();
        Map<String, Node> map = new HashMap();//存放字符串对应的结点
        sc.nextLine();
        for(int i = 0; i < N; i++) {
            String str = sc.nextLine();
            Node node = map.getOrDefault(str, new Node(str));
            node.nums++;
            map.put(str, node);
        }
        s.solve(K, map);
    }
}


class Solution{
    void solve(int K, Map<String, Node> map) {
        PriorityQueue<Node> minheap = new PriorityQueue<Node>((a, b) ->
        a.nums != b.nums ? a.nums - b.nums : compare(a.val, b.val));
        PriorityQueue<Node> maxheap = new PriorityQueue<Node>((a, b) ->
        a.nums != b.nums ? b.nums - a.nums : compare(a.val, b.val));
        for(String key: map.keySet()) {
            Node node = map.get(key);
            minheap.add(node);
            maxheap.add(node);
        }
        for(int i = 0; i < K; i++) {
            Node node = maxheap.poll();
            System.out.println(node.val + " " + node.nums);
        }
        for(int i = 0; i < K; i++) {
            Node node = minheap.poll();
            System.out.println(node.val + " " + node.nums);
        }
    }

    int compare(String a, String b) {
        int len = Math.min(a.length(), b.length());
        for(int i = 0; i < len; i++) {
            if(a.charAt(i) == b.charAt(i)) continue;
            return a.charAt(i) - b.charAt(i);
        }
        return a.length() - b.length();
    }
}

class Node{
    String val;
    int nums;
    public Node(String val) {
        this.val = val;
        nums = 0;
    }
}
  1. ac
    思路:找规律,原中位数有俩 mid 和 mid2。
    删除的数字 <= mid,则中位数为 mid2。
    否则,为mid
import java.util.*;

public class Main{
    public static void main(String[] args) {
        Solution s = new Solution();
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] nums = new int[n];
        int[] sort = new int[n];
        for(int i = 0; i < n; i++) {
            nums[i] = sc.nextInt();
            sort[i] = nums[i];
        }
        Arrays.sort(sort);
        s.solve(nums, sort[n / 2 - 1], sort[n/2]);
    }
}


class Solution{
    void solve(int[] nums, int mid, int mid2) {
        for(int num: nums) {
            if(num <= mid) System.out.println(mid2);
            else System.out.println(mid);
        }
    }
}
  1. 0.05。应该是冒泡排序的变种,没时间写了。
#秋招##腾讯##笔试题目#
全部评论
4.05不错。
2 回复 分享
发布于 2020-09-06 22:03
第二题用并查集死活20%,看其他人回答,好像是输入数据并不是0~n-1,哭了
点赞 回复 分享
发布于 2020-09-06 22:21
蹲一个第五题思路。。
点赞 回复 分享
发布于 2020-09-06 22:09
第二题是什么思路呀
点赞 回复 分享
发布于 2020-09-06 22:09
😥有一题居然中途改了两次测试用例,只过了3.6的我瑟瑟发抖
点赞 回复 分享
发布于 2020-09-06 22:05
大佬这个只A了4.05让我无地自容啊
点赞 回复 分享
发布于 2020-09-06 22:04

相关推荐

bg:双非本,一段中小厂6个月测开实习今天发这个帖子主要是想聊一聊我秋招以来的一个发展我是在8月底辞职,打算秋招,可是看网上都说金九银十就想着自己就是一个普通本科生,现在九月份都是一些大神在争抢,所以9月份基本上没投,等到了10月份才开始秋招,可是这个时间好像已经有些晚了,今年秋招开启的格外早,提前到了7,8月份,我十月才开始,官网投了很多公司,没有任何一个面试机会,这个情况一直到了十月底才有了第一个面试,当时没有面试经验,所以不出意外的挂了后续就是漫长的投递,但是毫无例外没有面试,没有办法我只能另辟蹊径开始在BOSS上边投递,然后顺便也根据BOSS上边这个公司名称去浏览器搜索看看有没有官网投递渠道,毕竟官网上投递后还是可以第一时间被HR看到的,然后一直不停投递,一开始第一个星期基本上都是投的正式秋招岗位到了第二个星期才开始实习和正式一起投,到十一月底的时候已经沟通了700➕才有一共1个正式的,5个要提前实习的,3个实习的面试,最后结果是过了1个要提前实习的和2个实习的每次面试我都会复盘,发现这些小公司面试官问的五花八门,有的专问基础,有的专问项目,有的啥都问,不过自己也是看出来了一下门道,就是小公司不像大公司面试官那样能力比较强基本上你简历上边的他都会,然后会根据简历来问,小公司面试官他们更多的是看自己会什么,然后看看你简历上边哪些他也是会的然后来问,经过不断的复盘加上背各种各样面试题,到了11月底12月初才有了1个要提前实习的offer还有2个实习的offer,而且薪资待遇对我来说已经很可观了可是啊,人总是这样得了千钱想万钱,我又开始不满现状,但是此时的我面试能力经过这么多面试和复盘已经很强了,然后在十二月份运气爆棚,被极兔和小鹏补录捞起来面试,还有个百度测开的实习面试,这个时候因为有了offer所以感觉有了底气,面试也很自信,最后结果是全部都过了那个时候我感觉自己真的很厉害,我问了极兔那边的HR像我这样的双非本收到offer的在极兔有多少?他告诉我产研岗90%都是硕士,10%里边基本上都是211,985,想我这样的很少很少,那一刻感觉自己超级牛逼,小鹏就更不用说了,最后也是不出意外选择了小鹏所以我就我个人经历想对和我学历履历差不多的牛友一些建议第一:秋招一定要趁早,真到了9,10月,那个时候可能你投的结果可能还不如7,8,11月,第二:最好先拿小公司实习或者正式练练手,提升一下面试能力,我个人觉得因为小公司问的五花八门所以你会更加横向去提升自己能力,而且大公司其实面试没有那么难,除了一些非常卷的岗位,公司大神比较多会问的很难,一般好点的公司都不会问的那么难,他们也知道都是应届生不会要求那么高第三:当有一定能力后,就是坚持了,对于我们这样的学历,没有特别强的履历情况下,就是要抓住提前批和补录的机会,这个时候各方面不会卡的很严,是我们很好很好的一个机会第四:就是运气也是很重要的一部分,不过这个很难去说什么最后祝各位牛友都能收获自己满意的offer😁😁😁
秋招,不懂就问
点赞 评论 收藏
分享
评论
9
24
分享

创作者周榜

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