![](https://img-blog.csdnimg.cn/20190921152341308.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
文章平均质量分 60
算法总结归纳专栏
程序员大航子
现就职于抖音集团 | 在南方发展的不正经东北人 | 互联网苟且偷生的JAVA开发 | 面试人数超200人 | 关注我不迷路
展开
-
刷穿力扣 | 2. 两数相加
龙哥,你学废了吗?原创 2022-01-11 19:26:38 · 753 阅读 · 1 评论 -
刷穿力扣 | 437. 路径总和 III(一道很多细节的算法题)
元旦做了一个决定,算法是我必须要深入的一门手艺,所以我会要求自己,坚持刷题,而且难题一定要抽出时间死磕。题目原题链接:点击这里难度:中等思路这道题,说老实话,上来我的思路就很明确,dfs就能解,并且在白板上两分钟就截了出来。但是我知道这一定不是最优解,很遗憾,我没能自己想出最优解,看了解题很久才明白过来,这是一道很有技巧的算法题,这里会把两种解法都贴出来,dfs和前缀和。所谓dfs暴力解法,就是穷举所有节点为路径和的初始节点,然后向下递归,每一个节点作为路径和的初始节点有多少满足情况的,再.原创 2022-01-05 01:45:05 · 429 阅读 · 0 评论 -
刷穿力扣 | 390. 消除游戏
题目原题目地址传送难度:中等思路这道题,一上来肯定很多人都在想直接按照题目的意思开始操作,构建一个集合,然后正着遍历,删除1、3、5… 然后倒着遍历,删除删除1、3、5… 这样做当然是可以的,但是可能会超时。其实,我们主要想获取的元素,就是最后剩下的那一个元素,这个元素最后必然是数组中唯一的一个元素,并且索引值为0,我们只需要跟随着删除的步伐,不断的确定下一次删除操作,数组中剩余的那个起始元素是什么就好了,直到数组中只剩下一个元素,就把这个元素返回就好了。(这里我们把一次整体的删除操作叫做一次删原创 2022-01-02 18:04:53 · 4741 阅读 · 0 评论 -
将一维数组转变成二维数组,力扣2022第一题,祝大家新年快乐
力扣2022开年第一题,祝大家新年开心快乐!原创 2022-01-01 22:46:17 · 566 阅读 · 0 评论 -
【力扣刷题】最长回文子串
【力扣刷题】最长回文子串题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案示例 2:输入: “cbbd”输出: “bb”思路这道题的第一个思路就是使用穷举的方法,穷举出所有的子串,然后判断每一个子串是否为回文子串,然后返回最长的那个,这样的话,穷举所有的子串,需要O(n ^ 2),判断回文串还需要O(n),这样一共就需要O(n ^ 3)我们可以使原创 2021-01-06 14:06:40 · 816 阅读 · 1 评论 -
剑指大厂 | 打家劫舍系列(dp)
打家劫舍系列这个系列的问题一共有三个,题目如下:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 =原创 2020-12-09 16:49:14 · 318 阅读 · 1 评论 -
力扣数据结构 | 有效的括号
有效的括号这道题比较简单,但是很有代表性,和计算器大体实现的原理差不多题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出:原创 2020-12-08 11:29:37 · 330 阅读 · 0 评论 -
手撕 | FIFO缓存
底层维护了一个队列,越先进队列的,越先被淘汰package com.darwin.redis.eliminated;import java.util.HashMap;import java.util.Map;/** * FIFO Java代码实现 * @author yanghang */public class FIFOUtil { /** * 用来快速定位节点位置 */ private final Map<String, Node>原创 2020-10-30 11:44:22 · 386 阅读 · 1 评论 -
剑指offer | 面试题15:二进制中1的个数
转载本文章请标明作者和出处本文出自《爱喝纯净水的南荣牧歌》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2;示例 1:输入:00000000000000000000...原创 2020-04-02 18:41:25 · 414 阅读 · 1 评论 -
剑指offer | 面试题12:矩阵中的路径
转载本文章请标明作者和出处本文出自《爱喝纯净水的南荣牧歌》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下...原创 2020-03-27 02:09:38 · 386 阅读 · 1 评论 -
剑指offer | 面试题4:二维数组中的查找
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数;示例现有矩阵 matrix 如下...原创 2020-03-17 21:57:27 · 300 阅读 · 1 评论 -
剑指offer | 面试题3:数组中重复的数字
转载本文章请标明作者和出处本文出自《爱喝纯净水的南荣牧歌》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字;示例1输...原创 2020-03-17 01:40:56 · 353 阅读 · 1 评论 -
剑指offer | 面试题11:旋转数组的最小数字
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1;...原创 2020-03-16 13:40:52 · 284 阅读 · 1 评论 -
剑指offer | 面试题57:和为s的两个数字
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可;示例 1输入:nums = [2,7,11,15], target = 9输出:[2,7...原创 2020-03-15 01:04:31 · 327 阅读 · 1 评论 -
剑指offer | 面试题63:股票的最大利润
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例一输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股...原创 2020-03-14 01:57:40 · 400 阅读 · 1 评论 -
剑指offer | 面试题47:礼物的最大价值
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多...原创 2020-03-13 13:56:41 · 458 阅读 · 1 评论 -
剑指offer | 面试题5:替换空格
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目请实现一个函数,把字符串 s 中的每个空格替换成"%20"示例输入:s = "We are happy."输出:"We%20are%20happy."解题分析这道题比较简单,但是有点意外的是,我做完之后...原创 2020-03-13 01:34:08 · 300 阅读 · 0 评论 -
剑指offer | 面试题66:构建乘积数组
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法示例输入: [1,2...原创 2020-03-12 13:45:06 · 95843 阅读 · 1 评论 -
剑指offer | 面试题40:最小的k个数
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4;示例1输入:arr = [3,2,1], k = 2输出:[1,2] 或者 ...原创 2020-03-11 21:26:41 · 609 阅读 · 1 评论 -
剑指offer | 面试题30:包含min函数的栈
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)示例MinStack minStack = new MinStack...原创 2020-03-09 13:49:55 · 396 阅读 · 0 评论 -
剑指offer | 面试题9:用两个栈实现队列
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )...原创 2020-03-08 18:08:13 · 404 阅读 · 1 评论 -
剑指offer | 面试题34:二叉树中和为某一值的路径
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 sum = 22,返回[ [5,4...原创 2020-03-08 02:05:19 · 318 阅读 · 1 评论 -
剑指offer | 面试题33:二叉搜索树的后序遍历序列
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同;参考以下这颗二叉搜索树:示例 1:输入: [1,6,3,2,5...原创 2020-03-03 01:38:28 · 463 阅读 · 0 评论 -
剑指offer | 面试题21:调整数组顺序使奇数位于偶数前面
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜...原创 2020-02-29 03:07:51 · 374 阅读 · 1 评论 -
剑指offer | 面试题68 - II. 二叉树的最近公共祖先
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也...原创 2020-02-28 01:24:27 · 365 阅读 · 1 评论 -
剑指offer | 面试题68 - I.二叉搜索树的最近公共祖先
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节...原创 2020-02-26 23:37:00 · 518 阅读 · 0 评论 -
剑指offer | 面试题18:删除链表的节点
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点;返回删除后的链表的头节点;此次照原题有些许改动,参照leetcode删除节点5;解题分析首先,这道题,我们要知道,单向链表的特点,单向链...原创 2020-02-26 00:48:15 · 1231 阅读 · 1 评论 -
剑指offer | 面试题55 - II. 平衡二叉树
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树;给定如图的二叉树,返回true;解题分析什么是平衡二叉树,在题干中就给出了解释;所谓平...原创 2020-02-25 00:08:37 · 2356 阅读 · 1 评论 -
剑指offer | 面试题55 - I.二叉树的深度
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度;给定如图的二叉树,返回它的最大深度3;解题分析求最大的深度,我们常规来想需要探索到每一...原创 2020-02-24 13:00:33 · 7870 阅读 · 1 评论 -
剑指offer | 面试题53 - I.数字在排序数组中出现的次数
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目统计一个数字在排序数组中出现的次数示例:输入: nums = [5,7,7,8,8,10], target = 8输出: 2解题分析首先我们分析一下题干,一个排序的数组,我们应该下意识的相到,排序的数组,百分之9...原创 2020-02-23 18:07:07 · 7939 阅读 · 0 评论 -
剑指offer | 面试题53 - II. 0~n-1中缺失的数字
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字示例:输入: [0,1,3]输出: 2解题分析首...原创 2020-02-23 16:08:41 · 9839 阅读 · 1 评论 -
剑指offer | 面试题7:重建二叉树
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建...原创 2020-02-22 23:09:09 · 1125 阅读 · 1 评论 -
剑指offer | 面试题54:二叉搜索树的第k大节点
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目给定一棵二叉搜索树,请找出其中的第k小的结点。例如, 如下图(5,3,7,2,4,6,8) 中,按节点数值大小顺序第三小结点的值为4二叉树的定义如下:public class TreeNode { in...原创 2020-02-22 01:47:48 · 8730 阅读 · 1 评论 -
剑指offer | 面试题25:合并两个排序的链表
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是依照递增排序的。例如链表1和链表2合并之后的升序链表就是链表3;链表定义如下:public class ListNode { // 链表值 ...原创 2020-02-20 22:24:49 · 8736 阅读 · 0 评论 -
剑指offer | 面试题52:两个链表的第一个公共节点
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目输入两个链表,找出它们的第一个公共节点;如下,第一个公共节点为节点6;解题分析首先以图示例,图中有两个链表相交与节点6,问公共节点是什么?这道题第一个我的想法是使用哈希表(HashMap)来解决,我们可以首先找一...原创 2020-02-19 16:21:35 · 9871 阅读 · 0 评论 -
剑指offer | 面试题42:连续子数组的最大和
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如:输入的数组为{1, -2, 3, 10, -4, 7, 2, -5},和最大的子...原创 2020-02-19 02:08:26 · 10469 阅读 · 0 评论 -
剑指offer | 面试题27:二叉树的镜像
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目请完成一个函数,输入一颗二叉树,该函数出处它的镜像。二叉树的节点定义如下public class TreeNode { public int val; public TreeNode left; ...原创 2020-02-18 15:09:50 · 11472 阅读 · 0 评论 -
剑指offer | 面试题23:链表中环的入口结点
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目一个链表中包含环,如何找出环的入口结点?如下图,环的入口节点是3解题分析这道题,首选用我们程序员的思维抽象一下,其实就是在遍历链表的时候找到第一个重复节点,这个节点就是入环点,如果遍历的过程中,写一个节点是空的话,就...原创 2020-02-18 00:52:17 · 83122 阅读 · 0 评论 -
剑指offer | 面试题39:数组中出现次数超过一半的数字
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解题分析...原创 2020-02-17 16:05:03 · 13132 阅读 · 0 评论 -
剑指offer | 面试题24:反转链表
转载本文章请标明作者和出处本文出自《Darwin的程序空间》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转过后的链表的头节点。链表的节点定义如下:public class ListNode { // 链表值 public int val; /...原创 2020-02-17 00:38:16 · 13677 阅读 · 0 评论