腾讯笔试记录

1题 重排链表。通过90%,超时了
class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param m int整型
     * @param a ListNode类 指向彩带的起点,val表示当前节点的val,next指向下一个节点
     * @return ListNode类一维数组
     */
    public ListNode[] solve (int m, ListNode a) {
        ListNode[] ret = new ListNode[m];
        ListNode[] ps = new ListNode[m];
        ListNode p = a;
        while (p != null) {
            int idx = p.val % m;
            if (ret[idx] == null) {
                ret[idx] = ps[idx] = p;
            } else {
                ps[idx].next = p;
                ps[idx] = ps[idx].next;
            }
            p = p.next;
        }
        for (int i = 0; i < m; ++i) {
            if (ps[i] != null) {
                ps[i].next = null;
            }
        }
        return ret;
    }
}

2 题 获取最大能量值
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        final int MOD = (int)1e9 + 7;
        int T = sc.nextInt();
        StringBuilder cache = new StringBuilder();
        while(T-- > 0) {
            int n = sc.nextInt();
            long[] arr = new long[n];
            for (int i = 0; i < n; ++i) {
                arr[i] = sc.nextInt();
            }
            long sum = 0;
            long delta = 0;
            Arrays.sort(arr);
            for (int i = n - 1; i >= 0; --i) {
                sum = (sum + arr[i] + delta) % MOD;
                delta = (delta + delta + arr[i]) % MOD;
            }
            cache.append(sum).append("
");
        }
        System.out.print(cache);
    }

}
3 题 最少船只数。奇偶体重分开算
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        StringBuilder cache = new StringBuilder();
        while(T-- > 0) {
            int n = sc.nextInt();
            int w = sc.nextInt();
            List<Integer> oddList = new ArrayList<>();
            List<Integer> evenList = new ArrayList<>();
            for (int i = 0; i < n; ++i) {
                int wi = sc.nextInt();
                if ((wi & 1) == 1) {
                    oddList.add(wi);
                } else {
                    evenList.add(wi);
                }
            }
            oddList.sort(null);
            evenList.sort(null);
            int sum = getCount(oddList, w);
            sum += getCount(evenList, w);
            cache.append(sum).append("
");
        }
        System.out.print(cache);
    }

    private static int getCount(List<Integer> list, int w) {
        int count = 0;
        int i = 0, j = list.size() - 1;
        while(i < j) {
            if (list.get(i) + list.get(j) <= w) {
                ++i;
            }
            --j;
            count++;
        }
        if (i == j) {
            count++;
        }
        return count;
    }

}
4 题 长度为n的字符串,选取k个,约束是选取结果的字典序最大。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        String s = sc.next();
        StringBuilder buf = new StringBuilder();
        int st = 0;
        while(k > 0) {
            st = getFirst(s, st, n, k, buf);
            k--;
        }
        System.out.println(buf);
    }

    private static int getFirst(String s, int st, int n, int k, StringBuilder buf) {
        int idx = n - k;
        char first = s.charAt(idx);
        for (int i = idx -1; i >= st; --i) {
            if (s.charAt(i) >= first) {
                first = s.charAt(i);
                idx = i;
            }
        }
        buf.append(s.charAt(idx));
        return idx + 1;
    }

}
5 最小变换数的和。暴力骗分,过55%
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; ++i) {
            arr[i] = sc.nextInt();
        }
        long minSum = Long.MAX_VALUE;
        for (int i = 0; i < n; ++i) {
            minSum = Math.min(minSum, work(arr, i));
        }
        System.out.println(minSum);
    }

    private static int work(int[] arr, int st) {
        int i = st - 1, j = st + 1;
        int sum = 0;
        long magic = arr[st];
        while(i >= 0 || j <= arr.length -1) {
            while(i >= 0 && arr[i] == magic) --i;
            while(j < arr.length && arr[j] == magic) ++j;
            if (i < 0 && j == arr.length) break;
            long newMagic = 0;
            if (i < 0) {
                newMagic = arr[j];
            } else if (j == arr.length) {
                newMagic = arr[i];
            } else {
                if (Math.abs(arr[i] - magic) <= Math.abs(arr[j] - magic)) {
                    newMagic = arr[i];
                } else {
                    newMagic = arr[j];
                }
            }
            sum += Math.abs(newMagic - magic);
            magic = newMagic;

        }
        return sum;
    }

}





#腾讯笔试##腾讯##笔经#
全部评论
老哥 看了你的题2,我的解法跟你相同 除了sum用的int型,mod直接用sum%1000000007。结果只过了18%
点赞 回复 分享
发布于 2021-08-22 22:19

相关推荐

老粉都知道小猪猪我很久没更新了,因为秋招非常非常不顺利,emo了三个月了,接下来说一下我的情况吧本人是双非本&nbsp;专业是完全不着计算机边的非科班,比较有优势的是有两段大厂实习,美团和字节。秋招面了50+场泡池子泡死的:滴滴&nbsp;快手&nbsp;去哪儿&nbsp;小鹏汽车&nbsp;不知名的一两个小厂其中字节13场&nbsp;两次3面挂&nbsp;两次2面挂&nbsp;一次一面挂其中有2场面试题没写出来,其他的都是全a,但该挂还是挂,第三次三面才面进去字节,秋招加暑期总共面了22次字节,在字节的面评可以出成书了快手面了8场,2次实习的,通过了但没去,一次2面挂&nbsp;最后一次到录用评估&nbsp;至今无消息滴滴三面完&nbsp;没几天挂了&nbsp;所有技术面找不出2个问题是我回答不上来的,三面还来说我去过字节,应该不会考虑滴滴吧,直接给我干傻了去哪儿一天速通&nbsp;至今无消息小鹏汽车hr&nbsp;至今无消息美团2面挂&nbsp;然后不捞我了,三个志愿全部结束,估计被卡学历了虾皮二面挂&nbsp;这个是我菜,面试官太牛逼了拼多多二面挂&nbsp;3道题也全写了&nbsp;也没问题是回答不出来的&nbsp;泡一周后挂腾讯面了5次&nbsp;一次2面挂&nbsp;三次一面挂,我宣布腾讯是世界上最难进的互联网公司然后还有一些零零散散的中小厂,但是数量比较少,约面大多数都是大厂。整体的战况非常惨烈,面试机会少,就算面过了也需要和各路神仙横向对比,很多次我都是那个被比下去的人,不过这也正常,毕竟谁会放着一个985的硕士不招,反而去招一个双非读化学的小子感觉现在互联网对学历的要求越来越高了,不仅仅要985还要硕士了,双非几乎没啥生存空间了,我感觉未来几年双非想要进大厂开发的难度应该直线上升了,唯一的打法还是从大二刷实习,然后苟个转正,不然要是去秋招大概率是炮灰。而且就我面字节这么多次,已经开始问很多ai的东西了,你一破本科生要是没实习没科研懂什么ai啊,纯纯白给了
不知名牛友_:爸爸
秋招你被哪家公司挂了?
点赞 评论 收藏
分享
评论
4
9
分享

创作者周榜

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