
算法刷题
华山拎壶冲
不积跬步,无以至千里。。。
面试必备:https://www.jianshu.com/u/c3be0f69940b
展开
-
算法题 417:BFS 和 DFS 两种方式求岛屿的最大面积
问题描述给定一个包含了一些0和1的非空二维数组grid 。一个岛屿是由一些相邻的1(代表土地)构成的组合,这里的「相邻」要求两个1必须在水平或者竖直方向上相邻。你可以假设grid的四个边缘都被0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0转载 2020-09-16 10:32:47 · 384 阅读 · 0 评论 -
你真的会做 “2 Sum”题吗?
2 Sum 这题是 Leetcode 的第一题,相信大部分小伙伴都听过的吧。作为一道标着 Easy 难度的题,它真的这么简单吗?我在之前的刷题视频里说过,大家刷题一定要吃透一类题,为什么有的人题目做着越来越少,有的人总觉得刷不完的题,就是因为没有分类吃透。单纯的追求做题数量是没有意义的,Leetcode 的题目只会越来越多,就像高三时的模考试卷一样做不完,但分类总结,学会解决问题的方式方法,才能遇到新题也不手足无措。2 Sumimage这道题题意就是,给一个数组和一个目标值,让你转载 2020-09-11 15:03:19 · 351 阅读 · 0 评论 -
一文学会回溯算法解题技巧
前言上文我们学习了深度优先搜索和广度优先搜索,相信大家对这两者的算法有了比较清楚的认识,值得一提的,深度优先算法用到了回溯的算法思想,这个算法虽然相对比较简单,但很重要,在生产上广泛用在正则表达式,编译原理的语法分析等地方,很多经典的面试题也可以用回溯算法来解决,如八皇后问题,排列组合问题,0-1背包问题,数独问题等,也是一种非常重要的算法。本文将会从以下几个方面来讲述回溯算法,相信大家看了肯定有收获!什么是回溯算法 回溯算法解题通用套路 经典习题讲解什么是回溯算法回溯算法本质其实就是转载 2020-09-09 10:28:05 · 669 阅读 · 0 评论 -
图解排序算法:快速排序
快速排序算法首先选一个基准 pivot,然后过一遍数组,把小于 pivot 的都挪到 pivot 的左边, 把大于 pivot 的都挪到 pivot 的右边。这样一来,这个 pivot 的位置就确定了,也就是排好了 1 个元素。然后对 pivot 左边 ???? 的数排序,对 pivot 右边 ???? 的数排序,就完成了。那怎么排左边和右边?答:同样的方法。所以快排也是用的分治法的思想。「分」选择一个 pivot,就把问题分成了pivot 左边 pivot 右转载 2020-09-04 14:16:42 · 324 阅读 · 0 评论 -
经典动态规划:打家劫舍系列问题
有好几位读者私下问我 LeetCode 「打家劫舍」系列问题(英文版叫 House Robber)怎么做,我发现这一系列题目的点赞非常之高,是比较有代表性和技巧性的动态规划题目,今天就来聊聊这道题目。打家劫舍系列总共有三道,难度设计非常合理,层层递进。第一道是比较标准的动态规划问题,而第二道融入了环形数组的条件,第三道更绝,让盗贼在二叉树上打劫,这就是传说中的高智商犯罪吧。。。下面,我们从第一道开始分析。House Robber Iimagepublic int rob(int[]转载 2020-09-03 14:20:58 · 381 阅读 · 0 评论 -
一文学会动态规划解题技巧
前言动态规划(dynamic programming,简称 dp)是工程中非常重要的解决问题的思想,从我们在工程中地图软件上应用的最短路径问题,再在生活中的在淘宝上如何凑单以便利用满减券来最大程度地达到我们合理薅羊毛的目的 ,很多时候都能看到它的身影。不过动态规划对初学者来说确实比较难,dp状态,状态转移方程让人摸不着头脑,网上很多人也反馈不太好学,其实就像我们之前学递归那样,任何算法的学习都是有它的规律和套路的,只要掌握好它的规律及解题的套路,再加上大量的习题练习,相信掌握它不是什么难事,本文将会用比转载 2020-09-02 15:42:41 · 344 阅读 · 0 评论 -
一文学会递归解题
前言递归是算法中一种非常重要的思想,应用也很广,小到阶乘,再在工作中用到的比如统计文件夹大小,大到 Google 的 PageRank 算法都能看到,也是面试官很喜欢的考点最近看了不少递归的文章,收获不小,不过我发现大部分网上的讲递归的文章都不太全面,主要的问题在于解题后大部分都没有给出相应的时间/空间复杂度,而时间/空间复杂度是算法的重要考量!递归算法的时间复杂度普遍比较难(需要用到归纳法等),换句话说,如果能解决递归的算法复杂度,其他算法题题的时间复杂度也基本不在话下。另外,递归算法的时间复杂度转载 2020-09-02 14:28:50 · 499 阅读 · 0 评论 -
五分钟看懂一道中等难度的算法题
今天分享的题目来源于 LeetCode 第 450 号问题:删除二叉搜索树中的节点。虽然它的难度是 中等,但实际上很好理解,请往下看!题目描述给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 说明:要求算法时间复杂度为 O(h),h 为树的高度。示例:root.转载 2020-06-24 15:40:37 · 619 阅读 · 0 评论 -
拜托,别再问我什么是堆了!
前言堆是生产中非常重要也很实用的一种数据结构,也是面试中比如求 Top K 等问题的非常热门的考点,本文旨在全面介绍堆的基本操作与其在生产中的主要应用,相信大家看了肯定收获满满!本文将会从以下几个方面来讲述堆:生产中的常见问题 堆的定义 堆的基本操作 堆排序 堆在生产中应用生产中的常见问题我们在生产中经常碰到以下常见的问题:优先级队列的应用场景很广,它是如何实现的呢 如何求 Top K 问题 TP99 是生产中的一个非常重要的指标,如何快速计算可能你已经猜到了,以上生产上的高转载 2020-09-01 14:35:56 · 198 阅读 · 0 评论 -
图文详解 DFS 和 BFS
前言深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫等,也频繁出现在 leetcode,高频面试题中。本文将会从以下几个方面来讲述深度优先遍历,广度优先遍历,相信大家看了肯定会有收获。深度优先遍历,广度优先遍历简介 习题演练 DFS,BFS 在搜索引擎中的应用深度优先遍历,广度优先遍历简介深度优先遍历深度优先遍历主要思路是从转载 2020-08-31 15:48:42 · 2568 阅读 · 0 评论 -
算法题275:给定一个链表,返回链表开始入环的第一个节点
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。image示例 2:输入:head = [1转载 2020-08-27 16:43:46 · 478 阅读 · 0 评论