自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法练习第24天|78.子集、 90.子集II

78. 子集 - 力扣(LeetCode)

2024-05-19 22:26:36 99

原创 C++设计模式|结构型 适配器模式

可以将⼀个类的接⼝转换成客户希望的另⼀个接⼝,主要⽬的是 充当两个不同接⼝之间的桥梁,使得原本接⼝不兼容的类能够⼀起⼯作。2. 适配器模式的组成(1)接口类,给客户端调用;(2)被适配者类;(3)适配器类。3.适配器模式的分类适配器模式一般分为类适配器模式和对象适配器模式。(1):适配器类通过继承适配者类(多重继承),达到适配目的,部分语言可能不支持多重继承(如C#)。(2):适配器类中存放适配者类的实例对象,调用它来达到适配目的,该模式较常用。下面的题目我们使用第二种类型来进行求解。

2024-05-19 17:26:39 480

原创 算法练习第23天|131.分割回文串、93.复原IP地址

回溯函数除了参数除了需要字符串,还用到了老朋友result和path(也可以去掉,因为是全局的)。判断回文的函数有三个参数,字符串本身s,字符串起始位置start以及字符串末尾位置(最后一个字符的位置)。回溯第三步就是提取未探索区域的子串,然后判断子串是否为回文串 ,如果是,path记录,然后未探索区域进一步缩小,进行递归,回溯。我们在前面的文章中讲到,如果从一个集合中取组合就需要使用startIndex(见这篇博文39题的思路分析部分)。其实本题的切割问题也可以看作前面题目中从集合中取元素的问题。

2024-05-18 19:22:25 564

原创 算法练习第22天|39. 组合总和、40.组合总和II

39. 组合总和39. 组合总和 - 力扣(LeetCode)

2024-05-15 18:29:40 813

原创 C++设计模式|创建型 5.原型模式

原型模式⼀种创建型设计模式,该模式的核⼼思想是基于现有的对象创建新的对象,⽽不是从头开始创建。在原型模式中,通常有⼀个原型对象,它被⽤作创建新对象的模板。新对象通过复制原型对象的属性和状态来创 建,⽽⽆需知道具体的创建细节。2.为什么要使用原型模式?如果一个对象的创建过程比较复杂时(比如需要经过一系列的计算和资源消耗),那每次创建该对象都需要消耗资源,而通过原型模式就可以复制现有的一个对象来迅速创建/克隆一个新对象,不必关心具体的创建细节,可以降低对象创建的成本。

2024-05-14 21:02:15 473

原创 算法练习第21天|216.组合总和|||、17.电话号码的字母组合

一般来说,回溯函数的返回值类型为void,至于参数,为了表达方便,我们定义了目标和targetSum(即题目中的n)、k、遍历到当前路径的和sum、以及每一层回溯的开始索引startIndex。index表示遍历到了digits的第几个数字,其初始值为0,遍历过一个数字后就会+1,那么当index等于digits.size()时,表明遍历完毕。在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。给出数字到字母的映射如下(与电话按键相同)。

2024-05-14 16:32:22 838

原创 C++设计模式|创建型 4.建造者模式

建造者模式(也被成为生成器模式),是一种创建型设计模式,软件开发过程中有的时候需要创建很复杂的对象,而建造者模式的主要思想是将对象的构建过程分为多个步骤,并为每个步骤定义一个抽象的接口。具体的构建过程由实现了这些接口的具体建造者类来完成。同时有一个指导者类负责协调建造者的工作,按照一定的顺序或逻辑来执行构建步骤,最终生成产品。举个例子,假如我们要创建一个计算机对象,计算机由很多组件组成,例如 CPU、内存、硬盘、显卡等。每个组件可能有不同的型号、配置和制造,这个时候计算机就可以被视为一个复杂对象,构建过程相

2024-04-19 18:03:53 872

原创 算法练习第20天|回溯算法 77.组合问题 257. 二叉树的所有路径

回溯法也可以叫做回溯搜索法,它是一种搜索的方式。其本质是穷举,穷举所有可能,然后选出我们想要的答案。2.为什么要有回溯算法?那么既然回溯法并不高效为什么还要用它呢?因为有的问题能暴力搜出来就不错了,撑死了再剪枝一下,还没有更高效的解法。组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按一定规则全排列,有几种排列方式棋盘问题:N皇后,解数独等等。

2024-04-18 21:40:15 1091

原创 C++设计模式|创建型 3.抽象工厂模式

在上一篇文章中介绍了,每个具体工厂负责生产一个专门的产品,其代码扩展性很好,这篇文章将介绍抽象工厂模式。

2024-04-17 20:27:48 904

原创 算法练习第19天|222.完全二叉树的节点个数

222. 完全二叉树的节点个数 - 力扣(LeetCode)

2024-04-17 14:27:38 965

原创 算法练习第18天|111.二叉树的最小深度

111. 二叉树的最小深度 - 力扣(LeetCode)

2024-04-16 21:47:21 1029

原创 算法练习第17天|104.二叉树的最大深度 、559.N叉树的最大深度

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。最大深度==二叉树的层数==根节点的深度==根节点的高度==第二层节点的最大高度+1。二叉树某个节点的深度:指从根节点到该节点的最长简单路径边的条数。二叉树某个节点的高度:指从该节点到叶子节点的最长简单路径边的条数。

2024-04-16 20:11:22 816

原创 C++设计模式|创建型 2.工厂模式

简单工厂的思想中只有一个工厂类,用于创建所有的产品,如果需要添加新的产品,就需要修改工厂类的代码。而工厂模式引入了抽象工厂和具体工厂的概念,每个具体工厂只负责创建一个具体产品,添加新产品时只需要添加新的工厂类,支持扩展,复合开闭原则。一个接口,包含一个抽象的工厂方法,该方法用于创建产品对象。具体工厂:实现抽象工厂接口,创建具体的产品。抽象产品类:定义产品的接口。具体产品类:实现抽象产品接口,是工厂创建的对象。工厂模式的示意图如下图所示,实际的生产系统所管理的是对应的工厂,工厂负责产品的生产。

2024-04-16 19:19:06 1081

原创 算法练习第16天|101. 对称二叉树

力扣链接题目描述:给你一个二叉树的根节点root, 检查它是否轴对称。truefalse思路分析:对于二叉树是否对称,要比较的是是不是相互翻转的,而不是比较左右子节点。所以在递归遍历的过程中,。要比较子树的外侧与内侧。

2024-04-12 22:37:36 346

原创 C++设计模式|创建型 1.单例模式

单例模式的的核⼼思想在创建类对象的时候保证⼀个类只有⼀个实例,并提供⼀个全局访问点来访问这个实例。只有⼀个实例的意思是,在整个应⽤程序中,只存在该类的⼀个实例对象,⽽不是创建多个相同类型的对象。全局访问点的意思是,为了让其他类能够获取到这个唯⼀实例,该类提供了⼀个全局访问点(通常是⼀个静态⽅法),通过这个⽅法就能获得实例。

2024-04-12 17:12:26 1391

原创 C++设计模式|0.前言

简答来说,设计模式就是一套好用的代码经验总结,也就是怎么写好代码的方法论。使用设计模式是为了可重用代码、让代码更容易被他人理解、提高代码的可靠性。

2024-04-12 14:44:31 422

原创 算法练习第15天|226.翻转二叉树

力扣链接题目描述:给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。[2,3,1]root = [][]思路分析:翻转二叉树,其实就把每一个节点的左右孩子交换一下就可以了。注意,是的左右子节点。这就可以用到前面所将的二叉树递归遍历和层序遍历。下面分别使用前序递归,后序递归和层序遍历来实现。

2024-04-11 19:31:39 328

原创 算法练习第14天|102.二叉树的层序遍历

层序遍历可以借助单向队列来实现。队列先进先出的特性,与按层次进行元素的先后遍历刚好思想统一。二叉树通过指针来实现树的构建,所以队列里面存的应该是指向节点的指针,而且遍历开始时存放的应该是。在记录完根节点对应的元素后,应该将根节点对应的左右子节点的指针入队(为下一层遍历做准备),同时将根节点指针出队(已经记录过了)。层序遍历与前面讲的递归实现二叉树的遍历属于不同思想。此外,对于较深的层,其节点数可能不唯一,这时候就需要在。(即逐层地,从左到右访问所有节点)。,而前面讲的递归遍历属于。,接着该节点的指针出队。

2024-04-11 14:34:27 293

原创 算法练习第12天|● 239. 滑动窗口最大值● 347.前 K 个高频元素

其中 push(int val) 表示val入队,它的规则是:如果val前面的元素比val小,那么就将这些数通过pop_back弹出,直到遇到比val大的数停止或队列为空停止。所以为了更加方面的对多余元素进行剔除,单调队列在用STL容器中的双端deque进行实现,因为deque支持在队列两端进行入队、出队操作。窗口滑动之后,3不在是窗口内的数,所以需要使用pop_front将单调队列中的3弹出。如下图所示,单调队列的入队规则是如果入队的元素前面有比自己小的数,这些数全部被。你只可以看到在滑动窗口内的。

2024-04-08 18:32:32 652

原创 算法练习第13天|递归实现 144.二叉树的前序遍历(opens new window)145.二叉树的后序遍历(opens new window)94.二叉树的中序遍历

二叉树的存储方式:链式存储和顺序存储。链式存储用指针,顺序存储用数组。其结构如下图所示。

2024-01-23 17:56:29 1945

原创 算法练习第11天| 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

题目描述:给定一个只包括'('')''{''}''['']'的字符串s,判断字符串是否有效。s = "()"truetrues = "(]"false思路分析:使用栈 来实现左右括号的配对,遍历输入字符串:1.若为左括号则入栈2.若为右括号,则先看看栈是否为空,若为空,表明前面没有和该右括号匹配的左括号,return false;若不为空,则拿栈顶元素和该右括号判断是否为一对,若为一对,则出栈,遍历下一个字符。遍历完了之后,看一下栈是否为空。

2024-01-22 21:57:51 999

原创 算法第10天|232.用栈实现队列225. 用队列实现栈

我们用c++容器中的单向queue来作为两个队列的基本实现,如果是双端队列deque没啥意义,因为两端都能出队入队,一端进,另一端出,直接就能当栈使用。queue的常用接口如下:构造函数://queue采用模板类实现,queue对象的默认构造形式//拷贝构造函数赋值操作://重载等号操作符数据存取:push(elem);//往队尾添加元素,入队操作,无返回值。pop();//从队头移除第一个元素,出队操作,无返回值。出队的元素不会被返回back();//返回最后一个元素。

2024-01-22 20:22:15 1776

原创 算法练习第7天|344.反转字符串 541. 反转字符串II 卡码网:54.替换数字 151.翻转字符串里的单词 卡码网:55.右旋转字符串

题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须、使用 O(1) 的额外空间解决这一问题。

2024-01-17 22:24:48 1329

原创 算法练习第6天|454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

题目描述:给你四个整数数组nums1nums2nums3和nums4,数组长度都是n,请你计算有多少个元组。

2024-01-16 20:09:38 1774 1

原创 算法训练第5天|哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

哈希表是根据的值而直接进行访问的数据结构。

2024-01-15 20:21:30 1821 1

原创 算法训练第4天|24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II

【代码】算法训练第4天|24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II。

2024-01-13 18:22:03 1318 1

原创 算法训练第三天|203.移除链表元素 707.设计链表 206.反转链表

链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域,另一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链表的入口节点称为链表的头结点也就是head。

2024-01-12 21:57:23 1987 1

原创 算法训练第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

代码中最小长度的初始值没有采用min_len = INT32_MAX,而是采用了nums.size()+1,因为子数组长度最大也就是nums.size()那么大。对于第二圈,13和14为上面的边,13为左闭,14为右开(不包含),因此14算到(14,15)这一条边的左闭,以此类推。,就很容易出问题,然后开始各种修修补补,最后发现改了这里那里有问题,改了那里这里又跑不起来了。这样在走每一条边的时候,避免一会左开右闭,一会左闭右闭,一会又来左闭右开。所以,为了遍历,在所有遍历的边上采用左开右闭原则,即。

2024-01-11 20:46:42 2923

原创 算法训练第一天|数组理论基础,704. 二分查找,27. 移除元素

数组第 i 个元素与第 j 个元素间的内存地址(假设j > i)相差: (j - i)* 元素数据类型字节数。如int arr[],元素数据类型字节数为4;short arr[],元素数据类型字节数为2,以此类推。二维数组的存储顺序是按行来进行的。

2024-01-10 23:07:54 1951 1

原创 Pytorch数据集加载:官方数据集、自定义数据集、非文件数据集

重点讲解官方数据集的加载,自定义数据集的加载,非文件行数据集的加载。干活满满,带你避坑。

2022-06-16 21:43:41 478 1

原创 数据结构最小堆C++实现

#pragma once# include<iostream>using namespace std;int DefaultSize = 10; //定义最小堆默认存储数据的数目//最小堆的头文件,包括类定义及接口的实现。template <class T>class MinHeap{public: MinHeap(int sz = DefaultSize); //构造函数,建立空堆......

2022-05-18 14:02:41 3373 1

原创 数据结构链式队列C++实现

1.链式队列链式队列是基于单链表的存储表示。所以在实现链式队列时使用了和链表一样的结点struct,结点的具体定义放在"Queue.h"的头文件中。链式队列有两个指针front,rear,front为队头指针,指向单链表的第一个结点,rear为队尾指针,指向单链表的最后一个结点,所以出队是删除第一个节点,入队是将新元素的结点插在单链表最后一个结点的后面。结构图如下:本文链式队列对应的单链表没有设计空的头节点,因为头节点也没太大用处。注意,当队列只有一个元素时,front == rear,因.

2022-04-16 00:12:48 2276

原创 数据结构循环队列C++实现

1.队列的概念队列只允许在表的一端插入,另一端删除。允许插入的一端叫做队尾,允许删除的一端叫做对首。队列的特性叫“先进先出”。和栈一样,队列的存储形式也有两种,基于数组的存储表示和基于链表的存储表示。本文先实现基于数组的存储队列,也叫顺序队列。在顺序队列中设置两个指针,front和rear,front指示队头的位置,rear指示队尾的位置(说是指针,实际仍不是c语言的指针*,而是类似下标或索引的作用)。如下图所示:当队列为空时,front=rear=0; 有新元素入队时,先将新元素添加到rea

2022-04-13 15:47:53 2637

原创 数据结构顺序栈C++实现

栈,先入后出,根据存储方式可以分为顺序栈和链式栈。顺序栈的存储基于数组,链式栈的存储基于链表。顺序栈就是以c语言的数组作为内存空间来构成的栈。栈顶指针top不再是c语言的指针类型,而是元素的下标。本文仍然使用模板的方法来实现,因为模板使用的内置数据类型较多,更全面。1. 首先定义一下栈的通用接口,写在 “stack.h” 头文件中,通用接口为纯虚函数,方便顺序栈来继承和重写,以实现C++的多态。 “stack.h” 头文件代码如下:...

2022-04-07 18:08:14 3159

原创 数据结构链式栈C++实现

链式栈的存储形式是链表,示意图如下:只需要一个top指针,入栈出栈都在top指针处。不同于顺序栈的top,链式栈的top是真真正正的节点类型的指针。下面是链式栈的实现;1. 使用struct的模板来定义节点,包括数据域和指针域,代码如下://用struct定义节点template <class T>struct LinkNode { T data; //数据域 LinkNode<T> * link; //指针域,指向下一个节点 LinkNode() //仅

2022-04-07 18:05:16 2246

原创 数据结构单向链表的C++实现

本文的链表实现使用的是c++的类模板,构造节点类模板Node<T>和链表类模板LinkedList<T>。原因是实用类模板可以适用于各种基本数据类型。以下是类模板及其接口(存放在"LinkedList.h"头文件中):#ifndef LINKEDLIST_H_#define LINKEDLIST_H_#include<iostream>using namespace std;//Node类模板的友元类模板声明template <typename

2022-03-17 14:36:15 1691

原创 动态数组ArrayList的C++实现

#include <iostream>using namespace std;#define CAPACITY 15 //默认链表长度设定为15#define EXP_FACTOR 2 //默认扩容二倍//实现动态数组template <typename T>class ArrayList{ friend int length(const ArrayList<T> &elem) //全局函数做友元类内实现,以便于在类外访问动态数组的si.

2022-03-17 14:27:09 1659

原创 Pytorch深度学习加载数据集的方式

图像分类数据集的加载方式及类别json文件的生成

2022-02-17 09:55:10 2255

原创 深度学习笔记(入门)

深度学习的一些基本概念,在阅读论文的过程中记录下来

2022-01-17 16:23:19 2392

原创 对于YOLOv4的CSPDarknet53的网络结构详细结构图

最近在学习YOLOv4,针对其主干网络CSPDarknet53的结构图,本人在网上查阅资料后发现结构图并不详细。尤其是对于里面的残差块ResBlock和Resblock_body,它们内部的操作是怎样的?他们的关系是什么样的?在查看了YOLOv4的代码后,结合原来的结构图做了详解。需要注意的是:原结构图中共有5个Resblock_body,第一个Resblock_body与后面的4个Resblock_body结构存在差异。具体差异见图所示。YOLOv4主干网络参考可见:CSPDarkNet53学

2021-12-31 16:52:41 9972 2

空空如也

空空如也

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

TA关注的人

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