自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 算法通关村——表达式问题(栈)

计算器是个非常常见的问题。如LeetCode227.给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。解决运算器问题,最好的工具就是栈。由于乘除优先于加减计算,因此不妨考虑先进行所有乘除运算,并将这些乘除运算后的整数值放回原表达式的相应位置,则随后整个表达式的值,就等于一系列整数加减后的值。基于此,我们可以用一个栈,保存这些(进行乘除运算后的)整数的值。对于加减号后的数字,将其直接压入栈中;

2023-11-22 10:42:12 200

原创 算法通关村——栈的经典算法

栈的典型题目还是非常明显的,括号匹配、表达式计算等等几乎都少不了栈,本小节我们就看两个最经典的问题。LeetCode20-有效的括号本题还是比较简单的,其中比较麻烦的是如何判断两个符号是不是一组的,我们可以用哈希表将所有符号先存储,左半边做,右半边做。遍历字符串的时候,遇到左半边符号就入栈,遇到右半边符号就与栈顶的符号比较,不匹配就返回false。

2023-11-21 15:00:52 255 1

原创 算法通关村——如何基于数组(或链表)实现栈

栈和队列是比较特殊的线性表,又称之为访问受限的线性表。栈是很多表达式、符号等运算的基础,也是递归的底层实现。理论上递归能做的题目栈都可以,只是有些问题用栈会非常复杂。栈底层实现仍然是链表或者顺序表,栈与线性表的最大区别是数据的存取的操作被限制了,其插入和删除操作只允许在线性表的一端进行。一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(Bottom),同时把插入元素的操作称为入栈(Push),删除元素的操作称为出栈(Pop)。

2023-11-20 16:50:02 226 1

原创 算法通关村——查询元素专题(数组)

数组中出现次数超过一半的数字这是剑指offer中的一道题目,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。不存在则输出0.

2023-11-18 20:04:40 428 1

原创 算法通关村——移动元素专题(数组)

根据某些条件移动元素也是一类常见的题目,例如排序本身就是在移动元素。LeetCode905,给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。返回满足此条件的 任一数组 作为答案。最直接的方式是使用一个临时数组,第一遍查找并将所有的偶数复制到新数组的前部分,第二遍查找并复制所有的奇数到数组后部分。这种方式实现比较简单,但是如果我只想用空间复杂度为O(1)的呢?我们可以采用对撞型双指针的方法,只不过比较的对象是奇数还是偶数。

2023-11-15 11:11:10 193 1

原创 算法通关村——删除元素(数组)

这里介绍一种简单但非常有效的方式——双指针。所谓的双指针其实就是两个变量,不一定真的是指针。双指针思想简单好用,在处理数组、字符串等场景下很常见。看个例子,从下面序列中删除重复元素[1,2,2,2,3,3,3,5,5,7,8],重复元素只保留一个。删除之后的结果应该为[1,2,3,5,7,8]。我们可以在删除第一个2时将将其后面的元素整体向前移动一次,删除第二个2时再将其后的元素整体向前移动一次,处理后面的3和5都一样的情况,这就导致我们需要执行5次大量移动才能完成,效率太低。

2023-11-14 16:53:07 148 1

原创 算法通关村——了不起的数组

为什么数组的题目特别多呢,因为很多题目本质就是查找问题,而数组是查找的最佳载体。例如序列是 1 2 3 4 5 6 7 8 9 ,要删除5,则应先遍历,找到5,然后从5开始执行删除操作,也就是从6开始逐步覆盖上一个元素,最终将序列变成1 2 3 4 6 7 8 9 [9]将给定的元素插入到有序数组的对应位置中,我们可以先找位置,再将其后元素整体右移,最后插入到空位置上。所以要分为两个步骤,先从最左侧开始查是否存在元素,如果元素存在,则从该位置开始执行删除操作。

2023-11-13 17:16:12 133

原创 算法通关村——单链表加1

用一个 非空 单链表来表示一个非负整数,然后将这个整数加一。你可以假设这个整数除了 0 本身,没有任何前导的 0。这个整数的各个数位按照 高位在链表头部、低位在链表尾部 的顺序排列。

2023-11-10 14:02:47 354 1

原创 通关算法村—— 反转链表 II

LeetCode92,给你单链表的头指针 head 和两个整数 left 和 right ,其中 left

2023-11-09 13:50:07 402

原创 通关算法村——手写链表反转

链表反转是一个出现频率特别高的算法。

2023-11-08 11:12:25 60 1

原创 算法通关村——相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null。一个结点可以被多指向,但是只可有一个后继结点。如下图则就是错误的第一张图:c1被a2和b2同时指向是没关系的。但是第二张图:c1同时指向a5和b4就是错误的。

2023-10-19 23:05:02 84 1

原创 算法通关村——链表笔记(Java)

在JVM里有栈区和堆区,栈区主要存引用,也就是一个指向实际对象的的地址(类似于指针),而堆区存的才是创建的对象。这里的Score就是指向堆的引用。假如我这样定义?这时候next就指向下一个同为Course的对象了这里通过栈中的引用(也就是地址)就可以找到val(1),然后val(1)结点又存了指向val(2)的地址,而val(3)又存了指向val(4)的地址,所以就构造出了一个链条访问结构。在Java中有两种定义链表的方法。

2023-10-18 23:46:28 75

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除