自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 xss攻击 SQL注入

QL注入,是发生于应用程序与数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了字符检查,那么这些注入进去的恶意指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏或是入侵。SQL 注入一般发生在用户交互场景中,比如需要用户自已输入信息的输入框,或者下拉选择选项的这种,如果不做好输入内容的过滤,就很可能发生 SQL 注入。

2023-06-10 14:21:10 1363 1

原创 代码随想录 day15| 层序遍历

层序遍历一个二叉树,就是从左到右一层层去遍历二叉树,和之前的都不一样。需要借用一个辅助数据结构即队列实现,队列先进后出,符合一层层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。然而 这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。

2023-05-01 21:03:23 159

原创 代码随想录 day14 ||144.二叉树的遍历 ,145.二叉树的后序遍历 , 94.二叉树的中序遍历

每次写递归,都按照这,可以保证大家写出正确的递归算法!: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。

2023-04-29 23:08:18 144

原创 c语言 二叉树遍历

【代码】c语言 二叉树遍历。

2023-04-29 22:53:13 151

原创 代码随想录day13 ||239. 滑动窗口最大值 347.前 K 个高频元素

经过前面的分析,我们知道如果滑出窗口的元素不是queue的max value的话,那说明窗口中该元素之后肯定有更大的元素成为了max value。那么这种情况下,“滑出窗口的元素”肯定已经在这个max value的元素加入到queue的时候已经被pop了。所以,如果queue中已有的一些元素,它们的值小于新增的元素,则它们肯定不会成为当前窗口(及后续窗口)中的最大值。2.对窗口内容排序。使用一个数据结构记录窗口的内容,每次滑动窗口时,删除离开窗口的元素、新增加入窗口的元素,并维护数据结构内元素的顺序。

2023-04-22 14:39:06 131

原创 算法训练Day11 || 20. 有效的括号;1047. 删除字符串中的所有相邻重复项;150.逆波兰表达式求值

我这里借助了栈,把字母塞进去,如果下一个和上一个相同就出栈,不然就入栈,最后借助 reverse 转置一下,生成字符串。栈机制:遍历字符串,遇到左括号压栈,遇到右括号判断:若有与之匹配的左括号,弹栈,若不匹配,直接返回false。去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 )。该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * )。

2023-04-18 21:04:04 53

原创 代码随想录Day10||232. 用栈实现队列、225. 用队列实现栈

如下面动画所示,用两个队列实现队列的功能,que2其实完全就是一个备份的作用,把que1最后面的元素以外的元素都备份到que2,然后弹出最后面的元素,再把其他元素从que2导回que1。一个队列在模拟栈弹出元素的时候只要将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部,此时在去弹出元素就是栈的顺序了。队列是先进先出的规则,把一个队列中的数据导入另一个队列中,数据的顺序并没有变,并没有变成先进后出的顺序。栈是先进先出,也就是一组数据先全入栈,输出的顺序是逆过来的。其实这道题目就是用一个队列就够了。

2023-04-17 09:02:41 162

原创 第九天|28. 实现 strStr()、459.重复的子字符串

如果出现不匹配字符,同时回退 txt 和 pat 的指针,嵌套 for 循环,时间复杂度 O(MN),空间复杂度O(1)。暴力的解法, 就是一个for循环获取 子串的终止位置, 然后判断子串是否能重复构成字符串,又嵌套一个for循环,所以是O(n^2)的时间复杂度。其实这并不涉及到KMP的原理,而是具体实现,next数组即可以就是前缀表,也可以是前缀表统一减一(右移一位,初始位置为-1)。但如果使用前缀表,就不会从头匹配,而是从上次已经匹配的内容开始匹配,找到了模式串中第三个字符b继续开始匹配。

2023-04-15 18:49:12 108

原创 day8||| 344.反转字符串、541.反转字符串II、剑指Offer05.替换空格、151.反转字符串中的单词、剑指Offer58-II.旋转字符串

题目要求反转2k中前k的个元素如果最后不够2k个且少于k个则全部反转,如果大于等于k个小于2k个则反转前k个,所以我们可以进行控制for循环,让指针i每次移动2k,然后在for循环内部反转k个,如果不满足条件,则反转剩下的元素。原地修改由于需要将空格替换为 “%20” ,字符串的总字符数增加,因此需要扩展原字符串 s 的长度,i指向新长度的末尾,j指向旧长度的末尾。例:wo he 要得到he wo。再翻转单个单词: wo he。先翻转整个数组: ow eh。清除多余空格: wo he。

2023-04-14 00:36:56 74

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

定义一个长度为26的数组,一个数组储存第一个字符串的每一个字母出现的次数,在遍历第二遍字符串的时候,每次遇到一个字母就次数减一如果这个数组是一个冲满0的数组,就证明两个字符串出现的字母次数相同。先将两个数组转换为集合(set),去重,然后遍历第一个集合中的每个元素,判断这个元素是否在第二个集合中出现过,如果出现过,将其添加到结果数组中。这道题要返回的是两个数组的交集,并且这个交集是做了去重操作,nums1转换为哈希表,遍历nums2去哈希表里面查找有没有相同的值。如果存在,我们需要找出它的索引。

2023-04-11 21:07:35 68

原创 代码随想录day4 ||24. 两两交换 ,19. 删除倒N ,02.07. 链表相交,142. 环形链表 II

首先就是链表两个节点进行交换,每次循环遍历两个节点。利用快慢指针,没什么好说的了。采用双指针的方法删除倒数第N个节点,首先应将slow指针指向倒数第N-1个节点。即先将fast指针和slow指针指向虚拟头结点,之后fast指针向后移动N+1步。同步移动fast指针和slow指针直至fast指针指向链表末尾。此时slow->next指向的就是待删除节点的地址。一个链表长x,另外一个链表长度y,(x >= y),第一个链表先走x-y步,再一起走…

2023-04-09 22:27:24 94

原创 代码随想录day3 || 203.移除链表元素、707.设计链表、206.反转链表

此题删除链表中元素是很简单的,只需要让待删节点之前一个节点指向待删节点之后一个节点即可。此题最大的问题就是,题目要求我们要返回新链表中的头结点,如果我们就采用仅仅复制头结点的方式(用H=head)然后用H进行操作,最后返回head。这样就会导致如果头结点也是我们需要删除的节点就会导致错误。

2023-04-08 20:55:55 375

原创 代码随想录day2|| 977. 有序数组的平方、209. 长度最小的子数组、59. 螺旋矩阵

整个思路很清晰,从初始化条件到最终求解都是一套整体的逻辑,不存在逻辑混乱的情况,所谓逻辑混乱就是本来是整体的逻辑现在却弄了好几套逻辑来表达,导致可能的情况太多,出错的机会就大。数组是有序的,但平方之后不一定有序了,那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间,此时可以使用双指针,left指向起始位置,right指向终止位置。如果A[left] * A[left] < A[right] * A[right] 那么result[k–] = A[right] * A[right]。

2023-04-07 20:50:37 563

原创 代码随想录day1||| 704. 二分查找、27. 移除元素

快慢双指针,两个指针从同一位置出发(数组头部)。检查快指针的值是否是需要删除的数值,如果不是:快指针指向的值赋值给慢指针,快指针++,慢指针++。如果是:快指针++。此时返回慢指针的值就是删除操作后的数组长度。定义两个指针,一个快指针一个慢指针。快指针遍历旧数组,慢指针只在没有查询到所需元素时++,然后进行赋值操作。其实主要就是对区间的定义没有理解清楚,在循环中没有始终坚持根据查找区间的定义来做边界处理。区间的定义就是不变量,那么在循环中坚持根据查找区间的定义来做边界处理,就是循环不变量规则。

2023-04-05 21:32:06 598

原创 C语言指针

理解了C语言基础变量定义的概念后,我们再来对应理解C语言指针的定义,指针也是一种变量,也符合变量定义的基本形式:<变量类型><变量名称>int * p;1.被指针这个翻译/叫法带偏了。2.定义指针变量时,被这个*习惯性地用法/写法带偏了1.指针是一种变量,它的变量类型(变量实体)是一个地址,咱们把“指针”改成“地址变量”,以后碰到指针,就叫做“地址变量”,也就是说这个变量的实体内容是一个地址。2.定义一个指针变量,习惯性写法是把*靠近变量名,按照C语言变量定义的基本形式<变量类型> <变量名称>

2023-04-01 21:43:00 100

原创 密码学基础——分组密码

文章目录一、分组密码1.分组密码定义2.分组密码作用3.分组密码设计原则4.一、分组密码1.分组密码定义分组密码是将明文消息经过二进制编码后的序列分割为固定长度的组,用同一秘钥和算法对每一组加密。且通常情况是密文、明文等长。2.分组密码作用消息加密消息认证和数据完整性的保护( 通过构造消息认证码(MAC)来实现)构造伪随机数生成器(用于产业性能良好的随机数)构造流密码(对称加密算法)构造其他密码协议的基础模块 (如密码管理协议、身份认证协议)3.分组密码设计原则安全性原则

2022-04-14 19:04:13 11342 1

原创 cin.getline和getline区别

1.cin.getline()函数cin.getline(字符数组名,字符个数,结束标志),结束标志可以省略,碰到回车就会停止。 cin.getline()可以接收空格,直到碰到回车才停止,所以会读取n-1个元素。#include <iostream>using namespace std;int main() { char a[100] ;cout<<"输入的值为:"<<end; cin.getline(a, 10); for(...

2022-04-10 15:43:08 2120

空空如也

空空如也

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

TA关注的人

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