自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Typora快捷键

Typora快捷键

2024-04-27 12:53:44 153

原创 算法学习笔记6 | 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和 | 代码随想录

再遍历nums2,如果所对应的哈希表中的数为1,则说明该数重复出现了,将该数插入交集数组并将哈希表中对应的数改为2。在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。因为本题,我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适。空间复杂度: O(logn)

2024-03-12 15:00:06 537 1

原创 算法学习笔记14 | 二叉树的非递归遍历/迭代法(前序遍历、中序遍历、后序遍历) | 代码随想录

在循环中,要一路向左并沿路把遍历到的节点放到栈中。如果遍历到空,就弹出一个节点,并遍历到这个节点的右节点。注意循环条件为栈不为空或者当前遍历的节点不为空。在循环中,先将不为空的中节点入栈,再出栈并放入数组。然后先让右孩子节点入栈,再让左孩子节点入栈,这样先出栈的就是左孩子。直到栈为空,那么得到的数组就是前序遍历结果(中左右)。如果把入栈顺序改为先入左孩子再入右孩子,得到的结果就是中右左,这样翻转(reverse)整个数组后,最终得到的结果就是左右中,即为后序遍历。用栈来实现二叉树的非递归遍历/迭代法。

2024-03-11 11:08:09 377

原创 算法学习笔记13 | 二叉树的递归遍历(前序遍历、中序遍历、后序遍历) | 代码随想录

这三题递归函数的参数是根节点root和操作的数组result,无返回值;终止条件是遇到空节点NULL;注意这里在函数中对数组进行操作时,传入的参数一定是数组的引用vecctor< int >&给你二叉树的根节点 root ,返回它节点值的前序遍历、中序遍历、后序遍历。前序遍历:先放遍历的中节点到数组,再向左遍历左节点,再向右遍历右节点。中序遍历:先向左遍历左节点,再放遍历的中节点到数组,再向右遍历右节点。后序遍历:先向左遍历左节点,再向右遍历右节点,再放遍历的中节点到数组。

2024-03-11 07:19:55 284

原创 算法学习笔记12 | 二叉树理论基础 | 代码随想录

如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。 深度:k 节点数量:(2^k)-1

2024-03-11 05:49:01 531

原创 算法学习笔记 11 | 239. 滑动窗口最大值 、1047. 删除字符串中的所有相邻重复项 、150. 逆波兰表达式求值 | 代码随想录

每次移动都push一个再pop一个,如果push的时候发现前面有比它小的元素,那么直接把前面的元素pop掉(使用deque的pop_back()可以从队尾弹出元素)。然后使用一个小顶堆去遍历这个map(小顶堆弹出的是最小元素),小顶堆只有k个元素,那么最终留下来的就是出现频率前 k 高的元素。输入:nums = [1,3,-1,-3,5,3,6,7], k = 3。输入: nums = [1,1,1,2,2,3], k = 2。输入:nums = [1], k = 1。输出:[3,3,5,5,6,7]

2024-03-06 10:38:28 469 1

原创 算法学习笔记 10 | 20. 有效的括号 、1047. 删除字符串中的所有相邻重复项 、150. 逆波兰表达式求值 | 代码随想录

注意:string转为int可以用stoi()函数,string转为long可以用stol()函数,string转为long long可以用stoll()函数。所以这里用栈的方法,遇到数字的时候则存入栈中,遇到操作符的时候就从栈顶取两个元素进行表达式操作,再将结果放入栈中。最后栈中所剩下的那个元素就是题目要求的元素。这题的解法为:当遍历字符串的时候,遇到一个左括号,则将对应的右括号插入栈。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。

2024-03-06 05:45:24 683 1

原创 算法学习笔记 9 | 栈与队列基础 、232.用栈实现队列 、225. 用队列实现栈 | 代码随想录

想用栈实现队列的先入先出,则需要用到两个栈,一个用来入栈一个用来出栈,而出栈的顺序就是题目所规定的顺序。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。这道题可以用两个队列模拟栈,也可以用一个队列模拟栈。栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现。

2024-03-05 06:48:37 1100 1

原创 算法学习笔记 8 | 344.反转字符串 、541. 反转字符串II 、151.翻转字符串里的单词、拓展题 | 代码随想录

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。将字符串扩容,把前半部分添加到最后,再将题目所要的这部分字符串挪到前面,最后缩容为原长度的字符串。这样一来留下的就是题目要返回的字符串。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

2024-03-05 03:52:09 621 1

原创 算法学习笔记 7 | 454.四数相加II 、383. 赎金信 、15. 三数之和、18. 四数之和 | 代码随想录

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。给你一个由 n 个整数组成的数组 nums ,和一个目标值 target。只要判断ransomNote中每个字母出现的次数小于等于该字母在magazine中出现的次数,就返回true,否则返回false。四数之和延续了三数之和的思想,只不过把对i的for循环变为对i和j的双层for循环。

2024-03-04 09:10:41 1033

原创 算法学习笔记 5 | 哈希表理论基础 | 代码随想录

由于题目说数组中的元素小于等于1000,所以可以定义一个大小为1001的哈希表。如果nums1中出现了某数字,则将哈希表中对应的数改为1。再遍历nums2,如果所对应的哈希表中的数为1,则说明该数重复出现了,将该数插入交集数组并将哈希表中对应的数改为2。set中的元素是按照一定的顺序进行存储和访问的。所以这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。如果两个字符串为有效的字母异位词,那么数组arr的每个元素应该为零。

2024-03-03 13:57:36 802

原创 算法学习笔记 4 | 24. 两两交换链表中的节点、19. 删除链表的倒数第N个节点、142. 环形链表II | 代码随想录

可以使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环(当慢指针进入环中后,相当于快指针在每次多移一个节点去追赶慢指针)。时间复杂度: O(n),快慢指针相遇前,指针走的次数小于链表长度,快慢指针相遇后,两个index指针走的次数也小于链表长度,总体为走的次数小于 2n。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。空间复杂度:O(1)

2024-03-03 06:05:16 517

原创 算法学习笔记 3 | 203.移除链表元素 、707.设计链表 、206.反转链表 | 代码随想录

void addAtIndex(int index, int val) 将一个值为 val 的节点插入到链表中下标为 index 的节点之前。在插入完成后,新节点会成为链表的第一个节点。val 是当前节点的值,next 是指向下一个节点的指针/引用。void addAtTail(int val) 将一个值为 val 的节点追加到链表中作为链表的最后一个元素。(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针)。链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上。

2024-03-02 15:24:46 692

原创 算法学习笔记 2 | 977. 有序数组的平方、209. 长度最小的子数组、59.螺旋矩阵II | 代码随想录

当找到总和大于target的子数组时,用一个while将慢指针前移,直到找到最小长度的子数组。每一圈包含了四条边,边的长度和offset有关,每转一圈offset要加一。最两边的数的平方一定大于中间数的平方,所以依次对比左右两个指针所指向的数的平方,并由大到小从后往前赋值给新数组。给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按。时间复杂度:O(n)

2024-03-02 12:25:35 365

原创 算法学习笔记1 | 数组基础、704. 二分查找、27. 移除元素 | 代码随想录

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。使用C++的话,要注意vector和array的区别,vector的底层实现是array,严格来讲vector是容器,不是数组。给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。

2024-02-21 18:19:42 206

原创 GLSL学习笔记(一)

用坐标轴描述一个向量的坐标: x轴表示左/右,y轴表示上/下,z轴表示前/后 绘制一个三角形的两步: 1.定位顶点 2.绘制这个三角形内的像素 三种填充方式: (1) 填充顶点内所有像素点 (2)三角形位图 (3)根据光亮调整颜色 GLSL着色器分为两个部分与之对应: 1. Vertex Shader 顶点着色器 获取顶点a模型坐标,并将其定位在屏幕上 2. Fragment Shader 片段着色器 每个像素呈现RGBA格式 RGBA代表:Red , Green ..

2021-12-14 20:53:47 2828

空空如也

空空如也

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

TA关注的人

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