
每日一题
文章平均质量分 65
希望通过本专栏能帮助小白求职者,弥补算法学习上的不足,直击面试真题。通过有系统的分类练习,达到手撕代码,拿到心仪offer的目的!
AI 菌
算法工程师一枚,优快云博客专家;NLP、CV、语音算法跨界选手,欢迎一起交流学习!
展开
-
【经典算法】秒懂反转链表
经典链表反转问题秒懂解法!原创 2025-02-09 16:48:15 · 812 阅读 · 0 评论 -
【贪心策略】背包问题——阿里巴巴与四十大盗
贪心策略原创 2021-09-07 21:53:59 · 1542 阅读 · 2 评论 -
LeetCode解题目录
本目录用来收录一些经典的、常考的数据结构与算法题,每一题都有相应的解析,可供学习和参考。已解题目难度把数组排成最小的数简单二、数组已解题目难度把数组排成最小的数简单买卖股票的最佳时机简单旋转数组简单加一简单两个数组的交集中等最长公共前缀中等三、链表已解题目难度返回倒数第K个节点简单合并两个有序链表简单回文链表.原创 2021-07-31 22:14:17 · 1178 阅读 · 1 评论 -
【字符串】实现strStr()——查找子串位置
一、题目实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。二、题解解析1: 对于本题,最简单原创 2021-07-09 14:04:19 · 2240 阅读 · 3 评论 -
【字符串/栈】有效的括号(leetcode20)
一、题目给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。二、分析有效的括号应该满足:每一个左括号,在恰当的位置都会有一个右括号与之对应。简单来讲,本题可看作是一个消消乐游戏,从左向右遍历字符串,当左括号找到恰当位置的右括号时,就将这对括号消掉。当遍历结束时,所有的括号对都消除了,那么字符串s满足要求,返回true;否则,返回false。由于是按照从左向右原创 2021-07-08 18:30:33 · 1023 阅读 · 0 评论 -
【栈】化栈为队(实现push、pop、peak、empty等操作)
一、题目实现一个MyQueue类,该类用两个栈来实现一个队列。二、分析本题是 两栈实现队列 的加强版,在原来只实现push和pop的基础上,新增了实现peak()和empty()的要求。思路还是一样,可以先参考之前的题解,在来看这一题就简单多了。需要注意的是:本题没有说明当队列中没有元素时,如果执行pop(),应该返回什么。考虑到代码的完整性,这里我默认返回的是-1。三、题解C++实现如下:class MyQueue {public: /** Initialize your da原创 2021-07-08 16:16:04 · 1603 阅读 · 0 评论 -
【栈】用俩个栈来实现队列(剑指Offer 09)
简明扼要,几乎双百的答案!原创 2021-07-08 14:38:38 · 1080 阅读 · 2 评论 -
【栈】无法吃午餐的学生数量(leetcode1700)
一、题目学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 栈 里,每一轮:如果队列最前面的学生 喜欢 栈顶的三明治,那么会 拿走它 并离开队列。否则,这名学生会 放弃这个三明治 并回到队列的尾部。这个过程会一直持续到队列里所有学生都不喜欢栈顶的三明治为止。给你两个整数数组 students 和 sandwiches ,其中 sandwiches[i] 是栈原创 2021-07-08 09:45:32 · 1994 阅读 · 1 评论 -
【二叉树】二叉搜索树中的众数(leetcode501)
一、题目给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值结点右子树中所含结点的值大于等于当前结点的值左子树和右子树都是二叉搜索树二、 题解根据二叉搜索树的性质可知,二叉搜索树的中序遍历序列是一个非递减的有序序列。所以对于中序遍历序列,重复的数一定是连续出现的。因此,本题我们可以进行如下处理:顺序扫描中序遍历序列,用 base 记录当前的数字,用 count 记录当前数字重原创 2021-07-07 23:54:05 · 1052 阅读 · 2 评论 -
【栈】用队列实现栈(Leetcode225)
一、题目请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、s原创 2021-07-07 22:17:26 · 1094 阅读 · 1 评论 -
【栈】最小栈(LeetCode155)
一、题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/min-stack著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。二、解析对于栈结构来说,具有天然的先进后出的性质原创 2021-07-07 16:50:40 · 1266 阅读 · 0 评论 -
【Leetcode】删除链表中的重复元素
一、题目存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素只出现一次。返回同样按升序排列的结果链表。二、解析对于此题,我的解题步骤如下:创建两个指针pre、curr,分别表示历史指针、当前指针。从链表的首位置开始,移动curr一步,并与pre的值相比较。如果相同,则跳过中间指针,将pre指向curr->next。但此时不更新pre,因为还需确定下一个元素是否与pre相同; 如果不同,则跟新pre。重复2、3步骤。三、实现以上思路原创 2021-07-07 13:31:15 · 1071 阅读 · 0 评论 -
【链表】删除链表的节点( leetcode18)
一、题目给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。二、题解本题是一道简单的套路题,首先回忆一下删除链表节点的操作:首先定义两个指针pre、curr;然后从首到尾遍历一次链表,如果要删除当前节点,只需要:pre->next = curr->next。关键在于:head->val也有可能等于val,所以本题返回的不是head,而是第一个不等于val值的节点。具体做法也很简单,只需在遍历之前,加上:while(head){原创 2021-07-07 13:27:12 · 1057 阅读 · 0 评论 -
相交链表Leetcode
一、题目给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。二、题解根据题意,两个链表相交的点是原创 2021-07-04 12:53:25 · 949 阅读 · 0 评论 -
快速排序——寻找数组第K大数(由浅入深,四种方法对比讲解!)
寻找数组第K大数是大厂面试中经常考到的一题,有的小机灵鬼直接用sort()进行排序,两行代码解决,这样看似可行,实则掉入了出题人的陷阱!原创 2021-06-05 00:17:34 · 20801 阅读 · 14 评论 -
【最小路径和】系列汇总,持续更新!
文章目录一、最小路径和(LeetCode 64)题目解析二、下降路径最小和(LeetCode 931)题目题解一、最小路径和(LeetCode 64)题目给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。提示:m == grid.lengthn == grid[i].length1 <= m, n <= 2000 <= grid[i][j] <= 100原创 2021-04-26 16:31:59 · 1464 阅读 · 5 评论 -
动态规划系列汇总,持续更新!
这次彻底把动态规划弄懂了!原创 2021-04-13 00:06:23 · 2543 阅读 · 10 评论 -
【每日一题】链表系列(3) —— 回文链表
每日一题,保持算法思维!原创 2021-03-17 23:08:52 · 1295 阅读 · 0 评论 -
图解经典“汉诺塔“问题,教你如何手撕递归!
直接面试现场,轻松揭开经典《汉诺塔问题》!原创 2020-10-07 02:24:09 · 2958 阅读 · 3 评论 -
【每日一题】数组系列(6) —— 加一
每日一题,保持算法思维!原创 2021-03-16 15:22:46 · 1300 阅读 · 1 评论 -
【每日一题】数组系列(5) —— 旋转数组
每日一题,保持算法思维!原创 2021-03-14 13:51:01 · 1437 阅读 · 0 评论 -
【每日一题】数组系列(4) —— 买卖股票的最佳时机
每日一题,保持算法思维!原创 2021-03-13 23:14:48 · 1510 阅读 · 0 评论 -
【每日一题】数组系列(3) —— 最长公共前缀
每日一题,保持算法思维!原创 2021-03-11 16:09:39 · 1346 阅读 · 0 评论 -
【每日一题】数组系列(2) —— 两个数组的交集
每天一题,Offer到手!原创 2021-03-10 15:34:16 · 1326 阅读 · 0 评论 -
【每日一题】数组系列(1) —— 把数组排成最小的数
一文打通:排序、自定义排序、整型与字符串型互转原创 2020-04-09 12:50:36 · 1485 阅读 · 29 评论 -
【每日一题】链表系列(2) —— 合并两个有序链表
写在前面:大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我热爱AI、热爱分享、热爱开源! 这博客是我对学习的一点总结与思考。如果您也对 深度学习、机器视觉、算法、C++、Python 感兴趣,可以关注我的动态,我们一起学习,一起进步~我的博客地址为:【AI 菌】的博客文章目录一、 题目(LeetCode)二、 解法一:递归2.1 解题过程2.2 题目解答三、 解法二:迭代3.1 解题过程3.2 题目解答温馨提示:如果您对链表的结构还不了解,建议先加一个餐:【算法与数据结构 04】多图讲解——线.原创 2020-08-22 23:22:43 · 2042 阅读 · 2 评论 -
【每日一题】链表系列(1) —— 返回倒数第k个结点
程序员面试必刷题!原创 2020-08-22 18:51:43 · 1642 阅读 · 3 评论 -
【每日一题】队列系列(1) —— 滑动窗口最大值
class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { vector<int> ans; int max; for(int i=0; i<nums.size()-k+1; ++i){ max = nums[i]; for(int j=i; j<原创 2021-03-09 16:15:20 · 1356 阅读 · 0 评论 -
【每日一题】栈系列(1) —— 基本计算器
每日一题,保持算法思维!原创 2021-03-12 14:09:53 · 1403 阅读 · 0 评论 -
OJ刷题准则,拒绝暴力求解
写在前面:大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我热爱AI、热爱分享、热爱开源! 这博客是我对学习的一点总结与记录。如果您也对 深度学习、机器视觉、算法、Python、C++ 感兴趣,可以关注我的动态,我们一起学习,一起进步~我的博客地址为:【AI 菌】的博客我的Github项目地址是:【AI 菌】的Github时间和空间复杂度是算法中很重要的概念,同时在面试中也会经常要求分析代码的时空复杂度。因此,我们在OJ平台上做每一道题时,在思考算法时也应该大致分析一下自己代码的时空复杂度,切勿盲.原创 2021-03-10 09:32:13 · 1539 阅读 · 2 评论