自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 栈的经典算法问题

最大栈的实现方法跟最小栈也十分类似,只有在处理popMax()的时候会有所不同,这里的思路是新建一个数组buffer,检索栈中的元素是否等于最大值,如果不等于则向buffer里放入从栈里pop出来的元素,直到找到最大值元素,然后把最大值元素pop出来,再把buffer里的元素append到原栈里。这算是最经典的栈的问题了,实现这个问题的思路是创建一个栈,遍历整个数组,如果遇到左括号就压栈,如果是右括号就弹栈,最后比较弹栈的元素能不能和遇到的右括号匹配上。为了方便匹配,我们可以创建一个字典来匹配。

2023-08-05 17:58:23 105 1

原创 如何基于数组实现栈

在Python里就是通过对数组操作append()和pop()来实现压栈和弹栈。栈的本质就是先入后出。

2023-08-05 13:01:53 47 1

原创 双指针的妙用

这里的思路是吧数组分成两半,分别反转就可以了,实现简单。注意这里使用了num[:]而不是nums,如果用了nums意思是重新定义一个名叫nums的数组。如果要求数组的区间,依然可以用双指针的思想,用一个新的数组,里面放上tuple表示区间范围,最后在print出来。其中slow来代表更新后的数组,fast用来遍历数组。还可以用冒泡排序,但是冒泡排序时间复杂度为O(n^2),在处理大量数据的时候不占优。这里可以使用两个指针来实现,但是用两个指针也有几种方式。1.1 删除指定值的元素。4. 数组的区间问题。

2023-07-29 19:47:29 51

原创 数组的增删改查

如果有两个单调增的数组,把他们合并可以采用后插法,如果从前往后插入,每次都需要改动后面所有的元素值,但是从后往前插入则会避免这种情况。这里简单的方法是初始化两个值increase 和 decrease, 然后遍历数组两两比较大小,最后返回知否为单调。python里有函数可以很简单的合并两个数组,并且排序,但是一般面试不会让用。数组的增删改查看似简单,但是还要多去操作才能更好的掌握边界值的判断。注意:这里要判断array里到底有没有要删除的元素。这里还可以再优化一下,使用二分查找可以提高查找效率。

2023-07-28 13:09:22 89 1

原创 算法通关村第二关--链表反转进阶

另外,在代码实现过程中出现了下面的错误,在此总结原因 :我把cur放到了循环外层导致了一些问题,假设我在反转1,2,3,4,5,在完成了第一次循环后我的cur为2,但是原链表变成了2,1,3,4,5, 导致2的下一个元素又变成了1 而不是我希望的3,因此陷入了死循环,右图为改正过后的代码。第一个是直接在链表上进行反转,确定好需要反转的区间里面的第一个元素(cur)和反转区间前的那个元素(pre)后,不停的把cur后面那个元素放到pre后面,循环right-left次,即可实现反转。2. 两两交换链表元素。

2023-07-26 13:25:51 93 1

原创 算法通关村第二关 -- 链表反转

1)根据当前的节点cur,找到下一个节点next。2)把当前节点的指针指向前一个节点(head)3)把head节点更新为cur。2. 直接反转链表(重要!最后返回ans.next。4)把cur更新为next。

2023-07-23 15:50:32 85 1

原创 算法通关村第一关-链表经典问题

4)差和双指针:利用双指针和两个链表长度的差值来索引到长链表的中间位置,使得长链表的后半部分和短链表同长,再同时推进双指针来找到相同的节点。3)拼接字符串:可以优化成同时遍历第一个链表和第二个链表,直到便利到最后再从另一个链表的开始继续遍历,直到找到两个指针的值相同的那个。1)使用哈希表与集合:把一串链表放到集合里,再遍历另一个链表。1. 剑指offer52 -- 第一个公共子节点问题。2)使用栈:把两个链表放到栈里,从后往前查找相同的值。

2023-07-21 15:36:40 64 1

原创 算法通关村第一关--链表青铜挑战笔记

其他情况则找到cur元素值为要删除的元素值的位置。找到以后pre元素指针指向cur元素指针指向的元素就可以了。如果不是,使用count来查看要插入的元素的位置(注意用pre的元素查找),找到后先让当前元素的指针指向pre指向的元素,再让pre元素的指针指向新增元素,完成中间元素的插入。尾部:先判断链表是否为空,如果为空链表,直接让head指向当前新增元素就可以。如果不为空,用while找到链表尾部的元素,让尾部元素的next指针指向新增元素。头部:先把新增元素的指针指向head,再让head指向当前元素。

2023-07-18 15:59:47 44 1

空空如也

空空如也

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

TA关注的人

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