自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 三种方法解二叉树的最近公共祖先

题目链接:力扣目录法一:递归一详细讲解:法二:递归二详细讲解法三: 保存路径详细讲解:该题目的解法有很多中,接下来我会详细讲解其中三种方法。法一:递归一代码实现:class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(root==nullptr||root==q||root==p)

2022-04-30 12:01:35 794

原创 详解牛客----手套

原题链接:手套__牛客网解题思路:1. 首先考虑两边手套都不出现0的情况以取左边的为例子:把左边所有的手套数量减去数量最小的颜色的数量然后+1, 对应上图就是取17-2+1=16只,也就是说,左边取16只手套,肯定把所有颜色都取出,现在只要往另一只手中取一只就能匹配了。假设取15只手套,那么可能存在这么一种情况:取了4只黄色,5只绿色,6只蓝色;那么橙色的就可能取不到,所以取15只手套不能100%的把所有可能出现的颜色都取出。同样的操作把右边的走一遍,判断左边和右边所取的数量哪一种更小

2022-04-21 12:14:12 482

原创 详解Linux进程概念

1.基本常识及概念1.1冯诺依曼体系结构我们常见的计算机,如笔记本;不常见的计算机,如服务器;大部分都遵守冯诺依曼体系结构。如下图所示:输入设备:磁盘,网卡,键盘,话筒,摄像头; 输出设备:磁盘,网卡,显示器,显卡,音响; 存储器:主要指内存,磁盘不属于存储器; 控制器&运算器:CPU;1.2操作系统任何计算机系统都包含了一个基本的程序集合,称为操作系统(OS);笼统的理解:OS包含了内核(进程管理,内存管理,文件管理,驱动管理) 其他程序(库函数,she.

2022-04-20 20:46:07 2233

原创 详解STL---vector

1.vector的介绍及应用1.1vector的介绍vector是表示可变大小数组的序列容器 vector本质上是一个可变大小的数组,也就是说可以通过下标对vector进行访问,比起数组更加高效的是,它的空间是可以变的,而且它的大小会被容器自动处理。 vector分配空间的策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大,不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配的应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是

2022-04-13 21:16:14 585

原创 详解 剑指offer 11.旋转数组的最小数字

题目要求:有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。数据范围:1≤n≤100001 \le n \le 100001≤n≤10000,数组中任意元素的值:0≤val≤100000 \le val \le 100000≤val≤10000要求:空间复杂度:O(1) ,时间复杂度:O(lo.

2022-03-10 13:39:56 479 14

原创 C/C++编译器中数组越界却没有报错原因的分析

项目场景:模拟实现string:模拟实现string中insert时,存在的越界问题问题描述:模拟实现string.insert(char* str)存在一个越界的问题,编译器没有报错。string& insert(size_t pos,const char* str) { assert(pos <= _size); size_t len = strlen(str); if (_size + len > _capacity) reserve(_si

2022-03-07 16:34:35 2348 1

原创 Linux基础开发工具 yum---Vim---gdb

Linux软件包管理器--->yum什么是软件包?因为在Linux下安装软件,一个通常的方法是下载到程序的源代码,并进行编译,得到可执行程序。但是这样是十分麻烦的。所以就有些大佬就一些常用的软件提前编译好,并做成软件包(可以理解Windows上的安装程序)放在一个服务器,通过包管理器(yum)就可以很轻松的获取这个编译好的软件包,直接继续安装,软件包和软件包管理器,就好比与“APP”和“应用商店”这样的关系。yum是Linux下非常常用的一种包管理器,主要应用于Fedora、Redhat、ce

2022-03-06 16:03:10 8450 5

原创 详解STL容器-----string类

前言为什么学习string类:在C语言中,字符串是以'\0'结尾的集合,为了操作方便,在C标准库中提供一些str系列的函数(strstr,strcmp,strcpy……),但是这些库函数和字符串时分离的,不太符合oop的思想。稍不留神就会造成越界访问。在OJ题中,有关字符串的题目基本以string的形式出现,而且在常规的工作中,为了简单,方便,快捷,基本都是使用string类,很少有人会使用C库中的字符串操作函数。1.标准库中的string类string类是表示字符串的字符种类。

2022-03-05 19:03:25 709

原创 string模拟中出现的死循环

项目场景:string类中insert的模拟实现问题描述:当我用下面这种方法进行插入的时候,会出现一个死循环, string& insert(size_t pos, char ch) { assert(pos <= _size); if (_size == _capacity) reserve(_capacity==0?4:_capacity*2); size_t end = _size; while (end >= pos) {

2022-03-04 20:23:54 140

原创 C++之初阶模板

目录1.泛型编程1.1什么是泛型编程1.2为什么要使用泛型编程2.函数模板2.1函数模板的格式2.2函数模板的原理2.4函数模板的实例化2.5模板参数的匹配原则3.类模板3.1 类模板的定义格式3.2 类模板的实例化1.泛型编程1.1什么是泛型编程编写与类型无关的通用代码,是代码复用的一个手段,模板是泛型编程的基础。1.2为什么要使用泛型编程如果要实现一个两个数据交换的函数,这个是十分简单的一件事情,但是当主函数中,同时需要交换多种不同类型

2022-02-27 21:54:30 694

原创 深入理解C++--->内存管理

1.C&C++的内存分布2.C++内存管理方式虽然C语言的内存管理方式在C++中仍然是可以使用的,但是在C语言中开辟的内存容易忘记释放且给程序员代来不少的麻烦。所以C++又提出了自己的内存管理方式。通过new和delete两个操作符进行动态管理。2.1 new/delete操作内置类型 void test() { //动态申请一个int型的空间 int* p1 = new int; //动态申请一个int型空间并且初始化为10 int* p2 = n.

2022-02-21 17:57:18 737

原创 C++类和对象(下)

1.深谈构造函数1.1初始化列表在C++类和对象(中)我们谈到构造函数的是对创建的对象的成员变量进行赋初值。因为初始化只能初始化一次,而构造函数体内可以多次赋值。初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个“成员变量”后面跟在一个放在括号中的初始化值或者表达式。1.2易错点1.初始化只能初始化一次,即每个成员变量只能在初始化列表中只能出现一次。2.有三种成员必须在初始化列表位置进行初始化,其他的成员函数可以不在初始化列表初始化。引用成员变量 ...

2022-02-13 11:10:26 522 1

原创 C++类和对象(中)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录2.读入数据总结前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录2.读入数据总结前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn

2022-02-11 20:31:29 176 7

原创 C++类和对象(上)

1.类的引入在C语言中,结构体只能定义变量,而在C++中结构体不仅能够定义变量,也能够定义函数。struct Date { void Init(int year, int month, int day) { _year = year; _month = month; _day = day; } int _year; int _month; int _day;};而在C++中,结构体的定义更喜欢用class来定义。2.类的定义class classname

2022-02-08 11:13:41 602 14

原创 Linux权限的理解

jiu权限的概念Linux下有两种用户,超级用户(root)和普通用户超级用户(root):在系统下可以进行任何操作,不受限制。普通用户:在系统进行有限制的操作。超级用户的提示符是‘#’,普通用户的提示符是‘$’su:切换用户指令普通用户切换到普通用户--->su user从普通用户切换到root用户,su - root(可省略),su 不加“-”’就是当切换到root后仍在当前的目录下shell命令:命令行解释器外壳程序的作用:是使用者的..

2022-02-02 21:52:45 2331 12

原创 帮你解决Linux遇到xxx is not in the sudoers file. This incident will be reported.的问题

在Linux遇到这个问题的原因是普通用户没有这个权限,只要修改/etc/sudoers文件中的权限就可以了,具操作步骤如下。1.首先切换到超级用户(root)2.修改sudoers文件的权限因为该文件默认是只读的,所以给他增加可写的权限。修改前:指向指令:chmod u+w /etc/sudoers3.编辑sudoers文件指令:nano /etc/sudoers在文件中找到 ## Allow root to run any commands anywhere,.

2022-02-02 10:47:43 2882

原创 Linux基本指令初阶

1.几个重要的热键【Tab】:显示想要搜索的指令,输入pw,按下Tab或会显示所有包含pw的指令【Ctrl c】停掉当前程序 【Ctrl d】退出,替代exit...

2022-01-30 21:54:12 1922

原创 动态开辟内存的常见错误

2022-01-20 17:17:36 589 1

原创 用“法外狂徒”理解C++中的引用

1.引用的概念引用不是新定义的变量,而是给已经存在的变量取一个别名,编译器不会为引用变量开辟新的内存空间,它和它引用的变量共用一块内存空间;比如 “法外狂徒” 就是 ”张三” 的别名;类型& +引用变量名(对象名)=引用实体 具体代码如下所示:int main(){ int a = 10; int&a...

2022-01-08 11:14:54 180 14

原创 二分法解题的思考

问题:这道题很简单,写一个二分查找就能出结果 代码如下所示int minArray(int* numbers, int numbersSize){ int left = 0; int right = numbersSize - 1; while (left < right) { int mid = (left + right)/2; if (numbers[mid] > numbers[right]) .

2021-12-09 20:56:22 4058

原创 5000字详解KMP算法

KMP算法是什么?引自百度百科:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)。注 :此文的haystack代表的是主串,needle代表的是子串暴力求解:暴力.

2021-12-08 21:26:11 998 5

原创 七大常见排序算法总结

1.七大常见的排序算法2.排序代码的具体实现2.1直接插入排序插入排序的思想:将待排序的值插入到一个已经排好序的有序序列中,直到拍完所有的内容得到一个全新的有序序列;这是一个待排序的数组nums;该排序有两个循环,外循环是插入的次数,外循环是将待插入的元素插入到之前的有序序列z中,形成一个新的有序序列;的第一次插入的时候,将 nums[1]-->44赋值给一个x,定义end指向现有有序序列的最后一个元素(此时为3);此时44是大于3 的,所以就不需要进行移动的操作了;同..

2021-11-28 21:29:51 371

原创 堆的难点易错点

1.堆的性质2.数组构建堆的方法2.1堆向下调整算法2.2堆是插入3.构建堆的时间复杂度问题4.堆的排序1.堆的性质1.堆总是一颗完全二叉树2.堆顶父亲节点总是大于(大堆)或者小于(小堆)孩子节点2.数组构建堆的方法方法一:堆向下调整算法接下来易构建小堆为例根据学过的知识可以知道;最后一个非叶子节点=(最后的叶子节点-1)/2;具体代码实现...

2021-11-14 13:00:02 685 9

原创 手撕牛客例题讲解快速排序的核心

快速排序是如何进行的?有下图中的这样一个数组,对其进行从小到大到排序面对这样的一个无序的数组到底应该怎么排序;第一步:先找到一个基准值(为了方便,可以选取左边的第一个值为基准值。第二部:定义两个指针left和end,分别指向最左边和最右边;右边的指针往左边移动,左边的指针往右边移动,而原理基准值的那个指针先移动。第三部:右边的指针开始移动,直到遇见一个值是小于基准值的,把该处赋值给left,然后left++,接着left往右边移动,直到遇见大于基准值的值,把该值赋值给end,end-

2021-11-07 14:21:37 183 4

原创 数据结构入门(二):顺序表

1.顺序表的概念2.接口的实现3.顺序表的相关面试题4.顺序表的问题及思考1.顺序表的概念顺序表是一种用连续的物理地址存储单元一次存储数据元素的线性结构,所以它和链表、栈、队列、字符串以及都是属于线性表。1.1顺序表一般可以分为静态顺序表和动态顺序表静态顺序表:即给定数组的长度,往里面存储数据动态顺序表先给定一定的空间,当空间不够的时候可以扩容;...

2021-10-23 17:26:50 428 5

原创 数据结构入门:时间复杂度

1.算法效率2.时间复杂度3.空间复杂度4.常见的时间复杂度以及复杂度oj练习1.算法效率如何衡量一个算法的好坏,比如下面的斐波那切数列long long Fib(N){ if(N<3) return 1; return Fib(N-1)+Fib(N-2);}虽然只有短短的4行代码,当时这真的是简单的吗?1.1算法的的复杂度算法在编写成程序后,运行的时候需要消耗时间和空间(内存)资源,因此衡量一个算法的复杂度是从时间和空间两个维度来衡量的,而空间复杂

2021-10-12 11:12:02 668 8

原创 自定义类型:那些容易出错的地方

本讲主要内容结构体易错难点特殊的声明结构体的自引用 结构体的内存对齐规则位段枚举易错难点枚举的举例联合体1.结构体1.1特殊的声明:匿名结构体声明//匿名结构体struct { int a; int b; char arr[10];}x; struct { int c; int m; char arr1[10];}*p;上面的代码段定义了两个匿名结构体,但是编译器认为上面的两个结构体是不同的类型所以下面这段代码是非法的*.

2021-10-10 20:14:26 172 5

原创 字符函数分析及模拟实现

字符函数分析及模拟实现目录strlen:返回字符串的长度 strlen的模拟实现strcpy:字符串的拷贝, strncpy:长度受限制的字符串拷贝 strcpy的模拟实现strstr:字符串的查找 strstr的模拟实现strcmp:字符串的比较 strncmp:长度受限制的字符串比较 strcmp的模拟实现strcat:字符串的追加...

2021-09-17 18:34:19 126 8

原创 用qsort排列多种类型的数据

关于qsort1.qsort是一个库函数,头文件为#include<stdlib.h>2.qsort函数的声名void qsort(void *base, size_t num, size_t width, int (*compar)(const void *, const void*))3.参数的介绍base:指向要排列数组的第一个元素的地址; num:base指向数组的元素个数; width:base指向数组中单个元素多占字节; compare:用来比较两个元素的.

2021-09-11 23:11:13 104 1

空空如也

空空如也

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

TA关注的人

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