第三天:一个视频教会你常用的8种解题方法和算法模版(简直不要太简单)

7天课程目录,免费!踢馆抖音算法 (7天刷新法)

1. 第一天:一个视频教会你时间复杂度和空间复杂度                                             0912

2. 第二天:一个视频教会你必考的8种数据结构(视频,图文并茂)                     0913

3. 第三天:一个视频教会你常用的8中解题方法和算法模版(简直不要太简单)    0912

4. 第四天:一个视频教会你 6大高频考点 常用操作技巧,常用的字符,数组,类型(独家) 0911

5. 第五天: Top10,最高频题,99%命中面试题(字节,快手,shapee,大疆, 华为,蔚来  )  ok

6. 第六天: Hot 20 , 大厂面试算法真题,95%命中(精选: 京东,美团,小米,拼多多,网易)(非算法工程师误入) 0910

7. 第七天: Top5,  经典热题5,90%命中面试题(剑指offer)

要求

1.核心代码,记住代码模版

2.最具有代表的一道题目

3.记住各种的特点,使用场景

1.双指针        2个指针    有序      (2数之和)

2.二分查找    中间值      有序

3.滑动窗口     连续

4.递归     4要素

6.分治:   分块,  和二分一样,和归并排序一样,不同的是分治是全部二分    

7.回溯       返回   找到所以可能

8.  DFS     深度    用到栈                                   二叉树

9 . BFS     广度    用到队列:LinkList                二叉树

表格:8种解题方法表格:

指针相关解法对比

双指针:    有需要排序      一般是头尾2个指针,               然后进行交叉移动i++,j--

二分查找: 有序             一般是头尾2个指针,中间值。指针移动不同:移动i=m+1或者m-1

滑动窗口: 连续         

递归解法对比:重点(3者的代码对比)

1.分治:   分块,  和二分一样,和归并排序一样,不同的是分治是全部二分    

2.回溯       返回

3.  DFS     深度

DFS和回溯解法对比

回溯算法=DFS+剪枝(后面不走了)

回溯:递归后回上一层

DFS:一直走到底。不撞南墙不回头

DFS和BFS解法对比

共同点:一般题目都可以使用这2个一起解决

DFS :递归+栈

BFS: 2次循环+队列

双指针

双指针常用于数组、链表两种线性表(有序)数据结构相关的题,具体又分为

相向双指针:

两个指针一头一尾往中间移动

多应用于数组的连续子序列或两两组合,有规律的缩小范围

单向双指针

两个指针往同一个方向移动(没想到什么场景后续补充吧)

快慢指针:

通常慢指针向前走一步,快指针向前走两步

多用于链表、因为链表无法直接通过索引访问

通常利用快慢指针找到链表的中点或公共节点

二分法

常用于有序数组,取中点二分后按一定规则只取其中一边再继续二分,多用于查数

滑动窗口

常用于连续子序列的长度、统计量例如总和、计数等最优值问题

递归★

递归是指一个函数在运行时调用自己,框架如下

def recursion(params):           #1.函数输入参数

    if params==1:               #2.递归终止条件

        return 0

    params=params-1

    res=1+recursion(params)    #3.调用自身

    return res                 #4.返回值

递归有时不是直接的最优解题方法,但却是最基本、一定能解题的思想。

分治法

是一种特殊的递归,将问题进行分解,每个分解部分都有可能调用自己即递归到下一层,总结就是一个函数会同时多次或有选择性地调用自己、只是入参具体值不相同

回溯法★

一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试。(力扣定义)

是一种特殊的递归,常用于枚举组合+过滤或去重(可选)场景:

1.尝试一种路径,层层递归(调用自己)

2.找到答案并返回答案(返回值)

3.找不到答案返回上一层(终止条件)

4.尝试其他路径(调用自己)

去重前需保证枚举集有序

解决什么问题

回溯算法适用于以下的场景。

组合问题:N个数里面按一定规则找出k个数的集合

切割问题:一个字符串按一定规则有几种切割方式

子集问题:一个N个数的集合里有多少符合条件的子集

排列问题:N个数按一定规则全排列,有几种排列方式

棋盘问题:N皇后,解数独等等

深度优先搜索(Depth First Search, DFS)★

针对树结构,从根节点走一个分支到底后,返回最近的非叶子节点再走另一个分支走到底,这样直到把所有节点遍历完成

up主总结是回溯=DFS+剪枝,但我觉得回溯也不必须剪枝(上方回溯定义),所以是不是更合适的说DFS也是一种回溯

need-to-insert-img

need-to-insert-img

广度优先搜索(Breadth First Search, BFS)

针对树结构,从根节点一层一层遍历子节点,直到所有节点遍历完成。

比起DFS,BFS应用偏少,常用于层序遍历、最短路径场景。

一般来说,数据结构和算法会连在一起考,这里,我把面试核心知识点列了出来,大家可以参考学习,逐个击破。

栈与队列:先进先出、后进先出

线性链表

查找:顺序查找、二分查找

排序:交换类、插入类、选择类

树、二叉树、图:深度优先(DFS)、广度优先(BFS)

递归

分治

滑窗

三大牛逼算法:回溯、贪心、动态规划(DP)

算法模板

双指针模版

/*(1)定义两个边界指针*/

int left =0;//左边界

        int right = num.size() -1;//右边界

        while(left

/*(2)定义两个快慢指针*/

        ListNode*s = head;//慢指针

        ListNode*f = head->next;//快指针

        while (s != f){/*执行操作*/}

回溯算法

backtracking() {    if (终止条件) {        存放结果;    }    for (选择:选择列表(可以想成树中节点孩子的数量)) {        递归,处理节点;        backtracking();        回溯,撤销处理结果    }}

或者是这个:

public void helper(options, result) {

// 1. 在for循环之前做“判断”

        if (list.size() ...) {

do something ...

return;

        }

// for loop

        for loop {

// 可能在这里还需要做一些判断:1.操作是否合法;2.操作是否重复

// 3. 在递归之前做“选择”

        result.add(element);

        // 2. 在for循环里面做“递归”

        helper(options, result);

        // 4. 在递归之后做”撤销“

        result.removeLast();

        }

}

回溯的代码模版

private void backTracking(int n, List list, int left, int right, String curStr) {

if (left < right) {// (不符合退出条件)右边的括号大于左边的括号的时候,就需要终止了,终止一个地方

        return;

    }

if (left == n && right == n) {// 达到条件,终止条件

        list.add(curStr);  // 保存结果,并退出

        return;

    }

if (left < n) {//  移动指针, 回溯,

        backTracking(n, list, left +1, right, curStr +"(");

    }

if (right < left) {//  移动指针, 回溯,

        backTracking(n, list, left, right +1, curStr +")");

    }

}

二分查找法

二分查找模版

vector&nums

int left=0;//左边界

        int right=nums.size()-1;//右边界

        int mid=0;

        while(left<=right){

mid=(left+right)/2;

        if(target==nums[mid]){/*操作*/ }

if(target

right=mid-1;

        }

else{

left=mid+1;

        }

}

class Solution {public:    int searchInsert(vector<int>& nums, int target) {        int n = nums.size();        int left = 0;        int right = n; // 我们定义target在左闭右开的区间里,[left, right)          while (left < right) { // 因为left == right的时候,在[left, right)是无效的空间            int middle = left + ((right - left) >> 1);            if (nums[middle] > target) {                right = middle; // target 在左区间,因为是左闭右开的区间,nums[middle]一定不是我们的目标值,所以right = middle,在[left, middle)中继续寻找目标值            } else if (nums[middle] < target) {                left = middle + 1; // target 在右区间,在 [middle+1, right)中            } else { // nums[middle] == target                return middle; // 数组中找到目标值的情况,直接返回下标            }        }        return right;    }};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容