MiroFish

最近技术圈的风头都被 OpenClaw 给抢了,不少好的技术类新闻都被淹没其中。

其中就包括:00 后大四学生BaiFu(郭航海),10 天时间,采用了 Vibe Coding 模式开发的项目 MiroFish,登顶 GitHub 趋势榜。

如果故事只到这里,那充其量只是一个 AI 编程新时代的典范案例,还不足以破圈,更谈不上因为 OpenClaw 冲击波被淹没的"可惜"。

这事儿厉害在于:MiroFish 在登顶了 GitHub 趋势榜后,盛大集团创始人陈天桥,主动联系到了 BaiFu,而在 BaiFu 递交演示 Demo 的 24 小时内,盛大集团决定投资 3000 万人民币,作为战略投资。

要知道,这个 MiroFish 项目,最开始仅是 BaiFu 作为的本科毕业设计。

结果 ...

这毕业设计一不小心,就把「就业」问题都解决了,而且带来的,还是 AI 创业公司的 CEO 岗 🤣🤣

聊到这里,可能大家就更加好奇,这 MiroFish 项目是干嘛的,凭啥值 3000 万。

简单来说,这是一个基于多智能体技术的 AI 预测引擎,可以说是传统仿真系统的最终形态。

alt

更加具体的,用户可以往 MiroFish 上传任意材料,例如现实世界的新闻、财报和政策文件,然后 MiroFish 就会自动构建高保真的平行数字世界。

这个平行世界由成千上万个具备独立人格、长期记忆和行为逻辑的智能体进行自由交互和社会演化,从而推演未来可能的发展走向。

除了汇总模拟结果,输出结构化的分析报告,用户还可以跟模拟世界中的任意智能体进行深度对话。

怎么样,酷吧?

3000 万的投资,固然令人大吃一惊,但这事儿其实对于 BaiFu,也算是有迹可循。

因为 MiroFish 不是 BaiFu 的第一个爆款,陈天桥与 BaiFu 之间,也并非是首次接触。

BaiFu 的首个项目,叫 BettaFish,这是一个帮助大家破除信息茧房,还原舆情原貌,预测未来走向,辅助决策的系统。

alt

可以不负责任的评价,如果当时贾老板知道这套系统,西贝不会落入今天的地步 🤣🤣

BettaFish 是 BaiFu 的第一个爆火项目,当时也是引来了众多大厂的实习邀约,其中就包括了陈天桥。

当时陈天桥向 BaiFu 直言:BettaFish 的技术水平并非特别出色,但他看重的是 BaiFu 在项目中展现出的"看见并定义真实有价值的问题,并尝试用 AI 的新方式去解决"的行动力。

所以这 3000 万,我个人的理解:不全是对 MiroFish 的定价,而是陈天桥确认了 BaiFu 并非"昙花一现"后,对其个人的合伙投入。

这件事情,给我最大的感受,是 AI 时代,超级个体的突起,几乎就是不可阻止的。

因为连个人都能借助 AI 力量,来快速试错,快速验证,而仅仅是消耗一点算力罢了。

未来每个人的想法落地率会被大大提升,这一定程度上就会推动社会进步,而那极少数本来会因为资源问题而被淹没的天才,则会有更大的概率出现在大众眼里,成为引领者,这会大大的推动社会进步。

很多人在担心 AI 泡沫,担心 AI 会让大多数人失去工作,但怎么说呢,至少从人类文明这短短的历史中,没有翻出来哪项革命,是提高效率的同时,引发了社会衰退。

你觉得呢?

铁打不动的,来道和「字节跳动」相关的算法题。

题目描述

平台:LeetCode

题号:1823

共有 名小伙伴一起做游戏。

小伙伴们围成一圈,按顺时针顺序从 编号。

确切地说,从第 i 名小伙伴顺时针移动一位会到达第 i + 1 名小伙伴的位置,其中 ,从第 n 名小伙伴顺时针移动一位会回到第 1 名小伙伴的位置。

游戏遵循如下规则:

  1. 从第 名小伙伴所在位置 开始 。
  2. 沿着顺时针方向数 名小伙伴,计数时需要 包含 起始时的那位小伙伴。逐个绕圈进行计数,一些小伙伴可能会被数过不止一次。
  3. 你数到的最后一名小伙伴需要离开圈子,并视作输掉游戏。
  4. 如果圈子中仍然有不止一名小伙伴,从刚刚输掉的小伙伴的 顺时针下一位 小伙伴 开始,回到步骤 2 继续执行。
  5. 否则,圈子中最后一名小伙伴赢得游戏。

给你参与游戏的小伙伴总数 ,和一个整数 ,返回游戏的获胜者。

示例 1:

alt
输入:n = 5, k = 2

输出:3

解释:游戏运行步骤如下:
1) 从小伙伴 1 开始。
2) 顺时针数 2 名小伙伴,也就是小伙伴 1 和 2 。
3) 小伙伴 2 离开圈子。下一次从小伙伴 3 开始。
4) 顺时针数 2 名小伙伴,也就是小伙伴 3 和 4 。
5) 小伙伴 4 离开圈子。下一次从小伙伴 5 开始。
6) 顺时针数 2 名小伙伴,也就是小伙伴 5 和 1 。
7) 小伙伴 1 离开圈子。下一次从小伙伴 3 开始。
8) 顺时针数 2 名小伙伴,也就是小伙伴 3 和 5 。
9) 小伙伴 5 离开圈子。只剩下小伙伴 3 。所以小伙伴 3 是游戏的获胜者。

示例 2:

输入:n = 6, k = 5

输出:1

解释:小伙伴离开圈子的顺序:5、4、6、2、3 。小伙伴 1 是游戏的获胜者。

提示:

模拟

利用数据范围 ,我们可以直接根据规则进行模拟。

创建一个标记数组 ,若有 则代表点编号为 已被淘汰,每次我们都从当前位置 开始,找到第 个尚未淘汰的点( ),并将其进行标记( ),共有 个点需要被淘汰。

一些细节,为了方便取模,我们调整点编号从 开始,在返回答案时再重新调整为从 开始。

Java 代码:

class Solution {
    public int findTheWinner(int n, int k) {
        boolean[] vis = new boolean[n + 10];
        int cnt = 0, cur = 0;
        while (cnt != n - 1) {
            for (int j = 0; j < k - 1; j++) {
                cur++;
                while (vis[cur % n]) cur++;
            }
            vis[cur % n] = true;
            cnt++; cur++;
            while (vis[cur % n]) cur++;
        }
        return (cur % n) + 1;
    }
}

C++ 代码:

class Solution {
public:
    int findTheWinner(int n, int k) {
        vector<boolvis(n + 10false);
        int cnt = 0, cur = 0;
        while (cnt != n - 1) {
            for (int j = 0; j < k - 1; j++) {
                cur++;
                while (vis[cur % n]) cur++;
            }
            vis[cur % n] = true;
            cnt++; cur++;
            while (vis[cur % n]) cur++;
        }
        return (cur % n) + 1;
    }
};

Python 代码:

class Solution:
    def findTheWinner(self, n: int, k: int) -> int:
        vis = [False] * (n + 10)
        cnt, cur = 00
        while cnt != n - 1:
            for j in range(k - 1):
                cur += 1
                while vis[cur % n]:
                    cur += 1
            vis[cur % n] = True
            cnt, cur = cnt + 1, cur + 1
            while vis[cur % n]:
                cur += 1
        return (cur % n) + 1
  • 时间复杂度:要消除(被标记)的点数量为 ,每次找到要消除的点编号,最多遍历 个点,复杂度为
  • 空间复杂度:

约瑟夫环

这还是一道约瑟夫环经典题。

另外一道同款题在 这里 🎉🎉

每次往同一方向,以固定步长 进行消数。由于下一次操作的发起点为消除位置的下一个点(即前后两次操作发起点在原序列下标中相差 ),同时问题规模会从 变为 ,因此原问题答案等价于 findTheWinner(n - 1, k) + k

一些细节,由于编号从 开始,在返回答案时我们需要将结果为 的值映射回编号

Java 代码:

class Solution {
    public int findTheWinner(int n, int k) {
        if (n <= 1return n;
        int ans = (findTheWinner(n - 1, k) + k) % n;
        return ans == 0 ? n : ans;
    }
}

C++ 代码:

class Solution {
public:
    int findTheWinner(int n, int k) {
        if (n <= 1return n;
        int ans = (findTheWinner(n - 1, k) + k) % n;
        return ans == 0 ? n : ans;
    }
};

Python 代码:

class Solution:
    def findTheWinner(self, n: int, k: int) -> int:
        if n <= 1return n
        ans = (self.findTheWinner(n - 1, k) + k) % n
        return n if ans == 0 else ans
  • 时间复杂度:
  • 空间复杂度:

最后

巨划算的 LeetCode 会员优惠通道目前仍可用 ~

使用福利优惠通道 leetcode.cn/premium/?promoChannel=acoier,年度会员 有效期额外增加两个月,季度会员 有效期额外增加两周,更有超大额专属 🧧 和实物 🎁 福利每月发放。

我是宫水三叶,每天都会分享算法知识,并和大家聊聊近期的所见所闻

欢迎关注,明天见。

更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地 🎉🎉

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐