- 博客(59)
- 收藏
- 关注
原创 一个很奇怪的递归方式(难道是数学推导???)(leetcode.600)
map集合存放的n=map.first的时候,[0, map.first]中符合题意要求的数个数也就是map.second。(蚌埠的状态,思路是似懂非懂的,代码是通过的,现在只能理解自己这一种找规律的思路)看起来像是左面都是n/2,右面都是(n-1)/4(然后除法交给位运算就可以了)范围的非负整数中,有多少个整数的二进制表示中不存在。我从4列到了13感觉这个公式可能找规律出来的?但是感觉这个公式不应该是这么出来的。还是没懂那个公式是怎么来的QAQ。
2024-08-20 15:41:12
257
原创 划分数组得到最小值之和(leetcde.3117)
明确:题目中得到的可能的子数组之和。表示的应该是每个子数组最后一个元素值的和。这样比较符合给出的测试用例。思路:从nums[0]开始考虑某一个元素是否可以作为最后一个元素,并且计算and&结果正好等于val[j],然后依次递推,当等于val[j]的时候,就需要考虑,以当前元素结尾,不以当前元素结尾,两种情况。
2024-08-17 10:34:58
239
原创 二进制运算练习(leetcode.3151)
因为需要考虑单双数,但是不想使用%2取余的方式,所以直接考虑二进制位,因为单数二进制位最后是1,双数二进制位最后一位是0。所以按照题目要求首先判断数组是否只有一个元素,如果只有一个元素直接返回(相当于给了一个得出结果的快速通道,判断在前特殊情况之后再执行逻辑)。然后使用数组第一个元素&1得出第一位数的单双,&1单数返回1,双数返回0。
2024-08-13 08:45:37
387
原创 function+lambda(leetcde.676)
本题其实直接使用一个容器存储输入的数组中的字符串(甚至直接赋值也可以)然后逐一和输入的字符串比对,保证修改字符不超过1(diff
2024-08-12 20:36:48
274
原创 快速幂理解
因为涉及到对指数的多次取模,所以在取模的时候先取模和后取模结果一定是一样的,所以采用快速幂的方法,现将指数的底数增大次数变小(方便计算出指数也就是快速幂的方法,因为在次数很大的时候暴力计算的方法不利于直接计算出指数结果。通过快速幂的方式可以提升底数,降低次数这样可以通过相乘几个大一点的底数来计算)。在此基础之上,本体多了取模一说,取模因为计算出的结果是不变的早取模和晚取模一样,所以可以在快速幂的时候就对底数进行取模,这样保持一直在较小数中进行计算。
2024-07-30 09:54:16
331
原创 二维数组前缀和
思路就是使用前缀和,前缀和表示的是面积,每一个位置对应的前缀和都表示以当前坐标为右下角所计算的“面积”中的前缀和,也就是当前面积覆盖所有区域的累加和。在初始化过程中创建一个前缀和数组,前缀和数组的长度和宽度都比原数组大1,然后计算当前[i,j]位置的前缀和的时候,使用一种前缀面积的方式去获取前缀前缀和数组的面积计算。得到前缀和数组之后,在传入参数的时候左上角和右下角相应的+1因为前缀和数组从(1, 1)开始有意义值,然后同样通过面积相减的方式来得到所取范围的。
2024-07-26 16:07:36
197
原创 KMP算法
为什么可以相等,因为只计算相同子串的部分,后面那部分不相等的不去计算,也正是因为仅仅记录的当前位置的最长公共前后缀,所以可以模拟一个B串的所有最长公共前后缀长度情况,组成一个最长公共前后缀数组,供A串匹配的时候使用(这里说的是假如前五个元素相等,第六个元素不相等,这时候前五个元素一定相等,A串的后缀{这五个元素的后缀}与B串的前缀{这五个元素的前缀}可以看作都是B串的,所以是B串中的最长公共前后缀。B串自己与自己匹配 B[1]~B[i]的前缀与它的后缀匹配 后缀为主串,前缀为模式串。
2023-07-06 19:54:25
155
原创 01背包二维数组转一维数组
二维数组变为一维数组,使用滚动数组实现,滚动数组是动态规划中一种用于空间优化的技巧,具体来说就是在计算当前状态的时候,只使用前一阶段的状态值,因此不需要保留全部的状态,只保留一部分即可,通过这种方式可以将多维转化为一维,从而大幅减小占用空间。01背包是一种经典的动态规划问题,是指在给定容量的情况下,选择一些物品放入背包,使得物品的总价值最大,且不能超过背包的总重量,01表示选或不选两种状态,每种物品只有这两种状态。定义一个二维数组dp[i][j],表示前i个物品放入容量为j的背包中所能获得的最大价值。
2023-04-01 17:03:10
644
原创 C/C++字节对齐规则
现代计算机中,内存空间按照字节划分,理论可以从任何骑术地址访问任意类型的变量。但是实际访问中特定类型的变量经常在特定的内存地址访问,这就需要各种类型数据按照一定规则在空间上排列,而不是一个接一个地存放,这就是对齐。
2023-01-13 16:26:36
884
原创 构造和析构
将一个类的构造函数私有化,可以使该类不能被实例化,同时不能被继承。但是在类内可以访问自身的private字段,所以我们可以通过static函数创建class对象,以引用或者指针的形式返回。这样就可以使用这个类的对象了构造函数私有化的类的设计保证了其他类不能从这个类派生或者创建类的实例。
2023-01-11 16:49:12
360
原创 类静态变量的初始化
静态成员变量是一种特殊的成员变量,他被关键字static修饰,这个变量会被当前类所有,无论创建多少A对象内存中都只有一个value变量。
2023-01-11 11:28:24
3733
原创 STL中vector怎么扩容
vector被称为向量容器,该容器擅长在尾部插入或删除元素,时间复杂度为O(1);而对于在vector容器头部或者中部插入或删除元素,则花费时间要长一些(移动元素需要耗费时间),时间复杂度为线性阶O(n)。使用vector容器,需要包含,注意这里无扩展名。STL中规定容器的区间遵循前闭后开原则,即容器中的一对迭代器start和finish标识的前闭后开区间,从start开始,直到finish-1.迭代器finish所指的是“最后一个元素的下一位置”。
2023-01-08 11:17:47
740
原创 new和malloc的区别以及底层实现原理
在Linux环境下从操作系统角度看,进程分配内存有两种方式,分别由两个系统调用完成:brk 和 mmap (不考虑共享内存)这两种方式分配的都是虚拟内存,没有分配物理内存。在第一次访问已分配的虚拟地址空间的时候,发生缺页中断,操作系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。malloc基本的实现原理就是维护一个内存空闲链表,当申请内存空间时,搜索内存空闲链表,找到适配的空闲内存空间,然后将空间分割成两个内存块,一个变成分配块,一个变成新的空闲块。
2023-01-07 11:09:17
913
1
原创 C++多态实现
多态是同一个行为具有多个不同表现形式或者形态的能力,简单的概括为“一个接口,多种方法”,是面向对象领域的核心概念c++支持两种多态性:编译时多态,运行时多态c++运行时多态是通过虚函数来实现的,虚函数允许子类重新定义函数,而子类重新定义父类的做法称为覆盖/重写(Override),或者称为重写。
2023-01-06 10:53:03
926
原创 C语言实现C++对象和私有成员
解决方案:将结构体放进源文件中,头文件只放声明这其实跟C的编译有关,当结构体定义在头文件中时,因为我们主函数所在的源文件(main.cpp)会include这个头文件,而编译时相当于将该头文件的内容直接替换掉inlcude,那么main中或者其他include了该头文件的函数都可以访问结构体成员;但当结构体定义在源文件中时,编译时没有将结构体的定义复制过来,因此结构体成员在main中不可用,但因为在源文件中定义了结构体,因此该源文件下的所有函数均可以访问结构体成员。obj.h。
2023-01-05 15:57:12
1022
原创 关于makefile
伪目标不是一个文件,只是一个标签,所以make无法生成它的依赖关系和是否执行,我们只有显示的指明这个目标才能让其生效,为了避免和文件重名我们可以使用一个特殊符号.PHONY来显式指明一个目标就是伪目标,向make说明不管是否有这个文件这个目标就是伪目标,只要有这个声明不管是否有这个文件要运行clean就可以make clean使用。object的值将会是*.c,并不会是*.c文件的展开,如果需要表示.c文件基于需要使用wildcard函数这样就能使object表示为.c文件的名的集合。
2022-09-25 16:45:10
240
原创 KMP算法
为什么要使用kmp算法?减少字串(T)在主串(S)中不必要的查找暴力查找逐个查找每次发现有字符不相符,主串就返回到最初字符的下一个字符,字串返回到最开始在图中可以发现字符串中某一段是重复的回到最初就加大了搜索难度,所以引入一个next数组来记录子串,用于在指针返回的时候不用回到最开头。...
2022-07-30 18:00:34
115
原创 basename
函数dirname()和basename()将中断以null结尾的路径名字符串到目录和文件名组件中。在通常情况下,dirname()返回字符串,直到但不包括最后的“/”,和basename()返回最后一个“/”后面的组件。如果路径不包含斜杠,则dirname()返回字符串“”而basename()返回路径的副本。如果路径是字符串“/”,然后,dirname()和basename()都返回字符串“/”。连接由dirname()返回的字符串、一个“/”和字符串由basename()返回,生成完整的路径名。...
2022-07-24 17:11:56
208
原创 网络编程学习笔记
网络编程1、网络编程入门1.1网络编程概述计算机网络:是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统网络编程*在网络通信协议下,实现网络互联的不同计算机上运行的程序间可以进行数据交换1.2网络编程三要素IP地址*要想让网络中的计算机能够互相通信必须为每台计算机指定一个标识号,通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而IP地址就是这个标识号。也就是设
2021-07-10 11:01:35
97
原创 3、生产者消费者
3.1生产者消费者模式的概述生产者消费者模式是一个十分经典的多线程协作的模式,弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻所谓生产者消费者问题,实际上主要是包含了两类线程:*一类是生产者线程用于生产数据*一类是消费者线程用于消费数据为了解耦生产者和消费者之间的关系,通常会采用共享的数据区域,就像是一个仓库*生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为*消费者只需要从共享数据区中去获取数据,并不需要关心生产者的行为为了体现生产和消费过程中的等待和唤醒
2021-07-07 16:03:18
85
原创 2、线程同步
买票案例 package com.it_06;/* 需求: 某电影院目前正在上映国产大片,共有100张票,而他有三个窗口买票请设计一个程序模拟该电影院买票 思路: 1、定义一个类SellTicket实现Runnable接口,里面定义一个成员变量:private int tickets = 100; 2、在SellTicket类中重写run()方法实现买票,代码步骤如下 A:判断票数大于0,就买票,并告知是那个
2021-07-07 15:58:09
90
原创 实现多线程
1.1进程进程是正在运行的程序*是系统进行资源分配和调用的独立单位*每一个进程都有它自己的内存空间和系统资源1.2线程线程:是进程中的单个顺序控制流,是一条执行路径*单线程:一个进程如果只有一条执行路径,则称为单线程程序*多线程:一个进程如果有多条执行路径,则称为多线程程序*举例 记事本程序 扫雷程序1.3多线程的实现方式方式1:继承Thread类*定义一个MyThread继承Thread类*在MyThread类中重写run()方法 //MyThread中可能有其他的代
2021-07-06 17:12:26
123
原创 复制文本加入异常处理
package it_09;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class CopyFileDemo { public static void main(String[] args) { } //JDK9的改进方案 private static vo
2021-07-03 19:49:51
66
原创 从文件到集合
package it_06;import java.io.*;import java.util.ArrayList;/* 需求:把文本文件中的数据读取到集合中,并遍历集合。要求:文件中每一行数据是一个学生对象的成员变量值 思路: 1、定义学生类 2、创建字符缓冲输入流对象 3、创建ArrayList集合对象 4、调用字符缓冲输入流对象的方法读取数据 5、把读取到的字符串数据用split(
2021-07-03 12:05:49
85
原创 Java文件的复制
package it_03;import java.io.*;/** * 需求: * 把模块目录下的ConversionStreamDemo.java复制到模块目录下的Copy.java * 思路: * 1:根据数据源创建字符输入流对象 * 2:根据目的地创建字符输出流对象 * 3:读写数据,复制文件 * 4:释放资源 */public class CopyJavaDemo01 { public static void ma
2021-06-30 21:21:05
70
原创 字符流读数据的两种方式
package it_02;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;/** * 构造方法: * InputStreamReader(InputStream in) :创建一个使用默认字符集的InputStreamReader * * 读数据的两种方式: * int read():一次读一个字符数据 * int re
2021-06-30 21:04:54
62
原创 字符流写数据的5种方式
package it_02;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;/** * 构造方法: * OutputStreamWriter (OutputStream out) : 创建一个使用默认字符编码的OutputStreamWriter * * 写数据的5种方式 * void write (int c):写一个字符 *
2021-06-30 20:45:50
135
原创 字符流中的编码解码问题
package it_02;import java.io.*;/* 字符流抽象基类 *Reader : 字符输入流的抽象类 *Writer : 字符输出流的抽象类 InputStreamReader:是从字节流到字符流的桥梁 它读取字节,并使用指定的编码将其解码为字符 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集 OutputStreamWriter:是从字符流到字节流的桥梁
2021-06-30 20:15:19
126
原创 字符串的编码解码问题
import java.io.UnsupportedEncodingException;import java.nio.charset.StandardCharsets;import java.util.Arrays;/* 编码: byte[] getBytes(String charsetName):使用指定的字符集将该String 编码为一系列字节,将结果存储到新的字节数组中 解码: String(byte[] bytes):通
2021-06-30 19:34:21
141
原创 Collections-1
import java.util.ArrayList;import java.util.Collections;import java.util.List;/*Collections类的常用方法*Public static <T extends Comparable<?super T>>void sort(List<T>list将指定的列表按升序排序*public static voi reverse(List<?>llist)反转指定列表中的元
2021-06-20 13:10:13
66
原创 泛型的概述
1、泛型概述泛型::是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型他的本质是(参数化类型),也就是说所操作的数据类型被指定为一个参数一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是(将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型)这种参数类型可以用在类、方法、接口中,分别被称为泛型类、泛型方法、泛型接口泛型定义格式:*<类型>:指定一种类型的格式。这里的类型可以
2021-06-14 20:33:02
114
原创 异常的内容
1、异常概述:程序出现不正常的状况异常体系 Error:严重问题,不需要处理Exception:称为异常类,它表示程序本身可以处理的问题*RuntimeException:在编译期是不检查的,出现问题后,需要回来修改代码*非RuntimeException:编译期就必须处理的,否则程序不能通过编译,更不能正常运行2、JVM的默认处理方案如果程序出现问题,没有做任何处理最终JVM会做默认处理*把异常的名称,异常的原因及异常出现的位置等信息输出在控制台*程序停止运行3、异常处理如果程序
2021-06-02 20:41:47
137
原创 关于内部类
内部类概述:内部类就是在一个类中定义一个类。举例:在一个A的内部定义一个类B,类B就被称为内部类内部类定义格式*格式public class 类名{ 修饰符 class 类名{ }}*范例public class Outer{ public class Inner{ }}内部类的访问特点*内部类可以直接访问外部类的成员,包括私有*外部类要访问内部类的成员,必须创建对象—————————————————————————————成员内部类按照内部类在类中定义的位置不同,
2021-06-01 18:42:48
73
原创 接口相关内容
接口概述:接口就是 一种公共的规范标准,只要符合规范标准,大家都可以使用Java中的接口更多体现在对行为的抽象接口的特点:*接口的关键字用interface修饰public interface 接口名{}*类实现接口用implements表示public class 类名 implements 接口名{}*接口不能实例化接口如何实例化?参照多态方式,通过实现类对象实例化,这叫接口多态多态的形式:具体类多态,抽象类多态,接口多态多态的前提:有继承或者实现关系;有方法重写;有父(类/接
2021-05-29 19:44:59
92
原创 抽象类相关内容
抽象类概述:在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类抽象类的特点:*抽象类和抽象方法必须使用abstract关键字修饰 public abstract class 类名{} public abstract void eat();*抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类*抽象方法不能实例化抽象方法如何实例化:参照多态的方式,通过子类对象的实例化,这叫抽象类多态*抽象类的子类要么重写抽象类中所有抽象方法要么是抽象类抽
2021-05-29 19:40:53
57
原创 多态相关内容
多态概述:同一个对象在不同时刻表现出来的不同形态多态的前提和体现:*有继承/实现关系*有方法重写(@Override重写标记)*有父类引用指向子类对象多态成员访问特点:*成员变量:编译看左边,执行看左边*成员方法:编译看左边,执行看右边为什么成员变量和成员方法的访问不一样?*因为成员方法有重写而成员变量没有多态的好处与弊端:*多态的好处:提高程序扩展性具体体现:定义方法时,使用父类型作为参数,将来在使用时使用具体子类参与操作*多态的弊端:不能使用子类特有的功能多态的转型:*向
2021-05-29 19:38:53
53
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人