DeepSeek创始人梁文锋个人履历,真牛逼!
梁文锋,这个名字在AI和量化投资界可是个狠角色!作为一名程序员,我看完他的履历,脑子里就蹦出两个字——“硬核”!
出生于广东湛江的他,家境普通,父亲是一名小学教师,但这并没有阻挡他走上技术封神之路。浙江大学电子信息工程本科+硕士学位,妥妥的学霸配置。
2008年,他开始折腾全自动量化交易,利用机器学习搞投资。那时候AI和量化还是个新鲜玩意,他已经在这条赛道上狂奔了。
2013年,和老同学一起创业,搞投资管理公司;2015年,再次出击,创立幻方科技,把AI和量化投资绑定到一起,开启“AI炒股”新时代。
到了2019年,他直接砸2亿研发“萤火一号”训练平台,1100块GPU,硬件豪华程度堪比“AI战列舰”。2021年,更是豪掷10亿升级“萤火二号”,1万张A100显卡,算力爆炸。幻方的管理资产也顺势突破千亿,成为国内量化“四大天王”之一。
然而,他并不满足于金融AI,还盯上了更大的目标——通用人工智能(AGI)。2023年,他成立DeepSeek,进军大模型领域;2024年发布DeepSeek-V2,API定价杀到GPT-4 Turbo的1%,直接“价格屠夫”上线;2025年,DeepSeek-R1连美国科技圈都盯上了!
不得不说,梁文锋的路子非常“程序员”——技术先行,狂堆算力,敢砸钱,敢卷价格。现在DeepSeek正蓄势待发,未来如何,就看他还能整出什么新活儿了!🔥【备注:文末可领最新资料】。
算法题:按位与为零的三元组
今天我们来聊个算法题——按位与为零的三元组。
题目大意就是,给你一个整数数组 nums,请你计算有多少个 (i, j, k) 组合 满足 nums[i] & nums[j] & nums[k] == 0,其中 i, j, k 是不同的索引。
看到 &(按位与),我下意识摸了摸我的 bitwise(比特运算)小册子,咱这可是一等一的程序员工具箱啊!但讲真,一开始看到这题,我也是懵的,毕竟直接三层 for 循环硬怼,这复杂度 O(n³) 直接超纲,面试官看了估计都要叹气。
既然暴力不行,那就得优化,核心思想是——“预处理+哈希优化”。
首先,我们知道:
**按位与 &**:只有在对应二进制位 都为 1 时,结果才是 1,否则就是 0。 三元组 & 结果为 0,意味着 nums[i] & nums[j] & nums[k]里每一位至少有一个0,所以不能让nums[i]、nums[j]、nums[k]在相同的比特位上全是1。
代码实现
import java.util.HashMap;
import java.util.Map;public class ZeroBitwiseTriplets {
public int countTriplets(int[] nums) {
Map<Integer, Integer> freq = new HashMap<>();
// 统计所有两两与 (&) 结果的频率
for (int x : nums) {
for (int y : nums) {
int andVal = x & y;
freq.put(andVal, freq.getOrDefault(andVal, 0) + 1);
}
}
int count = 0;
// 遍历 nums,看看它能和哪些 (x & y) 的结果按位与为 0
for (int z : nums) {
for (int key : freq.keySet()) {
if ((z & key) == 0) {
count += freq.get(key);
}
}
}
return count;
}
public static void main(String[] args) {
ZeroBitwiseTriplets solution = new ZeroBitwiseTriplets();
int[] nums = {2, 1, 3};
System.out.println(solution.countTriplets(nums)); // 输出 12
}
}
解释一下代码:
预处理所有可能的二元组合 ( nums[i] & nums[j])
用HashMap存储所有nums[i] & nums[j]的结果及其出现次数,这样就能在后续查找nums[k] & (nums[i] & nums[j]) == 0时,直接用O(1)查询复杂度。遍历 nums,寻找与二元组合按位与为 0 的情况
这个步骤就是“看看nums[k]能和多少个(nums[i] & nums[j])组合成 0”。
这段代码的时间复杂度是 **O(n² + n * 2¹⁶) ≈ O(n²)**(考虑 nums[i] & nums[j] 结果最多是 2¹⁶ 种可能,实际远小于 n²),比起 O(n³) 好太多了!
进一步优化?
理论上可以用 位运算 + 计数优化 进一步缩小 HashMap 的大小,但这个思路已经是面试里很不错的优化方向了,面试官看到这段代码估计要点头了。
你可能踩的坑:
如果直接暴力 O(n³),数组稍微大点就 TLE(超时)了,所以一定要做预处理优化。 注意 (x & y) & z == 0其实是(x & y)作为整体去和z进行按位与,所以HashMap预处理时存的 key 不是x和y,而是x & y的结果。
这个算法题挺有趣的,说到底就是把 暴力 变成 查表,一举降低时间复杂度。看到 & 这种位运算,一定要想到 预处理 + 哈希优化,这基本是面试里的黄金套路。
面试的时候要是你写出 O(n³) 的代码,面试官可能会说:“这不太行,能优化一下吗?”
如果你能写出 O(n²),他可能会点头,说:“嗯,不错!”
要是你能进一步结合 bitmask(位掩码)优化,甚至还能把 HashMap 换成数组,时间复杂度进一步降低,那这轮面试你就赢了。
以上,希望大家都能拿下这个算法,别被 & 给按住摩擦了 😂!
-END-
以上,就是今天的分享了,看完文章记得右下角给何老师点赞,也欢迎在评论区写下你的留言。