- 博客(25)
- 收藏
- 关注
原创 LeetCode 刷题基础 -- 模板原型Ⅰ
假设左上角坐标是(1,1),行数增加的方向为x增长的方向,列数增加的方向为y增长的方向,求从迷宫左上角到右下角的最少步数的路径。单峰序列是指,在这个序列中存在一个位置,满足这个位置的左侧(含该位置)是严格递增的、右侧(含该位置)是严格递减的,这个位置被称作峰顶位置。给定由n个正整数组成的序列A,接下来给出k个查询,每个查询指定两个正整数l、r,计算序列从第l个整数至第r个整数之和,即Al+Al+1+…给定一个包含 n 个正整数的集合 S1,再给定一个包含 m 个正整数的集合 S2,求两个集合的交集。
2024-10-08 09:54:03 1153
原创 LeetCode 刷题基础 -- 基础语法
Min = 1e9;// 单链表int val;//自定义cmpint x,y;if(a.x!=b.x){}else{// 结构体// 在结构体Fruit内部重载 < 操作符,对两个 Fruit 变量 f1 与 f2,// 当 f1.price > f2.price 时认为 f1 < f2成立;int price;i < n;int price;//此时优先队列的定义应该如下。
2024-09-24 20:01:49 750
原创 Docker 学习 Day 2
镜像是分层的联合文件系统Docker 镜像加载原理重点理解Docker 镜像层是只读的,容器是可写的当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”为什么 docker 镜像要采用这种分层结构呢?(层层的来,一方便组合,减少不必要的资源浪费。二、精准快速)
2024-09-11 16:13:51 1201 1
原创 Docker 学习 Day 1
环境配置太麻烦。所以打包成镜像,然后在docker引擎上运行。问题完美解决(虚拟机)举例:搬家以前每次班级不能保证,搬后和原来一模一样。总会丢东西或者布局不一样有了docker,直接搬楼,全部移过去,包一样的Centos7 安装Docker 详细多图版_centos7安装docker-CSDN博客。
2024-09-09 18:23:42 978
原创 SpringBoot3 + Vue3 学习 Day 3
而更新文章分类需要 id 、tegoryName 和 categoryAlias 都不为空,这就出现了一个问题,如果满足 更新文章分类的要求的话,给 id 加上 @ NotNull 的注解,那就 新增不了文章分类了,因为add 是没有id的,全靠数据库自动生成。处理 category 参数校验时, 新增文章分类 add( ),只需要categoryName 和 categoryAlias 不为空就行,id 由数据库自动生成。他是有脑子的,而 mapper层 是真正的体力层,不需要有脑子。
2024-07-21 15:49:49 1166
原创 SpringBoot3 + Vue3 学习 Day 2
登入时生成token,并返回 token (UserController 类里实现)其他接口(如ArticleController)则需要验证token 才能正常使用(提供服务)浏览器访问其他接口时会携带token。查看接口文档说明,看看token在哪这样,用户就只有在登入(或携带token)的情况下,才能访问了。
2024-07-20 12:46:13 1018
原创 SpringBoot3 + Vue3 学习 Day 1
① 创建Maven工程 文件 -> new -> Module ->…② 导入spring-boot-starter-web 起步依赖③ 编写Controller④ 提供启动类狗腿子是接口,接收到命令后,立马说:收到,我执行了。然后狗腿子部门开会,得出具体实现:我先把大管家告诉我的密码加密,然后叫具体的小二去执行。
2024-07-19 09:25:24 1351
原创 Java 快速入门学习 -- Day 2
Dao 接口的绑定 是通过映射文件的 namespace 实现的,注意要一一对应。MyBatis 查询数据库:不需要手动封装,它会将数据库的每一个列 和 程序里的具体的某一个对象的属性 一一对应。JDBC 查询数据库:需手动的将数据封装为一个对象,然后才能获取对象的信息,这样才能实现查询。maven 仓库,图书馆。要看书的化先从家里找(本地仓库),本地找不到就去中央仓库或者镜像仓库找,并把找到的书放入本地仓库。① 之前建房子,要自己买钢筋水泥什么的(如DJDBC,每次增删改查前都要插入驱动,连接什么的。
2024-07-19 09:17:02 772
原创 【解决】The JAVA_HOME environment variable is not defined correctly This environment variable is needed
在安装maven 时,当按教程配置环境后,任未安装成功,可能是最近在 用户变量 里也定义了相同的环境变量,且路径不同。这是因为安装 maven 时去找了JAVA_HOME 时找了A地址,而那里没有。
2024-07-11 11:11:02 588
原创 Java 快速入门学习 -- Day 1
用以前方法实现 ”小女孩和猫玩“ :创建猫类Cat(内含方法shout() 猫喵喵叫),创建小女孩Girl类(内含方法play(Cat cat) 实现和猫玩) 然后创建猫和小女孩的实体类,执行 girl.play(cat)再要实现”小女孩和狗玩“:创建狗类Dog(内含方法shout() 狗汪汪叫),创建小女孩Girl类(内含方法play(Dog dog) 实现和狗玩) 然后创建狗和小女孩的实体类,执行 girl.play(dog)子类可继承父类的方法,也可以重写父类的方法,重写后调用自己的方法。
2024-07-11 08:41:36 1023
原创 C++ Primer 学习 -- Day 2
3.1 .1 命名空间的using 声明==提醒==3.2.1 定义和初始化 string 对象直接初始化和拷贝初始化3.2.2 string 对象上的操作==提醒==比较 string 对象( vector 也一样 )字面值和 string 对象相加==提醒==3.2.3处理 string 对象中的字符==建议==处理每个字符?使用基于范围的 for 语句使用范围 for 改变字符串中的字符只处理一部分字符?题目3.3.0 标准库类型 vector==注意==3.4.0 迭代器==建议==
2024-06-19 22:12:50 1144
原创 C++ Primer 学习 -- Day 1
对象:一块能存储数据并具有某种类型的内存空间提醒初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来代替。 C++ 语言支持**分离式编译(separate compilation)**机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译。 为了支持分离式编译,C++ 语音将声明和定义区分开来。**声明(declaration)使得名字为程序所知,而定义(definition)**负责创建与名字关联的实体。
2024-06-14 22:59:41 879
原创 LeetCode 刷题 -- Day 8
先序遍历树,利用 mostDeepHight 记录遍历过程中遇到的最大深度,mostDeepVal 记录遍历过程中遇到的最大深度的结点值。这样可得到最底层的结点。 而利用先序遍历,先访问当前结点的左子树,再访问右子树,再加上 叶子结点的深度大于mostDeepHight 才更新(并非大于等于)这样就保证了对同一层结点,只记录最左边的结点值,即为答案。 ② 中序序列以 x 为中心,x 左侧的元素为 x 的左子树, x 右侧的元素为 x 的右子树。
2024-04-26 10:24:29 1178 1
原创 LeetCode 刷题 -- Day 7
先是vector ans 数组存各路径的结点,然后遍历ans 数组取出各结点形成路径,这太麻烦了。所以只需判断当前节点引导的子树是不是满二叉树,是的话直接返回子树的结点,不是的话就往下遍历。 自顶向下递归,因此对于同一个节点,函数 getHight 会被重复调用,导致时间复杂度较高。 自顶向下遍历树的各结点(先序遍历),对每一结点,判断左右子树的高度差是否小于等于 1。② 如果 root1 和 root2 一个为空,一个不为空,则不对称。
2024-04-25 18:23:38 913 1
原创 LeetCode 刷题 -- Day 6
在遍历队列的过程中,利用while(q.size()–) 实现遍历每一层,将遍历的元素出队,并将下一层压入队列,最后就得到了各层结点值了。在遍历队列的过程中,利用while(q.size()–) 实现遍历每一层,将遍历的元素出队,并将下一层压入队列,最后就得到了各层结点值了。DFS 遍历树,且每下一层高度 h+1,当访问到叶子结点时,就得出了一条从根节点到最近叶子结点的路径长度了(为当前h+1),记录最小的路径长度即为答案。② root 不为空,则找它的左右孩子的高度,并返回较大的高度 h。
2024-04-24 21:43:55 1143
原创 LeetCode 刷题 -- Day 5
c++11 新标准引入了三个新成员------- emplace_front,emplace 和 emplace_back,这些操作构造而不是拷贝元素,因此相比push_back 等函数能更好地避免内存的拷贝与移动,使容器插入元素的性能得到进一步提升。② 对于push 操作的实现,直接push存入q,对于pop 操作,先把q 中的非队尾元素按序存入 temp,q 的队尾即为要pop的元素,把队尾元素pop后,再将temp中的元素按序存入q。定义优先级队列,自动排序,队首元素即为最大值。
2024-04-22 21:49:52 971
原创 LeetCode 刷题 -- Day 4
有性质:将 s 中第一个(或前k个) s‘ 移去,再 s 末尾加入一个 (或k个)s’ ,则 s 不变。s’ ,将 s 的首尾拼接(ss)后,中间会出现 s。i += 2 * k) ,i 为观察区第一个元素下标,则 ① 为 reverse(s.begin() + i, s.begin() + i + k);从1开始计数,在计数开始前或每数到 2k 时都进行判断处理一次 ①数到2k的倍数则反转前k个,②剩余字符少于k个则全部反转并结束,③ 如果剩余字符少于2k个 但大于等于 k 个则反转前k个并结束。
2024-04-20 11:41:20 820
原创 LeetCode 刷题 -- Day 3
因为使用 sort() 后,nums1 和nums2 中元素都从小到大排列,所以用双指针遍历时 push_back到 ans 的数也是按从小到大的顺序,即下一个要 push_back 到 ans 的数,要么比ans中所有的数都大,要么等于ans.back()。所以值不会越来越大的,那就只有 ①、② 两种情况,那这题就简单了,循环计算各个位置平方和,若得到的值出现过,则说明进入循环了,break;所以这题其实不是用哈希表法,而是用动态规划的知识,动态规划以后再来探讨吧,先学基础的。
2024-03-28 20:32:43 2372
原创 【操作系统知识总结-上】适合考研或面试
①程序是指令的集合,是静态的概念。进程是程序在处理机上的一次执行的过程,是动态的概念。程序可以作为软件资料长期保存。进程是有生命周期的。②进程是一个独立的运行单位,能与其它进程并行(并发)活动。而程序则不是。③进程是竞争计算机系统有限资源的基本单位,也是进行处理机调度的基本单位。④不同的进程可以包含同一程序,只要该程序所对应的数据集不同。
2024-03-27 15:47:12 929
原创 【离散数学面试/复试】一些问答题和名词解释
置换规则:设f(A) 是含公式A 的命题公式,f(B) 是用公式B置换了 f(A) 中所有的 A 后得到的命题公式,若 B <=> A,则 f(A) <=> f(B);(1)设无向图G<V,E>,V’⊂V,若p(G-V’)>p(G),且对V’的任何真子集V’‘,p(G-V‘’)=p(G),则称V’为G的。(2)无向图G<V,E>,E’⊂E,若p(G-E’)>p(G),且对E’的任何真子集E’‘,p(G-E‘’)=p(G),则称E’为G的。逻辑等价:如果A,B在其任意赋值下,其真值都相同。
2024-03-25 21:48:17 2470
原创 LeetCode 刷题 -- Day 2
想了很久,发现一种比两趟好一点的方法:用一趟是为了代码跑得快,那我定义两个指针 *fast 和 *slow,fast一次走两步,slow每次走一步,这样fast到底终点后,slow只走了一半。这样只用花一半的时间就能得到链表的长度len了,此时slow还在链表的中间,若 n < len 的话,slow 继续向前next,找到要删除的结点删除就行,这不就一趟实现了。则 当 fast 走了 a 步时,f = a,s = nb + a,两者相遇,并同时指向链表入口。解决方法:用pre指针搭桥,连接各端。
2024-03-24 00:21:22 2217
原创 LeetCode 刷题 -- Day 1
2、为了使用双指针不停移动来更新ans,选择了从两端往中间移动,先让 j = nums.size() - 1,若a[i] [j] > target 再分别讨论 a[i+1] [j] 和 a[i] [j-1] 这两种情况,这样则要么使用DFS,要么用二维数组或结构体(发现没有,其实可以不用数组)定义sum为连续子数组值的和,sum < target 当然是 ++j,sum > target 那 j 不动,sum - nums[i] 后 i++,是不是比 i,j 从两端开始往中间移动好一点。
2024-03-22 19:29:33 715 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人