小工具知识网

当前位置: 首页 > 行业知识 > 字节跳动(校招)算法原题

行业知识

字节跳动(校招)算法原题

2026-10-26 01:25:43 来源:互联网转载

大模型"价格战"越演越烈

昨天的 文章 提到,自从 5 月 15 号,字节跳动发布了击穿行业底价的豆包大模型后,各大厂家纷纷跟进降价,而且都不是普通降价,要么降价 90% 以上,要么直接免费。

()

今天是豆包发布会过去的第 8 天,价格战还在继续,且越演越烈。

腾讯混元大模型宣布全面降价,其中主力模型之一的混元-lite更是从即日起免费使用。

()

科大讯飞也宣布讯飞星火 API 永久免费开放。

而在昨天(5 月 22 号)举办的 Baichuan 4 模型产品发布会上,百川智能创始人兼 CEO 王小川也点评了最近的"大模型价格战",其声称:"在中国市场,API 服务其实对创业公司是走不通的"。

...

回归主线。

来一道和「字节跳动(校招)」相关的算法原题。

题目描述

平台:LeetCode

题号:886

给定一组 n 人(编号为 1, 2, ..., n), 我们想把每个人分进任意大小的两组。

每个人都可能不喜欢其他人,那么他们不应该属于同一组。

给定整数 n 和数组 dislikes ,其中   ,表示不允许将编号为  和   的人归入同一组。

当可以用这种方法将所有人分进两组时,返回 true;否则返回 false。

示例 1:

输入:n = 4, dislikes = [[1,2],[1,3],[2,4]]

输出:true

解释:group1 [1,4], group2 [2,3]

示例 2:

输入:n = 3, dislikes = [[1,2],[1,3],[2,3]]

输出:false

示例 3:

输入:n = 5, dislikes = [[1,2],[2,3],[3,4],[4,5],[1,5]]

输出:false

提示:

  • dislikes 中每一组都 不同

    染色法

    无论是从题目描述和对点边的描述,这都是一道「染色法判定二分图」的模板题。

    为了方便,我们令 dislikes 为 ds,将其长度记为 。

    题目要求我们将 个点划分到两个集合中,同时我们将每个 看做无向边的话,可知集合内部无边,即所有的边必然横跨两个集合之间。

    使用 进行建图,并将两个将要划分出的两个集合分别记为 A 和 B,我们可以采用「染色」的方式,尝试将所有点进行划分。

    构建一个与点数相等的数组 color,我们人为规定划分到集合 A 的点满足 ,划分到集合 B 的点满足 ,起始有 ,代表该点尚未被划分。

    随后我们可以实现 DFS 函数为 boolean dfs(int u, int cur) 含义为尝试将点 u 上 cur 色。根据定义可知,我们除了需要 color[u] = cur 以外,还需要遍历点 u 的所有出边(处理其邻点,将其划分到另一集合上),若在处理过程中发生冲突,则返回 false,若能顺利染色则返回 true。

    由于我们固定了颜色编号为 1 和 2,因此 cur 的对立色可统一为 3 - cur。

    最终,我们根据能否给所有点染色成功来决定答案。

    Java 代码:

    class Solution {
        int N = 2010, M = 2 * 10010;
        int[] he = new int[N], e = new int[M], ne = new int[M], color = new int[N];
        int idx;
        void add(int a, int b) {
            e[idx] = b;
            ne[idx] = he[a];
            he[a] = idx++;
        }
        boolean dfs(int u, int cur) {
            color[u] = cur;
            for (int i = he[u]; i != -1; i = ne[i]) {
                int j = e[i];
                if (color[j] == cur) return false;
                if (color[j] == 0 && !dfs(j, 3 - cur)) return false;
            }
            return true;
        }
        public boolean possibleBipartition(int n, int[][] ds) {
            Arrays.fill(he, -1);
            for (int[] info : ds) {
                int a = info[0], b = info[1];
                add(a, b); add(b, a);
            }
            for (int i = 1; i 

上一篇:怎么建设自己的渠道服务器?

下一篇:博深工具股份有限公司没听说过这家公司,所以不清楚也不了解;不好意思没能帮助到你。