百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文
无敌,击败全网99%的算法学习路线!

无敌,击败全网99%的算法学习路线!

  • 网站名称:无敌,击败全网99%的算法学习路线!
  • 网站分类:技术文章
  • 收录时间:2025-06-18 12:15
  • 网站地址:

进入网站

“无敌,击败全网99%的算法学习路线!” 网站介绍

不管是在校招还是社招中,考察算法能力、手写代码能力,这个永远是排在第一位的,必须重视起来,要早早开始学习算法、并且去刷算法。


算法


算法:又被叫为算子,是实现一个问题的方法。


算法五大特点:确定性、正确性、有效性、有穷性、有输出;


衡量算法优劣性方法:时间复杂度 + 空间复杂度;


1、时间复杂度


是问题规模与完成该问题所需要的基础操作步骤数量的函数关系(不是指运行多少时间,一般指的是最差情况下的时间复杂度)


例:数组 array 长度为 count,在其中查找值为 key 元素的下标。

 1#define NOT_FOUND -1
 2
 3int findKey(int *array, int count, int key) {
 4    int index = 0;
 5
 6    while(index < count && array[index] != key) {
 7        index++;
 8    }
 9
10    return index >= count ? NOT_FOUND : index;
11}


核心分析:


上面这个例子查找算法的基础操作是:array[index] != key。


总比较次数:1 + 2 + 3 + ... + n = (1+n)/2

总查找次数:n


那么,每一次查找所比较的次数是:

((1 + n) * n / 2) / n = (1 + n) / 2


n 表示数据规模,那么这个查询算法的时间复杂度是 O((1 + n) / 2);当 n 趋于无穷大时,那么:O((1 + n) / 2) <==> O(n),等价关系,即该查找算法时间复杂度为 O(n)。


一定要明确时间复杂度的计算方式,以及自己会评估算法的时间复杂度,是算法基础功,这个知识点在面试中必问,一定要掌握(常见面试问题:二分查找)。


2、空间复杂度


任务规模与实现该任务所需要的辅助存储空间大小之间的函数关系


例:数组 array 长度为 count,实现该数组的逆序。

 1void reverseArray(int *array, int count) {
 2    int i;
 3    int *tmp;
 4
 5    tmp = (int *)malloc(sizeof(int), count);
 6    for (i = count-1; i >= 0; i--) {
 7        tmp[i-count+1] = array[i];
 8    }
 9    for (i = 0; i < count; i++) {
10        array[i] = tmp[i];
11    }
12
13    free(tmp);
14}


核心分析:


上面这个例子逆转数组的基础操作是:

tmp = (int *)malloc(sizeof(int), count);


申请了跟原先数组一样大的辅助空间,即空间复杂度为:O(n);串行遍历了数组 2 次,这个时间复杂度为:O(2n);


算法学习路线

1、算法学习大纲

2、算法学习视频

3、算法学习书籍

4、算法刷题平台

5、算法代码笔记

  • 个人github整理此pdf:
    • https://github.com/puge-up/computer-basics

6、视频 + pdf 资料

学习路线、视频、书籍、代码笔记,我都已经推荐过了,对于小白的话,建议先看看视频,理解理解,多听听别人思路,看看是怎么解题的,初步阶段,一定要选择简单的、自己能很快理解的去学习,由浅入深,慢慢的给自己信心。

算法的学习,别人帮不了你多少,主要还是的靠自己悟,靠自己花时间去理解,师傅领进门,修行在个人,算法讨论,思路分享,去leetcode、牛客网看看,各路大神,各种解决思路,你一定会有进步的。