自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【无标题】

的讲解后,再看这道。

2023-06-18 16:40:54 179

原创 1004. 最大连续1的个数 III(滑动窗口法)

希望找到最小的左端点。,将得到的区间的长度。

2023-06-18 16:24:51 227

原创 1456. 定长子串中元音的最大数目(原始暴力匹配法以及滑动窗口法)

向右滑动一格后(即i++后),考虑。(表示移进来的一格),2.采用滑动窗口方法。综上,可概括为上式。

2023-06-18 15:59:26 187

原创 virtual修饰类的成员函数/析构函数

不加virtual: 只释放基类内存,执行基类语义加 virtual: 释放派生类和基类内存,并且先执行派生类重写的语义。

2023-06-12 16:17:11 382

原创 leetcode11. 盛最多水的容器(还在用暴力解法?)

因此,初始化双指针分列水槽左右两端,循环每轮将短板向内移动一格,并更新面积最大值,直到两指针相遇时跳出;因此,每轮向内移动短板,所有消去的状态都 不会导致面积最大值丢失。这种解决方法只考虑了n种情况,其余情况如何能直接排除呢?可容纳水的高度由两个板子之中的短板决定。在每个状态下,无论长板或短板向中间收窄一格,都会导致水槽。而所有消去状态的面积一定都小于当前面积(即。就是记录下两两之间的容量结果,并记录下最大值。至此可能有同学会有疑问,在暴力解下会有。但是时间复杂度达到了。

2023-06-12 11:04:19 62

原创 leetcode443. 压缩字符串

特别地,为了达到 O(1)空间复杂度,我们需要自行实现将数字转化为字符串写入到原字符串的功能。位于某一段连续相同子串的最右侧。该子串对应的字符即为读指针。为了实现原地压缩,我们可以使用双指针分别标志我们在字符串中读。移动到某一段连续相同子串的最右侧,我们就在写指针。指向的字符不同于下一个字符时,我们就认为读指针。记录该子串的最左侧的位置,这样子串长度即为。处依次写入该子串对应的字符和子串长度即可。位于字符串的末尾,或读指针。写入原字符串中,然后再将其。在实际代码中,当读指针。

2023-06-11 17:07:49 211

原创 leetcode238. 除自身以外数组的乘积(偶遇无符号数的陷阱)

对于数组 L,L[0] 应该是 1,因为第一个元素的左边没有元素。对于其他元素:L[i] = L[i-1] * nums[i-1]。其他元素:R[i] = R[i+1] * nums[i+1]。此时可以发现j变为一个异常大的数,这会导致当前循环会无限进行,因为当j变为0后经过j–又会变成一个超级大的数。当 R 和 L 数组填充完成,我们只需要在输入数组上迭代,且索引 i 处的值为:L[i] * R[i]。之前在学计组的时候虽然已经知道会有这种情况的发生,但是一直没注意,今天真的是给我上了一课。

2023-06-11 15:54:28 89

原创 leetcode151.反转字符串中的单词

原因:start遍历的是原字符串的位置,它开头可能有多个空字符,中间也可能有多个空字符如果直接加start则不满足题目的要求,而使用。

2023-06-11 14:58:20 329

原创 二叉树层次遍历详解

二叉树层次遍历

2022-06-30 22:07:48 979

原创 删除不带头结点的单链表L中所有值为x的结点(递归实现)

为什么这段代码在执行 ls = ls->next 会误以为有断链的感觉

2022-06-10 00:59:09 1094 1

原创 多重定义全局符号的问题(与链接中符号解析有关)

先看一个例子:输出:当在main函数中引用p函数进行输出的时候为什么会出现这种输出结果呢?原因如下:1.先明白链接时符号的类型。(1)模块内部定义的全局符号,可以被其他模块引用的符号例如:不带static关键字的c函数和全局变量(2)外部定义的全局符号,可以在本模块中使用的符号例如:有extern引用的符号(3)模块中的局部符号例如:模块中带static的c函数和局部变量2.其次明白什么是强符号什么是弱符号。注:强弱只针对全局符号...

2022-04-17 21:30:26 887

原创 合并两个单链表

1.以下是基于带头结点的单链表的合并(并且两个链表都是有序的链表)p1 ,p2两个指针分别指向两个链表的第一个元素申请head结点作为新链表的头结点,申请pre指针指向头结点 第一次: 对p1,p2指针指向位置的元素进行比对,将较小的元素挂在head结点之后,调整更小的元素的对应结点的指针,调整pre指针,以便之后将元素依次挂在后面。之后重复此操作第二次:重复第一次的操作...

2022-02-16 19:29:44 13163 1

原创 单链表的所有操作

1.结构体定义typedef struct LNode{ int data; LNode* next;}*LinkList,LNode;LinkList 强调它是一个单链表,LNode强调是一个结点 。以下是带头结点的单链表的所有操作2.基本操作2.1 初始化//带头结点的初始化bool InitList(LinkList& L) { L = (LNode*)malloc(sizeof(LNode)); if (L == NULL) { ...

2022-02-16 01:11:29 348

原创 二叉树的非递遍历

一.前序非递归遍历1.前序非递归遍历原理二叉树的非递归遍历需要借助栈来实现,将根节点压栈,再出栈顶元素,再将这个元素的左右孩子压栈(次序,右孩子先进入,左孩子后进入),重复上述操作,直至遍历结束。2.图解3.代码实现定义栈结构,操作://链栈结构typedef struct SNode { struct TNode * node; struct SNode* next;}*Link...

2022-02-12 16:01:35 985

原创 详解二叉排序树非递归与递归建立和插入

1.非递归建立先看一下一个结点是如何插入如图:p指针用来查找要插入的位置,q指针记录插入位置的父节点,之后用于连接孩子结点第一次比较后调整p,q第二次比较第三次第四次,插入对应的关键字对应排序树的结构体:typedef int ElemType;typedef struct BSTNode { ElemType key; struct BSTNode *lchild, *rchild;}*BSTree,BSTNode;非...

2022-02-09 19:03:52 4037 1

原创 详解线索二叉树

1.了解线索二叉树之前要知道为什么需要线索二叉树typedef struct BiTNode{ // Node structure ElemType data; // node data struct BiTNode *lchild; // left child struct BiTNode *rchild; // right child}BiTNode, *BiTree;//线索二叉树的定义普通的链式存储的二叉树只有数据域,左,右孩子

2022-02-09 01:08:56 1581

原创 深度刨析多维数组与指针

1.多维数组数组名就为首元素地址当定义如下数组后:int arr[2][3][2] = { 1 }; //这里初始化只有第一个元素为1,其余为0逻辑上可以理解为一个空间矩阵,实际也只是内存中线性存储而我们知道数组名就是首元素地址,所以arr[1] 可以理解为:* (arr+1),arr[1]就是第二个元素的地址(即维护了6-11元素) for (i = 0; i < 2; i++) { printf("arr[%d] :%p \n",i, arr[i.

2022-02-08 15:50:41 535

原创 利用栈实现括号匹配问题

1.原理步骤从头开始扫描字符串,如果是左括号,入栈 如果是右括号,检查栈是否为空,如果为空,说明没有左括号与当前的右括号相匹配。如果栈不为空且栈顶元素与当前符号相匹配,继续检查下一元素 重复以上过程,直至扫描完最后一个元素 检查栈是否为空,如果不为空,说明栈中还存有左括号没有与之对应的右括号相匹配。如果为空,说明匹配成功2.代码实现#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#define MaxSize 50typed

2022-02-07 00:20:28 4676 2

原创 java String、 StringBuffer和StringBuilder的比较

1.不同1)StringBuilder和StringBuffer非常类似 均代表可变的字符序列,且方法也一样2) String:不可变字符序列, 效率低,但是复用率高。3) StringBuffer:可变字符序列、效率较高(增删)、线程安全, 看源码4)StringBuilder:可变字符序列、效率最高、线程不安全5) String使用注意说明: string s="a"; //创建了一个字符串 s += "b"; //实际上原来的"a"字符串对象已经丢弃了,现在又产生了一个字符 串s+

2022-02-05 17:59:21 389

原创 详解kmp算法

1.朴素模式匹配1.1基本思想:从主串test 和子串pattern 的第一个字符开始,将两字符串的字符一一比对,如果出现某个字符不匹配,主串回溯到第二个字符,子串回溯到第一个字符再进行一一比对。如果出现某个字符不匹配,主串回溯到第三个字符,子串回溯到第一个字符再进行一一比对…循环一直到子串字符全部匹配成功。1.2例如:第一次:不匹配第二次:主串从第2个字符,模式串从头开始,直到b与c不匹配第三次:主串从第3个位置开始,模式串从头开始,a与c...

2022-02-05 13:31:53 6684

原创 详解折半查找

1.顺序查找顺序查找是从线性表的一端,依次对比 每个元素,直到找到要查找的元素,或者没有找到。代码实现:int SqSearch(int arr[],int length,int x) { for (int i = 0; i < length; i++) { if (arr[i] == x) { return i; //找到返回元素的下标 } } return -1; //没找到返回一个-1}2.折半查找折半查找又称二分查找,它仅适用于有序的顺序表。

2022-02-01 20:57:02 3135

原创 使用java集合,冒泡排序法实现book类按价格进行排序

1.代码实现package list;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class test2 { public static void main(String[] args) { List list=new ArrayList(); list.add(new Book("三国",67.2)); lis

2022-02-01 19:47:06 1543 1

原创 c语言柔性数组

1.柔性数组柔性数组, 也叫0长度数组struct S{ int data; int arr[0]; //0长数组};2.柔性数组的特点结构体中的柔性数组前必须至少有一个成员 sizedof这种结构不包括柔性数组的大小 包含柔性数组的结构开辟空间时需要用 malloc()函数 动态开辟3.柔性数组与传统动态增加大小区别3.1传统动态分配定义:struct S2{ int data; int* point;}; S1*...

2022-02-01 13:23:32 1226

原创 对称矩阵的压缩

1.定义若一个方阵A [1...n] [1...n]中的一个任意元素都有a [ i,j ] =a [ j,i ] (1<=i,j<=n),则称其为对称矩阵。对于一个n阶方阵,可以划分为三个区域,即上三角区,主对角线,下三角区。2.压缩原因因为对称矩阵上三角区和下三角区对应的元素相同,如果都存储会造成空间的极大浪费,因此只需要把下三角区(或上三角区)和对角线上的元素进行存储即可。3.实现原理对于方阵A [1...n] [1...n]下三角区和主对角线每行元素为(且i&gt.

2022-01-31 22:25:25 1886

原创 c语言memcpy()函数与memmove()函数区别与模拟实现

1.memcpy()1.1简介头文件:#include <string.h>memcpy() 用来复制内存数据,其原型为: void * memcpy ( void * dest, const void * src, size_t num );memcpy() 会复制 src 所指的内存内容的前 num 个字节到 dest 所指的内存地址上。因为传过来的参数用void*接收,所以它并不关心类型参数,可以传递任何类型,之后逐字节地进行复制,...

2022-01-30 00:32:43 249

原创 详解基数排序

1.基数排序基数排序是一种特殊的排序方式,不是基于比较进行排序,而是基于关键字的各个位置大小进行"分配"和"收集"两种操作对关键字序列进行排序的一种排序方式。基数排序可以分为:最高位优先(MSD)和最低位优先(LSD)2.基数排序原理1.观察排序字段最大的数字,它有几位决定了需要分配和收集的次数2.按照元素每一位的大小分配入对应容器(如数组,链表,队列等)3.按照容器的次序依次收集数据4.重复前两步,直至每一位都分配,收集完毕例如:3.代码实现本算法使用链表作

2022-01-28 17:52:36 3123

原创 详解归并排序

1.归并排序归并排序使用了分治和递归的思想,将具有n的元素的无序序列划分为n个每个含有一个元素的序列,再将n个有序序列采用二路归并等合并方法进行合并排序成一个有序的序列。2.归并实现步骤2.1.划分划分左半部分后,合并排序左半部分 2.1.1递归划分左半部分如图:从中间划分,之后再从左半部分划分,递归划分左边部分...... 直至划分为一个子序列2.1.2合并左半部分的子序列,后面同理2.1.划分右半部分后,合并排序右...

2022-01-27 16:54:45 957

原创 链式队列的定义与实现

1.链式队列链式队列是一种同时带有队头指针和队尾指针的单链表,头指针指向队头结点,尾指针指向队尾结点。如图:2.队列的存储结构类型可以描述为:typedef struct Node{ int data; struct Node* next;}LinkNode;typedef struct Queue{ LinkNode* rear; //头指针 LinkNode* front; //尾指针 int count; //用于记录队列的元素个数}LinkQueue;

2022-01-27 00:09:02 4307 1

原创 顺序栈与链栈

1.栈栈是一种只允许在一端插入和删除操作,元素先进后出的受限线性表2.常用操作initStack :初始化一个空栈 Pop:若栈未空,元素出栈 Push:若栈未满,元素进栈 getTopEle:获取栈顶元素 isEmpty: 判断此时栈是否为空3.栈的实现 3.1栈的顺序存储结构#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>//定义最大容量为4#define MaxSize 4typedef st...

2022-01-26 00:37:28 966

原创 详解堆排序

1.堆排序定义堆排序是一种树形选择排序方法,特点是在排序的时候,可以将拥有n个关键字的数组或其他结构看做一个完全二叉树。如图:堆的定义:n个关键字序列L(1...n)称为堆,当满足:L(i) <= L(2i) 且 L(i) <= L(2i+1) ( 1 <= i <= [n/2] ) 也就是说小于左右孩子 ,称之为小顶堆 L(i) >= L(2i) 且 L(i) >= L(2i+1) ( 1 <= i <= [n/2] ) 也就是...

2022-01-25 00:59:38 4829 5

原创 const修饰指针的效果

1.const关键字const关键字经常用来修饰常量,也就是说当有个变量你不希望改变时,可以用const来修饰const int num=20;num=30;//错误,const修饰的变量不可改变2.const与指针const关键字位置不同,修饰侧重点不同,就会呈现不同的效果当const在类型前面,修饰的是指针变量num所指向的内容,如 const int* num此时const修饰的是 指针变量num所指向的内容,表示指针变量 num 所指向的内存单元里面的内容不可变,指针变量

2022-01-21 15:35:21 1155

原创 c语言常见的字符串函数及模拟实现

1.strlen实现原理我们知道定义字符数组时,可以有以下两种形式:char a[]="abcd";char a[]={'a','b','c','d'};两者的区别是第一种末尾会带一个'\0',而第二种不会带,所以可以扫描字符数组每一个字符,如果扫描到'\0',扫描结束2.具体模拟strlen函数如下:int my_strlen(char* base) { int length = 0; while ((*base++)!='\0') { length++; }

2022-01-14 00:26:24 1018

空空如也

空空如也

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

TA关注的人

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