自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

apple12_12的博客

一个小菜鸡的博客

  • 博客(78)
  • 收藏
  • 关注

原创 删除链表的倒数第n个节点

代码】删除链表的倒数第n个节点。

2022-07-26 10:20:11 233 1

原创 链表中倒数最后k个节点

代码】链表中倒数最后k个节点。

2022-07-26 10:19:38 117

原创 链表中倒数最后k个节点

代码】链表中倒数最后k个节点。

2022-07-26 10:19:03 214

原创 寻找第k大

代码】寻找第k大。

2022-07-26 10:18:07 109

原创 合并k个已排序的链表

代码】合并k个已排序的链表。

2022-07-25 18:35:16 221

原创 合并两个排序的链表

代码】合并两个排序的链表。

2022-07-25 18:33:43 150

原创 链表中的节点每k个一组翻转-笔记

这道题给定一个链表和一个整数k,每隔k个节点一组翻转链表。[1,2,3,4,5],k=2,翻转过后的链表为[2,1,4,3,5]。最后剩下不足k个节点则不动。

2022-07-24 10:30:51 107

原创 牛课-跳跃游戏1,2,3

代码】牛课-跳跃游戏1,2,3。

2022-07-23 23:32:03 576

原创 有重复数组的全排列

代码】有重复数组的全排列。

2022-07-22 09:58:17 824

原创 信封嵌套笔记

代码】信封嵌套笔记。

2022-07-22 09:55:03 94

原创 指定区间翻转链表

这道题要求我们只翻转链表中指定区间的节点,解题思路为找到left节点使用curr来指向,然后使用pre指向它前一个节点,然后依次将curr后面的节点使用头插法插到pre的后面。使用哨兵头结点来避免对链表是否为空的讨论。...

2022-07-22 09:53:39 586

原创 合唱队形笔记

这道题是要求形成一个合唱的队形,中间的人最高,两边人的身高成递减排列。我的思路就是遍历所有人,以每个人作为中间最高的人ti,分成左边和右边。左边要求递增,右边要求递减。然后分别求出左边的以ti为结尾的严格递增子序列的长度。求出右边以ti为开头的严格递减子序列的长度(把子数组翻转一下求以ti为结尾的严格递增子数组长度)。这就是满足队形要求的人数。最后总人数减去满足要求的人数就得到了要出去的人数。...

2022-07-20 20:12:10 92

原创 寻找两个链表的公共节点笔记

这道题在面试时也遇到过,有三种方法解决,分别是双指针法、hash法、链表长度法。

2022-07-20 11:21:27 315

原创 翻转链表笔记

给定一个链表头结点,要求将这个链表进行翻转,这道题在面试手撕代码的时候很容易遇到,找实习面试的时候真是蠢啊都没有想起来双指针解法。现在得好好总结总结记记笔记。

2022-07-20 11:03:41 93

原创 快速排序笔记

快排的时间复杂度为O(nlogn),它是原地排序,空间复杂度为O(1)。快速排序它的思想是每次按照一个基准(通常为待排序数组的第一个元素),将待排序数组划分成两个子数组,左边小于基准值,右边大于基准值。在对两个子数组重复上诉操作,直到子数组的长度为1。......

2022-07-20 10:28:14 81

原创 堆排序笔记

堆排序是一个十分高效的排序方法,其时间复杂度为建堆O(n),调整堆O(nlogn),且为原地排序,空间复杂度为O(n)。

2022-07-20 10:26:19 371

原创 # ubuntu源码安装cmake-3.16.6

apt-get install cmake安装的cmake版本过低,于是源码安装cmake,将步骤记录下来供以后参考

2022-06-24 18:37:30 717

原创 网络编程事件处理模型和并发模式

当socket上读事件就绪时,说明此时连接有新请求到来,在web服务器设计中,表示一个http请求的到来,我们应该如何高效响应并处理这些事件?使用同步I/O的多线程服务端编程模型使用异步I/O的多线程服务端编程模型主要的一点是Proactor里面工作线程是不进行I/O操作的,如果使用同步I/O来模拟Proactor,我们要在主线程内监控到socket上的读事件时,就将socket上的数据读到读缓冲区中,再让工作线程来处理这个请求,工作线程处理完之后,将回复消息生成于写缓冲区之后,注册该socket上的写就绪

2022-06-19 16:17:05 123

原创 线程安全的Observer模式2.0-鸡肋的改进的Observer模式

使用互斥锁来保护Observerable

2022-06-01 21:20:09 169

原创 线程安全的Observer模式1.0-线程不安全的Observer模式

线程不安全的Observer模式什么是Observer模式当一个类需要根据另一个类来执行自己的操作时,我们可以使用Observer模式。例如一个天气数据类,我们需要根据天气数据来动态绘制各种类型的图表(饼状图,折线图)。当天气数据更新的时候,这些图标也应该更新。于是使用Observer模式,一个Observer(观察者)可以观察一个Observerable(被观察者),一个Observerable可以被多个Observer观察。Observer模式实现的方式是在Observerable中保存它所有Obs

2022-05-30 13:46:04 139

原创 c++输入避坑

c++输入注意事项前两天华为笔试,被c++输入坑惨了。有一道题是输入一个矩阵,先输入矩阵的行和列n*m,然后输入了n行字符串,一行字符串就是一行数据。我一开始用cin>>n>>m把行和列读进来,然后再执行n次getline(cin,str)把这n行字符串读进来。结果不知道怎么回事一直少读了一行字符串。下来看了一些博客才终于搞清楚错在哪里了。原来是因为cin>>n>>m的时候输入缓冲区里面还残留了一个\n。所以第一次getline的时候读的是这个\n,导致我的

2022-05-28 20:36:42 257

原创 将neo4j数据库拷贝到另外一台机器直接使用

场景:当在自己电脑上的noe4j数据库上创建了一个professor数据库,里面存着很多节点和关系,如果因为项目需要,项目组其他人也需要使用这个professor数据库,那怎么直接进行数据的迁移呢?解决方法:首先打开professor的manage页面,再打开Open Folder。打开data文件夹:再将data文件夹下的databases和transactions两个子文件夹复制到其他机器上的neo4j数据库对应的data文件夹下,其他人就可以直接使用了。...

2020-11-17 09:55:03 2644 2

原创 链表逆序输出

链表逆序输出两种方法,第一种利用递归加回溯,第二种利用辅助栈。  感觉很久不写算法题了,手感都很陌生了,但是这一道题还是很能体现出来递归和回溯的魅力1.递归`def reversePrint(head): return revrsePrint(head.next)+[head.val] if head else []`例如[1,2,3]这样一直递归到尾结点,再回溯,依次从尾到头再返回[]、[]+[3]、[3]+[2]、[3,2]+[1]。2.利用辅助栈class Sol

2020-09-30 11:27:21 338

原创 php代码审计相关

1.一个简单的<?php $miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws"; function encode($str){ $_o=strrev($str); //反转字符串 // echo $_o; for($_0=0;$_0<strlen($_o);$_0++){ //abcdef $_c=substr($_o,$_0,1

2020-08-28 12:46:05 83

原创 sql注入相关

一、注释方式1.- -+可注释之后的内容,不过- -和注释内容之间要有一个空格,+号可代替空格。2./* 注释*/3.#注释二、绕过空格方式1./*注释*/可以绕过空格2.任意可以计算出结果的语句都可以用括号括起来,且括号两端可以没有多余的空格select user() from dual where 1=1 and 2=2可以这样绕过空格:select(user())from dual where(1=1)and(2=2)...

2020-08-27 16:22:27 106

原创 mysql相关

1.concat函数用于拼接select Concat(name,’(’,contury,’)’) from venders order by name;结合成一个计算字段的两个列用空格填充,想要去掉这些空格使用trim函数,rtrim()去掉右边的空格,ltrim()去掉左边的空格,trim()去掉字符串左右两笔那的空格。...

2020-08-26 17:05:32 91

原创 PE文件相关内容

1.PE header:如何加载到内存、从何处开始运行、运行中需要的DLL文件有哪些、需要多大的栈/堆内存等,大量信息以结构体形式存储在PE头中。PE文件格式如下:DOS头+DOS存根+节区头=PE头1.DOS头在PE头最前面的是IMAGE_DOS_HEADER结构体,用来扩展已知的的DOS EXE头,该结构体共40个字节,我们必须要知道其中两个重要成员,分别是:e_magic代表DOS签名,其16进制值为4D5A(ASCII值为“MZ”)e_flanew指示NT头的偏移(根据不同的文

2020-08-26 16:37:17 366

原创 函数调用约定

函数调用时如何传递参数的约定有三种方式:cdeclstdcallfastcall1.cdecl(C中使用)在这种方式中,调用者直接清理其压入栈的函数参数。在汇编中直接表现出来的就是在调用者函数代码段中ADD esp,8,将参数清除。2.stdcall(常用于Win32 API,为了更好的兼容性)由被调用者清理栈,若调用者给被调用者传入了两个4字节的参数(共8字节),则在被调用者函数结尾RETN 8来清理栈,RETN 8等同于(RETN + POP 8)除了恢复调用该函数之前的现场(即改变

2020-08-26 11:04:51 89

原创 Normal_RSA

记录贴菜鸡记录一下今天踩的坑吧,攻防世界的这一道题真是搞了我好久,这一道题给了一个加了密的flag.enc和一个pubkey.pem,很明显就是公钥加密私钥解密,要先从pubkey.pem中反解出私钥。.pem格式文件通常用来保存openssl生成的密钥对。密钥数据进行了base64编码,密钥形式通常为:-----BEGIN PUBLIC KEY-----MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMJjauXD2OQ/+5erCQKPGqxsC/bNPXDryigb/+l/

2020-08-25 18:20:41 385 2

原创 ctf杂记1

1.培根密码培根密码本质上是一个替代密码,以下是其两种替代加密方式:第一种:第二种:这种加密方式可以有多种形式,可以直接将a、b当作0和1来表示,这种就是比较简单容易看出来的。也可以利用一串字符的大小写形式来表示密文,例如:加密后的密文为:QWERFSDFGnOOOnB大写字母代表a,小写字母代表b,则以上字符串解密过后就表示:ABC。改了一下的python脚本:import realphabet=['a','b','c','d','e','f','g','h','i','j','k'

2020-08-16 21:05:53 252

原创 8.5

1.第一题

2020-08-05 13:03:29 86

原创 8.4

1.第一题回溯法:class Solution: def combine(self, n: int, k: int) -> List[List[int]]: def dfs(path,res,nums,k): if k==0: res.append(path[:]) return for i in range(len(nums)):

2020-08-04 11:08:56 113

原创 8.3

1.第一题:用二分法,一直缩小范围。class Solution: def searchRange(self, nums: List[int], target: int) -> List[int]: n=len(nums) head=0 tail=n-1 while head<=tail: mid=head+(tail-head)//2 if nums[mid]<t

2020-08-03 22:31:15 105

原创 8.2

1.第一题:这一道题用双指针,second指针向first指针后移n-1位,当second指针移到表尾时,first指针表示需要删除的节点,使用指针a表示first指针的前一节点。要考虑当删除的是头节点时的特殊情况、还有只有一个节点和两个节点的情况。代码如下:class Solution: def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode: first=head a=head

2020-08-02 11:31:23 85

原创 7.29

1.第一题:这是一道数学题。。。。结论:作为先手,如果堆中石头的数量 n 不能被 4 整除,那么你总是可以赢得 Nim 游戏的胜利。原因:1.小于3块的话,你作为先手就可以全拿走,结束游戏。2.如果刚好4块的话,作为先手一定会输,因为对手一定会拿走最后一块。所以在自己的回合中应避免自己剩下4个。3.但是如果不是4倍数的话,就可以控制将4个留给对手,那么自己必定会赢。比如7,那就先把后四个排除,剩下3个,自己都拿走,就将四个僵局留给对手。比如13,将3*4剪掉,第一次自己拿走1个,后几轮对手不管

2020-07-29 14:59:35 111

原创 7.28

1.第一题:对字母的ASCII码进行异或操作,最后再转换为字母。class Solution: def findTheDifference(self, s: str, t: str) -> str: res=0 for i in range(len(s)): res^=(ord(s[i])^ord(t[i])) res^=ord(t[-1]) return chr(res)2.第二题:超出时间限制

2020-07-28 18:53:46 67

原创 7.27

1.第一题:class Solution: def missingNumber(self, nums: List[int]) -> int: n=len(nums) demo=[i for i in range(n+1)] for num in nums: if num in demo: demo.remove(num) return demo[0]2.第二题:首先

2020-07-27 21:21:33 79

原创 7.26

1.第一题:直接双指针就行,很简单:class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ n=len(s) i=0 j=n-1 demo=0 while i<j:

2020-07-26 19:05:40 78

原创 7.25

1.第一题:本来是个很简单的题,这该死的判断条件,用的二分查找class Solution: def firstBadVersion(self, n): """ :type n: int :rtype: int """ if n==1: return 1 head=1 tail=n mid=(head+tail)//2 whil

2020-07-25 22:34:00 52

原创 7.24

1.第一题:代码如下:class Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: res=[] for i in nums1: if i in nums2 and i not in res: res.append(i) return res2.第二题:代码如下:

2020-07-24 21:17:33 58

空空如也

空空如也

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

TA关注的人

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