笔记
文章平均质量分 76
阿辉爱睡觉
️️️
展开
-
验证二叉搜索树
力扣入口 98.验证二叉搜索树给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树特点总结:二叉搜索树,左子树也是二叉搜索树,右子树也是二叉搜索树; 中序遍历:结果为升序; 二叉搜索树不存在重复值;思路一:递归:是二叉搜素树,左右子树也为二叉搜索树;条件:左右子树 都在一定范围内是升序(中.原创 2022-04-08 16:45:24 · 446 阅读 · 0 评论 -
Map和Set
搜索概念及场景**Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。**以前常见的搜索方式有:直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢二分查找,时间复杂度为 ,但搜索前必须要求序列是有序的上述排序比较适合静态类型的查找,即一般不会对区间进行插入和删除操作了,而现实中的查找比如 :根据姓名查询考试成绩通讯录,即根据姓名查询联系方式不重复集合,即需要先搜索关键字是否已经在集合中可能在查找时进行一些插入和删原创 2022-04-08 16:34:37 · 1181 阅读 · 0 评论 -
数据结构排序
排序的概念及引用排序概念**排序:**所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作**稳定性:**假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的**内部排序:**数据元素全部放在内存中的排序。**外部排序:**数据元素太多不能同时放在内存中,根据排序过程的要求原创 2022-04-07 23:36:13 · 84 阅读 · 0 评论 -
Java对象的比较
元素的比较基本类型的比较在Java中,基本类型的对象可以直接比较大小对象比较的问题class Card { public int rank; // 数值 public String suit; // 花色 public Card(int rank, String suit) { this.rank = rank; this.suit = suit; }}public class TestPriorityQueue { p原创 2022-04-05 22:17:42 · 494 阅读 · 0 评论 -
优先级队列(堆)
优先级队列概念前面介绍过队列,队列是一种先进先出(FIFO)的数据结构,但有些情况下操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,该中场景下,使用队列显然不合适,比如:在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话。在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象。这种数据结构就是优先级队列(Priority Queue)。优先级队列的模拟实现JDK1.8中的PriorityQueue 底层使用了堆原创 2022-04-05 22:16:07 · 251 阅读 · 0 评论 -
前n个数中二进制中1的个数
剑指Offer II 003给定一个非负整数n,请计算0到n之间的每个数字的二进制表示中 1 的个数,并输出一个数组。图解//思路一 此处只写 计算二进制中一的个数的函数public int count(int n){ int count = 0; while(n != 0){ n &= (n-1); count++; } return count;}//思路二可以自己尝试以下,与思路三大致相同...原创 2022-03-30 18:31:01 · 213 阅读 · 0 评论 -
连续子树组的最大和
连续子数组的最大和输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。图解类似思路考虑:斐波那契,青蛙跳台阶class Solution { public int maxSubArray(int[] nums) { //f(i) = Max(f(i-1)+nums[i],f(i-1)); int len = nums.length; if(len == 0){ ..原创 2022-03-30 17:28:05 · 192 阅读 · 0 评论 -
Java二叉树
树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。有一个特殊的节点,称为根结点,根节点没有前驱结点。除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、…、Tm,其中每个集合Ti(1 <= i <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可有0个或多个后继。树是递归定义的。 子树不是相交的;除了根结点外,每个结点有且只有一个父结点;一颗N个结点的树有N-1条边;原创 2022-03-23 16:43:24 · 1388 阅读 · 0 评论 -
Java栈和队列
栈概念栈:一种特殊的线性表,其**只允许在固定的一端进行插入和删除元素操作。**进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据在栈顶栈的使用方法功能Stack()构造一个空的栈E push(E e)将e入栈,并返回eE pop()将栈顶元素出栈并返回E peek()获取栈顶原创 2022-03-19 23:48:12 · 709 阅读 · 0 评论 -
LinkedList与链表
链表链表的概念及结构链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。注意: 1. 从上图可看出,链式结构在逻辑上连续的,但在物理上不一定连续现实中的结点一般都是在堆上申请出来的从堆上申请的空间,是按照一定策略来分配的,两次申请的空间可能连续可能不连续而链表的结构非常的多样:1.单向 或 双向2.带头或 不带头3.循环或非循环虽然结构众多,但重点掌握两种:**无头单向非循环链表:**结构简单,一般不会单独用来存储数原创 2022-03-18 23:48:22 · 320 阅读 · 0 评论 -
ArrayList与顺序表
ArrayList简介在集合框架中,ArrayList是一个普通的类,实现了List接口。【说明】ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问ArrayList实现了Cloneable接口,表明ArrayList是可以clone的ArrayList实现了Serializable接口,表明ArrayList是支持序列化的和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector或者CopyOnWriteAr原创 2022-03-13 14:58:41 · 527 阅读 · 0 评论 -
List的介绍
什么是List在集合框架中,List是一个接口,继承自Collection。Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示:Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历的,具体如下:站在数据结构的角度来看,List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删改查以及变量等操作。常见接口介绍方法解释boolean add(E e)尾插 evoid add(int inde原创 2022-03-13 14:55:13 · 693 阅读 · 0 评论 -
Java泛型
什么是泛型一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。----- 来源《Java编程思想》对泛型的介绍泛型是在JDK1.5引入的新的语法,通俗讲,泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。引出泛型实现一个类,类中包含一个数组成员,使得数组中可以存放任何类型的数据,也可以根据成员方法返回数组中某个下标的值思路:1. 我们以前学过的数组,只能存放指定类型的元素,例如:i原创 2022-03-10 23:05:52 · 422 阅读 · 0 评论 -
String类
String 类的重要性字符串应用广泛,Java中提供了专门的String类在开发和校招笔试中,字符串使用频繁常用方法字符串构造public static void main(String[] args){ //使用常量串构造 String s1="hello"; System.out.pringln(s1); //直接newString对象 String s2=new String("hello"); //使用字原创 2022-03-04 22:39:19 · 616 阅读 · 0 评论 -
抽象类和接口
抽象类概念在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一 个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类在上节课的打印图形例子中, 我们发现, 父类 Shape 中的 draw 方法好像并没有什么实际工作, 主要的绘制图形都是由Shape 的各种子类的 draw 方法来完成的. 像这种没有实际工作的方法, 我们可以把它设计成一个 抽象方法(abstractmethod), 包含抽象方法的类我们称为 抽象原创 2022-03-04 22:21:36 · 252 阅读 · 1 评论 -
继承和多态
继承面相对象思想中提出了继承的概念,专门用来进行共性抽取,实现代码复用继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类 特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用。例如:猫和狗都是动物,将共性抽取出来,采用继承思想达到共用。上述图示中,Dog和Cat都继承了Animal类,其中:Ani原创 2022-03-04 22:12:21 · 291 阅读 · 0 评论 -
Java认识异常
异常概念和体系结构异常概念在Java中,将程序执行过程中发生的不正常行为称为异常。例如:1.算术异常System.out.println(10 / 0);// 执行结果Exception in thread "main" java.lang.ArithmeticException: / by zero2.数组越界异常int[] arr = {1, 2, 3};System.out.println(arr[100]);// 执行结果Exception in threa原创 2022-03-04 21:44:13 · 501 阅读 · 0 评论 -
JAVA类和对象
面向对象面向对象是一种思想类的定义和使用将实体抽象为类定义格式使用class关键字//创建类class ClassName{ field; //字段(属性) 或者 成员变量 method; //行为 或者 成员方法}class:类的关键字ClassName:类名{ }:类主体class washMachine{ //属性 public String brand; //品牌 pu原创 2022-02-23 16:03:08 · 452 阅读 · 0 评论 -
JAVA数组
数组的定义与使用数组创建及初始化数组创建T[] 数组名 = new T[N];T:数组元素类型T[ ]:表示为数组类型N:表示数组的长度 int[] array1=new int[10]; //创建一个可容纳10个int类型元素的数组 double[] array2 = new double[5];//创建一个可容纳5个double类型元素的数组 String[] array3 = new String[3];//创建一个可以容纳3个字符串元素的数组数组初始化原创 2022-02-23 15:47:20 · 197 阅读 · 0 评论 -
JAVA方法
JAVA方法,重载,汉诺塔,跳台阶!!!原创 2022-02-23 15:38:12 · 150 阅读 · 0 评论 -
JAVA输入输出
输出到控制台基本语法System.out.println(msg); //输出一个字符串,带换行System.out.print(msg); //输出一个字符串,不带换行System.out.printf(format,msg); //格式化输出println 输出的内容自带\n,print 不带 \n printf 的格式化输出方式和C语言的printf时基本一致的System.out.println("hello worl原创 2022-02-23 15:31:37 · 73 阅读 · 0 评论 -
逻辑控制语句
逻辑控制语句顺序结构按照代码书写顺序一行一行执行System.out.println("aaa");System.out.println("bbb");System.out.println("ccc");// 运行结果aaabbbccc分支结构if语句语法格式、结构同C语言语法格式if(布尔表达式){ //语句}if(布尔表达式){ //语句1}else{ //语句2}if(布尔表达式){ //statem原创 2022-02-23 15:29:27 · 110 阅读 · 0 评论 -
JAVA运算符
Java运算符大体与C语言一致,部分有语言特点算数运算符基本四则运算(+、-、*、/)int a = 20;int b = 10;System.out.println(a + b); // 30System.out.println(a - b); // 10System.out.println(a * b); // 200System.out.println(a / b); // 2System.out.println(a % b); // 0 --->模运算相当于数学中.原创 2022-02-23 15:24:19 · 492 阅读 · 0 评论 -
数据类型与变量
字面常量常量即程序在运行期间,固定不变的量称为常量public class Demo{ public static void main(String[] args){ System.Out.println("hello world!"); System.Out.println(100); System.Out.println(3.14); System.Out.println('A'); System.Ou原创 2022-02-23 15:17:45 · 401 阅读 · 0 评论 -
初识JAVA
JAVAmain方法,JAVA注释、JDK、JRE、JVM之间的关系?标识符、关键字原创 2022-02-23 15:06:37 · 127 阅读 · 0 评论 -
C——扫雷游戏
经典扫雷游戏C语言实现分析功能实现 1.生成雷盘 1.两个雷盘,一个真正的雷盘,一个用来显示 2.二维数组 2.埋雷 1.随机数种子 2.随机数 3.雷的个数 3.扫雷 1.通过输入坐标扫雷 2.无雷扩展...原创 2021-12-13 15:59:26 · 2683 阅读 · 0 评论 -
程序环境和预处理
程序的翻译环境和执行环境第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境,它用于实际执行码。详解编译+链接翻译环境组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)。 每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。 链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库, 将其需要的函数也链接到程序中编译的几个阶段预编译:预处理指令test原创 2021-12-03 16:14:50 · 604 阅读 · 0 评论 -
C-文件操作
文件1.程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。2.数据文件文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件而我们主要讨论的就是数据文件。数据文件被称为文本文件或者二进制文件。数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以AS原创 2021-12-01 22:20:44 · 165 阅读 · 0 评论 -
C语言——走迷宫
走迷宫迷宫地图在txt文件中,(1为墙,0为路)通过程序,找到迷宫出口,并打印出路径坐标,及迷宫地图分文件式编写utili.h公共头文件#ifndef _UTILI_H_#define _UTILI_H_#include<stdio.h>#include<stdlib.h>#endiflabyrinth.h走迷宫头文件结构体定义 x,y :节点位置 f:下一步方向1-向上、2-向...原创 2021-11-28 16:59:40 · 1347 阅读 · 0 评论 -
动态内存分配
动态内存分配在程序运行过程中,获取空间大小并开辟C/C++程序内存分区1. 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。2. 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。分配方式类似于链表。 3. 数据段(静态区)(stat原创 2021-11-28 16:34:33 · 662 阅读 · 0 评论 -
通讯录管理系统
通讯录管理系统,知识总结,功能:增加,删除,修改,查找,排序,清除,显示,退出。详细介绍!原创 2021-11-25 17:12:54 · 291 阅读 · 0 评论 -
自定义类型的深度理解
结构体回顾(结构体)结构体声明struct tag{ member_list;}variable_list;//定义tag为类型名typedef struct tag{ member_list;}tag;匿名声明,一般用于结构体内嵌套结构体;声明结构的时候,不完全声明(省略结构体标签tag)struct{ int a; char b; float c;}x;struct{ int a; ...原创 2021-11-21 14:35:28 · 282 阅读 · 0 评论 -
字符串进阶(字符函数&内存函数)
字符串进阶!字符函数:strlen() strcpy() strcat() strcmp() strncpy() strncat() strncmp() strstr() strtok() strerror()内存函数:memcpy() memmove() memset() memecmp()模拟实现,深度理解!原创 2021-11-20 01:50:23 · 494 阅读 · 0 评论 -
指针进阶学习
指针进阶学习,C语言的高端操作,新手式理解。指针数组、数组指针、函数指针、指针函数,一条龙!转移表实现计算器的简易操作!回调函数,实现万能函数!主函数还有参数???原创 2021-11-16 13:06:17 · 701 阅读 · 0 评论 -
Visual Studio调试
作为一名初学者,在编写程序是总会出现各种错误,这让人感觉手足无措,但是当错误被排除,程序成功运行,就会有一种成就感,一种程序猿的归属感^ ^。学会使用编译环境的调试技巧就显得至关重要!调试的基本步骤发现程序错误的存在以隔离、消除等方式对错误进行定位确定错误产生的原因提出纠正错误的解决办法对程序错误予以改正,重新测试Debug和Release的介绍。Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往原创 2021-10-30 22:39:33 · 231 阅读 · 0 评论 -
C语言——操作符和表达式
操作符算术操作符 + 加 - 减 * 乘 / 除 % 取余(操作数必须为整数) 算数转换:char -> int -> float -> double移位操作符<< 左移(左边抛弃,右边补零) >> 右移 (1.逻辑移位:左边补零,右边抛弃 2.算数移位:左边补符号为,右边抛弃) 不能移动负数位,此行为未定义!void s.原创 2021-10-23 17:49:51 · 564 阅读 · 0 评论 -
C语言——函数
自定义函数格式返回值类型 函数名 ( 函数参数){ .......}例int GetMax(int x,int y){ return x>y?x:y;}函数的参数实参(真实的参数)真实传给函数的参数;在函数调用时必须有确定的值;形参(形式的参数)在函数定义或声明时,函数名后的参数;只有在函数被调用时,才会实例化分配存储空间,在调用完成后,会自动销毁且形参只在函数内部有效。int GetM...原创 2021-10-17 00:41:43 · 136 阅读 · 0 评论 -
C语言——struct
结构体是一些变量组合,这些变量称为“成员变量”,每个成员变量可以是不同的类型的变量。声明struct tag{ member-list;}variable-list;typedef 为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。typedef unsigned int u_int;例//1.typedef struct Stu{ char na..原创 2021-10-30 22:03:28 · 365 阅读 · 0 评论 -
输入与输出
输入&输出输出——printf()转换说明要与数值类型相符;转换说明个数要与,参数个数相符;常用的转换说明在printf()中没有%lf的定义 %c 字符 %d 十进制整型 %o 无符号八进制整型 %x(%X) 无符号十六进制整型 %f 浮点数 %s原创 2021-11-16 12:31:19 · 281 阅读 · 0 评论 -
C语言——指针
定义存储内存单元地址,变量类型名 *变量名大小32位:4个字节64位:8个字节野指针1.指针未初始化2.指针越界3.指针指向的空间释放避免1. 指针初始化2. 小心指针越界3. 指针指向空间释放即使置NULL4. 指针使用之前检查有效性指针类型决定了指针移动的距离例:char类型移动1字节int类型移动4字节二级指针存储指针的指针类型名**指针名指针数组类型名*指针名[const]各个元素都为指针...原创 2021-10-23 22:46:12 · 113 阅读 · 0 评论