- 博客(52)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 nginx内存池源码剖析
nginx内存池源码剖析与仿写一、nginx介绍Nginx 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名,它是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
2021-04-14 11:42:02
119
原创 C++交换a和b的方法
这个临时对象可以是一个栈上的对象,也可以是一个堆上的对象,具体取决于对象的类型和大小。它是一个二进制运算符,对于每一位,如果两个操作数的对应位不同,则结果为1,否则为0。具体来说,swap函数会先调用对象的移动构造函数,将a的值移动到一个临时对象中,然后再调用a的移动赋值运算符,将b的值赋给a。最后,再调用b的移动赋值运算符,将临时对象中的值赋给b。其中,使用临时变量的方法是最常见的,但使用异或运算的方法也很有趣。STL库中的swap函数是一个通用的交换函数,可以用于交换任意两个对象的值。
2023-10-08 21:04:10
1780
原创 用C++写一个生成n个m之内的随机整数的函数
函数用于获取当前时间的秒数,通常用于初始化随机数生成器的种子,以确保每次运行程序时生成的随机数序列都不同。头文件中定义了一些常用的 C++ 标准库函数,包括。都是 C++ 标准库中的函数。头文件中定义了一些与时间相关的函数,包括。头文件,以便编译器能够识别这些函数的声明。函数用于初始化随机数生成器的种子,而。函数之前,需要在程序中包含。函数用于生成随机数。
2023-09-21 17:46:20
326
原创 Leetcode:242.有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。//以下代码从个人leetcode复制而来//方法1:排序再比较两个字符串是否相等class Solution {public: bool isAnagram(string s, string t) { sort(s.begin(), s.end()); sort(t.begin(), t.e.
2021-11-19 11:48:04
204
原创 LeetCode7.整数反转
class Solution {public: int reverse(int x) { int rev = 0; while(x != 0){ if(rev < INT_MIN / 10 || rev > INT_MAX / 10){ return 0; } int digit = x % 10; x /= 10;
2021-11-10 16:55:21
46
原创 LeetCode24.两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。链接经典题型/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(.
2021-11-10 16:12:58
36
原创 LeetCode3. 无重复字符的最长子串
来啦,从开头选一题写吧,感觉得以专题为基础练习的……无重复字符的最长子串用unordered_map和滑动窗口解决此问题class Solution {public: int lengthOfLongestSubstring(string s) { unordered_map<char, int> freq; int left = 0, len = 0; int n = s.size(); for(int r
2021-11-10 15:04:44
3946
原创 LeetCode2. 两数相加(C++)
*** 之前想的每天刷刷题,写写博客,现在回头看看发现自己很久没有好好写算法题,也没有更新博客了。既然选择了做一个技术人员,一定的内容输出是有必要的。这会儿刚好比较清闲,兴致来了,打开leetcode和CSDN写点东西~~不知道从哪开始写,那就从开头写咯!***两数相加题目说明:给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头
2021-11-09 11:13:29
567
原创 贪心算法:LeetCode:455. 分发饼干 135. 分发糖果 435. 无重叠区间
分发饼干这题分配饼干的大小与小孩的饥饿程度有关,饥饿度更小的小孩更容易吃饱,所以考虑先满足饥饿度更小的小孩;首先对g和s排序,再从左往右遍历,当满足对应小孩时将饼干分配出去,不满足时找下一个饼干class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { sort(g.begin(),g.end()); sort(s..
2021-05-08 16:31:57
133
1
原创 LeetCode:26. 删除有序数组中的重复项 80. 删除有序数组中的重复项 II
删除有序数组中的重复项用两个“指针”index和i,index遍历数组,当nums[index]和nums[i]相等时,i直接往后找;直到它们相等时,将当前nums[i]的值赋给nums[++index]class Solution {public: int removeDuplicates(vector<int>& nums) { if(nums.empty()) { return 0; } .
2021-05-07 22:54:17
39
原创 LeetCode:138.复制带随机指针的单链表
这道题还挺复杂的,主要是因为该单链表带随机指针解题思路分成三步:①拷贝原节点并将每一个节点链接到原来节点的后面 ②处理拷贝节点的random指针:拷贝节点的random指针指向被拷贝节点随机指针的下一个位置 ③拆解链表,把拷贝链表从原链表中拆解处来,再连接拷贝链表/*// Definition for a Node.class Node {public: int val; Node* next; Node* random; Node(int _val) {
2021-05-06 21:13:36
70
原创 LeetCode:82. 删除排序链表中的重复元素 II
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。示例1:最终结果返回最初的head节点示例2:最终结果返回n2节点思路:用三个节点判断是否有重复节点,重点是找到重复节点将其跳过并且明确最终应该返回哪个节点/** * Definition for singly-linked list. * struct ListNode { * int val; * .
2021-05-06 09:21:44
46
原创 LeetCode:234. 回文链表
请判断一个链表是否为回文链表回文:即对称思路:本题的核心就是将后半段逆置,然后比较前后半段是否相等即可。首先找到中间节点,再逆置后半段,最后前后段逐个比较是否相等;其中第1、2步骤都在之前刷过的题中都有所涉及,本题最最重要的是找到问题的突破口。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), n
2021-05-06 07:34:24
73
原创 LeetCode:21.合并两个有序链表
核心思想,构建一个头节点作为哨兵位(尾插法,一般考虑使用头节点)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, Lis
2021-04-26 19:16:08
64
原创 LeetCode:876. 链表的中间结点
方法一:首先想到的就是,先求出链表的长度length,再将head往后移动length/2次,上代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: int List_Length(L
2021-04-25 20:42:28
45
原创 LeetCode160:相交链表
方法一:分析题意,要判断两个链表是否相交,即判断它们的节点地址是否相同,利用set容器,先将链表A节点地址添加到set中,再遍历链表B并利用set的泛型算法判断B中是否有在A中出现过的节点,有则将其返回 (set底层是红黑树)时间复杂度:O(nlogn)空间复杂度:O(n)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNo
2021-04-25 11:32:05
53
原创 栈区的默认大小
前段时间遇到一个问题,问栈区默认大小为多少?查阅相关资料,了解到Linux底下通过:ulimit -s 或者ulimit -a 可以查看栈的默认大小,如下图所示可以发现我的linux系统下栈默认大小是8M(1M = 1024k = 1048576字节)PS:1Byte(字节) = 8bit(位)1KB = 1024Byte(字节)1MB = 1024KB1GB = 1024MB1TB = 1024GB一个汉字要占用2个字节...
2021-04-24 22:34:37
1575
原创 LeetCode141、142:环形链表(C++)
这里非常巧妙地用到了两个指针,一个fast指针,每次跳两格,另一个slow指针,每次跳一格。将环形链表类比成环形操场跑步,不同速度的两个人一定会相遇。//141. 判断单链表是否有环/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */clas
2021-04-24 00:05:25
103
原创 github首次提交代码过程
Windows下github首次提交代码过程1.下载一个git2.确保已经注册了github,保存用户名和邮箱3.任意地方右键打开‘Git Bash Here’(我是在桌面打开的)4.设置GitHub的用户名和邮箱5.在GitHub上创建一个新的代码仓库(创建过程请参考其他博客)6.打开该仓库并复制https地址7.右键打开‘Git Bash Here’(我是在D盘project底下)执行命令:git clone 刚才复制的https地址8.第7步文件夹下新clone了与刚刚GitH
2021-04-10 23:37:39
288
原创 VMware虚拟机 Linux系统 Ubuntu 硬盘/磁盘扩容
最近ubuntu磁盘空间不足,找了很多方法,最后以下博主的方法成功了其实问题的核心就是:要将未分配的部分,分配到主分区/dev/sda1中,未分配和主分区/dev/sda1之间不能有其他分区,所以我们需要将他们之间的分区删除掉,首先鼠标移动到逻辑分区linux-swap所在区域,单击右键,禁用交换空间(注释:扩展分区和逻辑分区的功能自行查资料,删除后,我后面会重新创建)https://blog.csdn.net/m0_43403238/article/details/85480314?utm_sour
2021-04-07 11:07:41
90
原创 1、编译与执行程序习题
Exercise 1.1:查看所用的编译器文档,了解它所用的文件命名规范。编译并运行本节的 main 程序。答:一般而言 ,C++编译器要求待编译的程序保存在文件中。C+ +程序中一般涉及两类文件:头文件和源文件。大多数系统中,文件的名字由文件名和文件后缀(又称扩展名)组成。文件后缀通常表明文件的类型,如头文件的后缀可以是.h或hpp等;源文件的后缀可以是.cc或.cpp等,具体的后缀与使用的编译器有关。通常可以通过编译器所提供的联机帮助文档了解其文件命名规范。Exercise 1.2:修改程序使其
2021-03-13 23:28:04
125
原创 LeetCode:136 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4//方法1:用两个下标逐一遍历数组,每当数组元素相同计数器加1,如果计数器等于1将结果返回,否则将计数器重新置为0int singleNumber(int* nums, int numsSize){ int count = 0;//计数器 for(int i = 0;i < nu
2021-02-03 23:42:13
46
原创 IP地址无效化
给你一个有效的 Ipv4 地址 ,返回这个 IP 地址的无效化版本。所谓无效化 IP 地址,其实就是用 “[.]” 代替了每个 “.” 。示例 1:输入:address = “1.1.1.1”输出:“1[.]1[.]1[.]1”示例 2:输入:address = “255.100.50.0”输出:“255[.]100[.]50[.]0”//方法1:char * defangIPaddr(char * address){ char *str = (char*)malloc((strle
2021-02-02 22:33:43
179
原创 给定一个数组,求其最长连号数的个数
例如:数组:{ 2,2,3,4,5,6,3,2 },最长连号{2,3,4,5,6},共有5个数int EvenNumber(int* arr, int len){ int tmp = 1;//保存连号数 int count = 1;//统计最长的连号数 for (int i = 0; i < len; i++) { if (arr[i + 1] == arr[i] + 1)//判断相邻两个数相等的条件 { tmp++; if (count < tmp)
2021-01-28 22:24:13
192
原创 逆序/顺序输出数字的每一位
给定一个整数,逆序输出数字的每一位,例如 123456 输出结果为 6 5 4 3 2 1逆序输出:输入:123456输出:6 5 4 3 2 1给定一个整数,输出数字的每一位,例如 123456 输出结果为 1 2 3 4 5 6.逆序输出:输入:123456输出:1 2 3 4 5 6//逆序输出void PrintReverse(int n){ while (n != 0) { printf("%d ",n % 10);//得到个位并输出 n /= 10;//丢弃个位
2021-01-28 21:40:44
399
原创 给定一个整数,统计十进制数字位数——推广→统计n进制数字的位数
统计一个整数是个几位数字?整数可以是负数,零或者正数.示例 1:输入:0输出:1示例 2:输入:123456789输出:9示例 3:输入:-123456789输出:9unsigned char GetFigures(int n){ int count = 0; if(n == 0) { return 1;//如果n为0,则直接将结果返回为1 } while(n != 0) { n /= 10;//除以10的次数就是该数的位数 count++; } retur
2021-01-28 20:38:18
428
原创 X的平方根:LeetCode第69题
实现 int sqrt(int x) 函数,计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。//方法1int mySqrt(int x){ int i; for(i = 0;i*i <= x;i++)//循环从0开始,直到i*i>x结束 {
2021-01-28 20:18:17
43
原创 数组的逆置
给定数组将其逆置,考虑从两头向中间同时逆置,将两头元素交换void reverse(int array[], int length){ int left = 0;//第一个元素下标 int right = length - 1;//最后一个元素下标 while (left < right) { //交换两头元素 int tmp = array[left]; array[left] = array[right]; array[right] = tmp; left++
2021-01-28 10:42:24
64
原创 将数字变成0的操作次数(C语言) LeetCode第1342题
给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。示例 1:输入:num = 14输出:6解释:步骤 1) 14 是偶数,除以 2 得到 7 。步骤 2) 7 是奇数,减 1 得到 6 。步骤 3) 6 是偶数,除以 2 得到 3 。步骤 4) 3 是奇数,减 1 得到 2 。步骤 5) 2 是偶数,除以 2 得到 1 。步骤 6) 1 是奇数,减 1 得到 0 。示例 2:输入:num = 8输出:4解释
2021-01-27 22:37:26
243
原创 二进制中1的个数 LeetCode:剑指offer 15
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 7表示成二进制是 0111,有 3 位是 1。因此,如果输入 7,则该函数输出 3。示例 1:输入:7输出:3解释:7 的二进制为 0111,共有 3 位为 ‘1’。示例 2:输入:255输出:8解释:255 的二进制为 1111 1111,共有 8 位为 ‘1’。示例 3:输入:-1输出:32解释:-1 的二进制为 1111 1111 1111 1111 1111 1111 1111 1111,共有 32 位
2021-01-27 21:55:17
66
原创 LeetCode:剑指offer 03:数组中重复的数字
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3//方法1:类比冒泡法对比相等的元素int findRepeatNumber1(int* nums, int numsSize) //时间复杂度0(n^2),太慢了{ int i = 0; for (; i < numsSi
2021-01-26 21:00:47
96
原创 LeetCode LCP06题:拿硬币
桌上有 n 堆硬币,每堆的数量保存在数组 arr 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有硬币的最少次数。示例 1:输入:[4,2,1]输出:4解释:第一堆硬币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。示例 2:输入:[2,3,10]输出:8思路:根据整型/整型的特性,将每个元素加1除以2就是每堆最少拿的次数int minCount(int* coins, int coinsSize){ int coun
2021-01-26 20:10:30
306
原创 宝石与石头:LeetCode第771题
给定字符串 J 代表石头中宝石的类型,和字符串 S 代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S 中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。示例 1:输入: J = “aA”, S = “aAAbbbb”输出: 3示例 2:输入: J = “z”, S = “ZZ”输出: 0注意:S 和 J 最多含有 50 个字母。J 中的字符不重复。思路::字符串S中有多少个字符在
2021-01-25 16:46:41
64
原创 LeetCode,LCP 01:猜数字
小 A 和 小 B 在玩猜数字。小 B 每次从 1, 2, 3 中随机选择一个,小 A 每次也从 1, 2, 3中选择一个猜。他们一共进行三次这个游戏,请返回 小 A 猜对了几次?输入的 guess 数组为 小 A 每次的猜测,answer 数组为 小 B 每次的选择。guess 和 answer的长度都等于 3。示例 1:输入:guess = [1,2,3], answer = [1,2,3]输出:3解释:小 A 每次都猜对了。示例 2:输入:guess = [2,2,3], answe
2021-01-25 12:14:45
158
原创 单链表的逆置/反转(带头节点、不带头节点、递归)
单链表的逆置c/c++#include<stdio.h>#include<iostream>#include<stdlib.h>//定义结构体typedef int ElemType;typedef struct ListNode{ Elemtype data; ListNode *next;}ListNode,*LinkList;//方法1:带头节点,利用循环头插实现逆置ListNode* reverseList1(ListNode *head
2021-01-25 11:32:21
969
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人