从力扣出发,接触算法 Leetcode 1 两数相加
见微知著,是我主张的学习思路,虽然很难想象有人会在2026年去讲 leetcode 001,但是从另一个角度或许我们能够更好的体会到AI时代为什么 算法题在面试和证明个人编程水平上仍旧是不可或缺的一部分
Leetcode 1 两数相加
题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
思路点拨
如果你已经刷过很多题,甚至从初中就是打oi的这个道题简直不要太简单了,言简意赅也就是对于两个数 a , b 使得 a + b = target
这定然不算什么难事,用暴力算法直接就能跑出来
(也称作枚举,初期多指全枚举,后期多指用枚举模拟,枚举顾名思义把所有可能情况罗列出来)
我们用两个for即可实现
// 简易写了
for(i=0 ;i<nums.size()-1;i++) // i 遍历数组
{
for(j=i ; j<nums.size();j++) // j 遍历数组
{
if (nums[i] +nums[j] == target)
return {i,j};
}
}
问题已经解决了,算法的时间复杂度为
但是更多人包括题目要求都是更推荐哈希表储存键值对,来检查是否储存过 target-nums[i] 的值,进而实现时间复杂度压缩至
到此我们的文章进入正题,我们会面对一个问题,为啥非要优化??
优化の喜与悲
这个问题看起来有一点蠢,能优化为什么不优化?诚然,在绝大多数情况下,优化到极致,用数学证明榨干算法最后一点进步空间似乎才和正规、工业、成熟沾边,因此很多意向算法岗的在校生、实习生都十分焦虑,似乎大一不刷leetcode似乎就和神秘的别人差出一道天堑了,以我所见以考代学固然高效,但是同样是折磨自己,消耗自己对于计算机热爱和心性的“地狱直通车”,对于绝大多数人,我认为能够想到第一种算法已经是对于题目理解和分析十分够格的了,但是你看到用暴力只能打败个位数的“程序员” 的时候,你的成就感会不会荡然无存呢? 焦虑和不甘是否蚕食着对于自身是初学者处境的理性判断?
我爱计算机是因为它能给我带来一种种全新的解决问题的可能,而每一条解决问题的道路都值得被称作一种算法,我始终认为自己想出来的算法,再笨拙也不是那些充满着油和夜的思想所拥有资格染指的。
如果你想其实你可以用 大转盘的方式 解决
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
vector<int> twoSum(vector<int>& nums, int target) {
srand(time(0));
int n = nums.size();
int i, j;
do {
i = rand() % n;
j = rand() % n;
} while (i == j || nums[i] + nums[j] != target);
return {i , j};
}
hhhh我直接开抽!!!
你知道吗?
当target的大小
为11时,抽中正确答案的概率和洛克王国抓到异色的概率(1.82%)是一样的哦!!
为91时,抽中答案的概率和宝可梦的闪光(0.0244% )一样哦!!
为20时,抽中答案的概率和星露谷获得远古种子(0.526%)一样!!
你可能觉得没什么意义,浪费时间和生命的内容罢了,博主本意是让大家意识到算法岗位以及算法本身已经不是一个行业或者工具了,不可争议的是,你无法相信写不出来leetcode 001 的人,凭什么有资格在算法岗,或者从事算法研究,甚至学习计算机专业,这场有意或无意的为了抢夺AI风口同龄人算法竞争,从leetcode 001 就开始剥夺你对于一件事物热爱的选择权利,算法归其本质是我们解决问题一个方法,可是似乎一点也不妨碍“同龄人”给你创进‘你没得选’和‘大家都这样’的竞争恶意中,希望你在做算法题时,至少是探索,而不是模仿,共勉
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)