自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 每日一题(4):单词距离

单词距离题目链接有个内含单词的超大文本文件,给定任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?示例:输入:words = [“I”,“am”,“a”,“student”,“from”,“a”,“university”,“in”,“a”,“city”], word1 = “a”, word2 = “student”输出:1解:class Solution {public: int f

2022-05-27 11:53:52 207

原创 每日一题(3):掉落的方块

掉落的方块题目链接在无限长的数轴(即 x 轴)上,我们根据给定的顺序放置对应的正方形方块。第 i 个掉落的方块(positions[i] = (left, side_length))是正方形,其中 left 表示该方块最左边的点位置(positions[i][0]),side_length 表示该方块的边长(positions[i][1])。每个方块的底部边缘平行于数轴(即 x 轴),并且从一个比目前所有的落地方块更高的高度掉落而下。在上一个方块结束掉落,并保持静止后,才开始掉落新方块。方块的底边

2022-05-27 11:32:56 166

原创 每日一题(2):环绕字符串中唯一的子字符串

环绕字符串中唯一的子字符串题目链接把字符串 s 看作是 “abcdefghijklmnopqrstuvwxyz” 的无限环绕字符串,所以 s 看起来是这样的:“…zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd…” .现在给定另一个字符串 p 。返回 s 中 唯一 的 p 的 非空子串 的数量 。示例 1:输入: p = “a”输出: 1解释: 字符串 s 中只有一个"a"子字符。示例 2:输入: p = “ca

2022-05-25 13:49:08 223

原创 每日一题(1):单值二叉树

单值二叉树题目链接如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例1:输入:[1,1,1,1,1,null,1]输出:true示例2:输入:[2,2,2,5,2]输出:false解:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; *

2022-05-24 12:36:15 91

原创 第十六章:红黑树模拟实现STL中的map与set

第十六章:红黑树模拟实现STL中的map与setIterator.h#pragma once// 反向迭代器--迭代器适配器template<class Iterator>struct ReverseIterator{ typedef typename Iterator::reference Ref; typedef typename Iterator::pointer Ptr; typedef ReverseIterator<Iterator> Self; I

2022-04-04 13:19:29 1061 2

原创 第十五章:map和set

第十五章:map和set序列式容器:vector / list / deque / ···【底层为线性序列的数据结构,里面存储的是元素本身 】关联式容器:map / set / unordered_map / underored_set / ···【里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高】1.树形结构的关联式容器根据应用场景的不桶,STL总共实现了两种不同结构的管理式容器:树型结构与哈希结构。**树型结构的关联式容器主要有四种:map

2022-04-02 16:56:10 700 6

原创 二叉树小练习(leetcode)

二叉树小练习1.根据二叉树创建字符串需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。题目链接class Solution {public: string tree2str(TreeNode* root){ string str; _tree2str(root,str); return str; }

2022-03-25 21:22:36 1525 1

原创 第十四章:二叉搜索树

第十四章:二叉搜索树1.二叉搜索树的概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树2.二叉搜索树的实现#include<iostream>using namespace std;template<class K>struct BSTNode{ BSTNode(co

2022-03-24 21:45:57 1935 6

原创 第十三章:多态

第十三章:多态1.多态的概念多态:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。举个例子:比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优先买票。2.多态的定义及实现2.1 多态的构成条件多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person,Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:①必须通过基类的指针或者引用调用虚函

2022-03-23 21:27:35 987 3

原创 第十二章:继承

第十二章:继承1.继承的概念及定义继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。class Person{public: void Print() { cout << "name:" << _name << endl

2022-03-23 20:06:54 1155 4

原创 第十一章:C++的IO流

第十一章:C++的IO流1.C语言的输入输出C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的缓冲区来进行输入与输出。对输入输出缓冲区的理解:①可以屏蔽掉低级I/O的实现,低级I/O的实现依赖操作系统本身内核的实现,所以如果能够屏蔽这部分的差异,可以很容易写出可移植的程序。②可以使

2022-03-22 15:42:22 1285 3

原创 第十章:模板进阶

第十章:模板进阶1.非类型模板参数模板参数分类类型形参与非类型形参。类型形参,就是出现在模板参数列表中,跟在class或者typename之类的参数类型名称。非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。namespace bite{ // 定义一个模板类型的静态数组 template<class T, size_t N = 10> class array { public: T& operator[](si

2022-03-21 16:02:34 91

原创 第九章:stack和queue

第九章:stack和queue1.stack1.1 stack的介绍stack的文档介绍stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:

2022-03-20 17:30:06 130 2

原创 第八章:list类

第八章:list类1.list的介绍list的文档介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进

2022-03-20 15:05:02 140 1

原创 第七章:vector类

第七章:vector类1.vector的介绍vector的文档①vector是表示可变大小数组的序列容器。②就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。③本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相

2022-03-20 15:04:25 996 2

原创 第六章:string类

第六章:string类1.标准库中的string类1.1 string类string类的文档介绍字符串是表示字符序列的类标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string)。string类是basic_string模板类的一个实例,它使用char来实例化basic

2022-03-08 16:07:27 125 11

原创 第五章:STL概述

第五章:STL概述STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。STL版本:原始版本Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。 HP 版本–所有STL实现版本的始祖。P. J. 版本由P.

2022-03-06 11:37:43 109 1

原创 第四章:模板初阶

第四章:模板初阶1.泛型编程如何实现一个通用的交换函数呢?void Swap(int& left, int& right){ int temp = left; left = right; right = temp;}void Swap(double& left, double& right){ double temp = left; left = right; right = temp;}void Swap(char& left, cha

2022-03-06 11:29:06 90 1

原创 第三章:C&C++内存管理

第三章:C/C++内存管理1.C/C++内存分布int globalVar = 1;static int staticGlobalVar = 1;void Test(){ static int staticVar = 1; int localVar = 1; int num1[10] = {1, 2, 3, 4}; char char2[] = "abcd"; char* pChar3 = "abcd"; int* ptr1 = (int*)malloc(sizeof (int)*4)

2022-03-06 10:27:14 94 2

原创 小练习——日期类的实现

小练习——日期类的实现#include<iostream>using namespace std;class Date{public: Date(int year, int month, int day) : _year(year) , _month(month) , _day(day) { if (!(year > 0 && month > 0 && mont

2022-03-02 16:24:00 140

原创 第二章:类和对象

第二章:类和对象C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。1.类的引入C语言中,结构体中只能定义变量;在C++中,结构体内不仅可以定义变量,也可以定义函数。/* example */struct Student{ void SetStudentInfo(const char* name, const char* gender, int age) { strc

2022-03-02 16:22:43 465 2

原创 第一章:C++入门

第一章:C++入门1.C++关键字(C++98)C++总计63个关键字,C语言32个关键字asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutablestaticunionwchar_tcatch

2022-02-27 10:14:40 393 6

原创 第八章: 排序

第八章:排序一、排序的基本概念排序(Sort) ,就是重新排列表中的元素,使表中的元素满⾜按关键字有序的过程。排序算法的评价指标算法的稳定性。若待排序表中有两个元素Ri和Rj,其对应的关键字相同即keyi = keyj,且在排序前Ri在Rj的前⾯,若使⽤某⼀排序算法排序后, Ri仍然在Rj的前⾯,则称这个排序算法是稳定的,否则称排序算法是不稳定的。排序算法的分类内部排序——数据都在内存中关注如何使算法时间、空间复杂度更低外部排序——数据太多,无法全部放入内存还要关注如何使读

2022-02-25 16:20:28 259 2

原创 第七章:查找

第七章:查找一、查找的基本概念查找 —— 在数据集合中寻找满⾜某种条件的数据元素的过程称为查找查找表(查找结构)—— ⽤于查找的数据集合称为查找表,它由同⼀类型的数据元素(或记录)组成关键字 —— 数据元素中唯⼀标识该元素的某个数据项的值,使⽤基于关键字的查找,查找结果应该是唯⼀的。对查找表的常见操作①查找符合条件的数据元素②插⼊、删除某个数据元素查找算法的评价指标①查找⻓度——在查找运算中,需要对⽐关键字的次数称为查找⻓度②平均查找⻓度(ASL, Average Search L

2022-02-25 11:44:45 338 2

原创 第六章:图

第六章:图一、图的基本概念图G由顶点集V和边集E组成,记为G = (V, E)。其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合。若V = {v1, v2, … , vn},则用|V|表示图G中顶点的个数,也称图G的阶,E = {(u, v) | u∈V, v∈V},用|E|表示图G中边的条数。注意:线性表可以是空表,树可以是空树,但图不可以是空,即V一定是非空集。若E是无向边(简称 边)的有限集合时,则图G为无向图;边是顶点的无序对,记为(v, w)或(w,

2022-02-24 14:00:18 255 4

原创 第八节、程序的编译

第八节、程序的编译1.程序的翻译环境和执行环境在ANSI C的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境,它用于实际执行代码2.详解编译+链接2.1 翻译环境组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)。每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。(linux后缀**.o** windows后缀**.obj**)链接器同时也会引入标准C函数

2022-02-23 23:19:51 157 5

原创 第五章:树

第五章、树一、树1.基本概念树是n(n≥0)个结点的有限集合,n= 0时,称为空树,这是一种特殊情况。在任意一棵非空树中应满足:①有且仅有一个特定的称为根的结点。②当n> 1时,其余结点可分为m(m> 0)个互不相交的有限集合T1, T2,…, Tm,其中每个集合本身又是一棵树,并且称为根结点的子树。2.基本术语结点之间的关系描述祖先结点:从一个结点出发,一直往上走,直至根节点,这条路上所有的结点都是该结点的祖先结点。子孙结点:从一个结点出发,它的所有分支都是该结点的子孙

2022-02-23 23:00:53 1203 3

原创 第七节、文件操作

第七节、文件操作1.文件的概念磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。数据文件文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件 。本节主要讨论的是数据文件。一个文件要有一个唯一的文件标识,以便用户识别和引用。文件名包含

2022-02-22 13:19:46 63

原创 第六节、小练习——通讯录

小练习——通讯录一、介绍通讯录(暂时不考虑名字相同)1.可以存放1000个人的信息2.人的信息:名字,年龄,电话,住址,性别3.增、删、改、查联系人动态增加查询根据联系人的电话查询4.排序(根据年龄排序)二、完整代码contact.h#pragma once#define _CRT_SECURE_NO_WARNINGS 1#define MAX 1000#define NAME_MAX 20#define SEX_MAX 5#define ADDR_MAX 30#defin

2022-02-22 13:01:12 888

原创 第五节、动态内存管理

第五节、动态内存管理1.动态内存分配的必要性int val = 20; //在栈空间上开辟四个字节char arr[10] = {0}; //在栈空间上开辟10个字节的连续空间上述开辟空间方式有两个特点:1.空间开辟大小是固定的。2.数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。这时候就只能试试动态存开辟了2.动态内存函数的介

2022-02-22 13:00:27 61

原创 第四节、自定义类型详解

第四节、自定义类型详解1.结构体结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。1.1 结构的声明//创建一个描述学生的结构体struct Stu{ char name[20]; //名字 int age; //年龄 char sex[5]; //性别 char id[20]; //学号}; //分号不能丢在声明结构的时候,可以不完全的声明(省略结构体的标签)。struct{ int a;

2022-02-21 14:42:04 66

原创 第三节、字符串+内存函数

第三节、字符串+内存函数C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串或者字符数组中。字符串常量适用于那些对它不做修改的字符串函数.1.函数介绍1.1 strlensize_t strlen ( const char * str );strlen函数返回的是字符串中’\0’前面出现的字符个数(不包含’\0’)strlen函数的返回值为size_t,是无符号的size_t的真实类型与操作系统有关,在32位架构中被普遍定义为:t

2022-02-18 11:52:35 76

原创 第二节、指针的进阶

第二节、指针的进阶1.字符指针在指针的类型中我们知道有一种指针类型为字符指针 char* ;注意: const char* pstr = "hello";这里并不是把字符串 hello 放到字符指针 pstr 里了,本质是把字符串 hello 首字符的地址放到了 pstr 中。#include <stdio.h>int main() { char str1[] = "hello"; char str2[] = "hello"; const char *

2022-01-18 18:15:19 671

原创 第一节、数据的存储

第一节、数据的存储1.整型在内存中的存储1.1 原码、反码和补码int a = 10;计算机中的整数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位负整数的三种表示方法各不相同。原码—直接将二进制按照正负数的形式翻译成二进制就可以。反码—将原码的符号位不变,其他位依次按位取反就可以得到了。补码—反码+1即为补码数值位正整数的原码、反码、补码都相同。对于整型来说,数据存放内存中其实存放的是补码。原因:在计算

2021-11-28 10:41:49 99 1

原创 实用的调试技巧

实用的调试技巧1.bug1947年9月9日,葛丽丝·霍普(Grace Hopper)发现了第一个电脑上的bug。在Mark II计算机上工作时,电脑突然不能正常运作了,整个团队都搞不清楚原因。之后经过大家的深度挖掘,发现原来是一只飞蛾意外飞入了一台电脑内部从而引起的故障。错误解除后,该团队在日记本中记录下了这一事件。后来,人们逐渐开始用“Bug”(原意为“虫子”)来称呼计算机中的隐错。2.调试调试(Debugging / Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序错误

2021-11-23 19:38:30 218 1

原创 第四章:串

第四章:串一、串的定义和基本操作1.串的定义串,即字符串(String)是由零个或多个字符组成的有限序列。一些术语:子串: 串中任意个连续的字符组成的子序列。主串: 包含子串的串。字符在主串中的位置: 字符在串中的序号(从1开始计数)。子串在主串中的位置: 子串的第一个字符在主串中的位置 。2.串的基本操作串是一种特殊的线性表,数据元素之间呈线性关系。串的数据对象限定为字符集(如中文字符、英文字符、数字字符、标点字符等)。串的基本操作,如增删改查等通常以子串为操作对象。StrAss

2021-11-18 20:27:01 670 2

原创 第三章:栈和队列

第三章:栈和队列一、栈1.栈的定义栈(Stack)—是只允许在一端进行插入或删除操作的线性表。(特性:后进先出)空栈—栈中没有任何数据元素。栈顶—允许插入和删除的一端。栈底—不允许插入和删除的一端。2.栈的基本操作栈的基本操作和线性表基本操作类似。(创、销、增、删、查)InitStack(&S):初始化栈。构造一个空栈S,分配内存空间。DestroyStack(&S):销毁栈。销毁并释放栈S所占用的内存空间。Push(&S,x):进栈,若栈S未满,则将x加入使

2021-11-17 12:14:05 227 2

原创 第七节、结构体

第七节、结构体1.结构体的声明struct Point { int x; int y;}p1; //声明类型的同时定义变量p1 struct Stu p2; //定义结构体变量p2struct Node{ int data; struct Point p; struct Node* next;}n1={10,{4,5},NULL}; //结构体嵌套初始化2.结构体成员的访问结构体变量访问成员结构变量的成员是通过点操作符 .

2021-11-16 09:27:38 70 1

原创 第六节、指针

第六节、指针1.指针的概念指针是内存中一个最小单元的编号,也就是地址。平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量。指针变量,用来存放地址的变量。我们可以通过&(取地址操作符)取出变量的内存其实地址,把地址可以存放到一个变量中,这个变量就是指针变量。2.指针的定义type + *//例子:char *pc = NULL;int *pi = NULL;short *ps = NULL;char*类型的指针是为了存放char类型变量的地址。int*类

2021-11-15 13:16:29 629

原创 第五节、操作符详解

第五节、操作符详解1.操作符分类算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用、函数调用和结构成员2.算术操作符+ //加- //减* //乘/ //除% //取余除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。% 操作符的两个操作数必须为整数,返回的是整除之后的余数。3.移位操作符

2021-11-15 13:15:44 226 1

空空如也

空空如也

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

TA关注的人

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