Hilda

「离开世界之前 一切都是过程」

015 最小栈-力扣155

实现常数时间获取最小值的栈(MinStack)。主流方法是维护一个辅助栈记录每个位置的最小值,保证getMin()的O(1)复杂度。文章展示了基于Java内置栈、数组以及单链表三种实现方式,链表解法每个节点额外存储当前最小值。

概览: 155. 最小栈 力扣155. 最小栈 155. 最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆栈顶...

014【入门】队列和栈入门题目-栈和队列相互实现

本篇介绍了如何用栈模拟队列(均摊O(1))和用队列模拟栈。栈模拟队列使用双栈倒数据,需注意倒数据时机和完整性。队列模拟栈,可用双队列或单队列实现,单队列每次push时需将之前元素重排。双端队列ArrayDeque也可高效实现栈。

概览 用栈实现队列 题目是:232. 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回队列开头的元素 boolean empty(...

013【入门】队列和栈-链表、数组实现

本博客介绍了队列和栈的基本概念及其链表和数组实现。队列遵循先进先出(FIFO)原则,而栈遵循后进先出(LIFO)原则。重点讲解了数组实现队列时环形队列的设计,以及栈和队列的常见操作。最后通过力扣622题展示了环形队列的实际应用和解法。

概览 前置知识:链表 建议:比较初级,会的可以跳过,但是要注意环形队列用数组实现这个高频考点 1)队列的介绍 2)栈的介绍 3)队列的链表实现和数组实现 4)栈的数组实现 5)环形队列用数组实现 队列、栈、双端队列可以组成非常多重要的数据结构 将在【必备】课程里继续 本节涉及的力扣题目:622. 设计循环队列 队列的介绍 先到先出,尾巴进,头部出 【队列的实...

012 链表入门题目-划分链表-哑节点

此博客讲解了链表分隔(力扣86):将链表按给定值x分成小于x和大于等于x两部分,保持原相对顺序。核心是用两个哑节点分别指向两部分链表头,遍历原链表并按节点值连接到对应哑节点后,拼接两链表。补充题是力扣328-奇偶链表,思路类似。

概览: 前置知识:理解链表及其基本调整 建议:做过这个题86. 分隔链表的同学跳过 给你一个链表的头节点 head 和一个特定值 x 请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前 你应当 保留 两个分区中每个节点的初始相对位置 链表题目在笔试、面试中的意义就是检验coding能力如何 更难的题目会在【必备】课程里讲述 86....

011 链表入门题目-两个链表相加

本博客讲解了力扣2.两数相加,用链表逆序存储非负整数,并返回它们的和(链表形式)。解题思路是模拟手算加法,处理进位。代码部分提供了Java实现。此外,博客还补充了力扣67.二进制求和,思路类似。

概览: 前置知识:理解链表及其基本调整 建议:做过这个题2. 两数相加的同学跳过 给你两个 非空 的链表,表示两个非负的整数 它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字 请你将两个数相加,并以相同形式返回一个表示和的链表 你可以假设除了数字 0 之外,这两个数都不会以 0 开头 链表题目在笔试、面试中的意义就是检验coding能力如何 ...

010 链表入门题-力扣21-合并两个升序链表

这篇博客讲解了如何合并两个升序链表(LeetCode 21)。提供了递归和非递归两种解法。递归解法简洁,通过比较头节点大小,递归合并剩余部分。非递归解法则通过迭代,使用 pre 指针连接较小节点,最终合并两个链表。链表题能有效考察编码能力。

概览: 前置知识:理解链表及其基本调整 建议:做过这个题的同学跳过 将两个升序链表合并为一个新的 升序 链表并返回 新链表是通过拼接给定的两个链表的所有节点组成的 链表题目在笔试、面试中的意义就是检验coding能力如何 更难的题目会在【必备】课程里讲述 测试链接 : https://leetcode.cn/problems/merge-two-sorted-lists...

009 单双链表及其反转-堆栈诠释

这篇博客主要讲解链表相关知识,首先强调了按值传递与按引用传递的区别。然后介绍了单链表和双链表的定义,并重点通过 LeetCode 206和92 题详细讲解了链表反转的迭代解法,展示了使用指针调整链表结构的思路,最后给出了双链表反转的迭代代码。作者认为链表题是检验编码能力的重要手段。

概览: 1)按值传递、按引用传递 (我不知道为什么如此多的同学会犯这种错误,这完全是语言问题) 2)单链表、双链表的定义 3)根据反转功能,彻底从系统角度解释链表是如何调整的 链表题目在笔试、面试中的意义就是检验coding能力如何 更难的题目会在【必备】课程里讲述 1 按值传递、按引用传递 左老师讲了Java中的按值传递、按引用传递。结合我个人的一些理解,我将其书面的...

023 随机快速排序

经典随机快速排序和用荷兰国旗问题优化后的随机快速排序。经典快排易受重复元素影响,优化后的版本通过荷兰国旗问题将数组划分为小于、等于、大于x三部分,提升效率。文章分析了普通快排和随机快排在不同情况下的时间和空间复杂度,强调随机选择的重要性,并指出随机快排的期望时间复杂度为O(n log n),空间复杂度为O(log n)。

概览: 前置知识:讲解007-时间复杂度和空间复杂度-分析随机行为的时间复杂度的部分 007笔记 经典随机快速排序流程讲解 荷兰国旗问题优化随机快速排序流程讲解 荷兰国旗问题优化后的过程: 在当前范围上选择一个数字x,利用荷兰国旗问题进行数组的划分,<x =x >x 对<x范围重复这个过程,对>x范围重复这个过程 荷兰国旗问题的优化点:选出一个数字x,数...

008 数据结构和算法 简介

左老师将算法分为硬计算(精确求解,复杂度可能高,程序员必备,面试常考)和软计算(逼近求解,时间可控,算法工程师需要)两类。数据结构则宏观地分为连续结构和跳转结构,所有数据结构都是这两者的组合。

概览:(下面的“我”指左老师本人) 说一个我觉得比较有趣、有用的算法分类 硬计算类算法、软计算类算法 注意:这两个名词都不是计算机科学或算法中的标准术语 那为啥要提这个呢?因为很有现实意义。 硬计算类算法:精确求解。但是某些问题使用硬计算类的算法,可能会让计算的复杂度较高 大厂算法和数据结构笔试、面试题、acm比赛或者和acm形式类似的比赛,考察的都是硬计算类算法。 软计算类算...

java基础(1) 按值传递

Java 采用按值传递,方法接收的是实参值的副本。基本类型传递值的副本,引用类型传递对象地址的副本。方法内修改对象会影响原始对象,但重新赋值引用不会。可理解为“按引用传递”传递地址副本,但Java始终传递的是值的副本。设计目的是规避C/C++指针的复杂性,利于工程开发。

首先 这篇介绍的是Java中的按值传递和按引用传递。 需要明确的是Java只有按值传递,所谓的“按引用传递”其实传递的是实参引用的对象在堆中的地址。 1 实参和形参 实参(实际参数,Arguments):用于传递给函数/方法的参数,必须有确定的值。 形参(形式参数,Parameters):用于定义函数/方法,接收实参,不需要有确定的值。 看一个例子: 1 2 3...