自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Vergesson

个人学习笔记备份用

  • 博客(88)
  • 收藏
  • 关注

原创 Lua实现面向对象以及类的继承

1、面向对象主要四个特征:封装,继承,多态,抽象2、Lua是种简单精致小巧的语言,其本质是个表(table),变量和方法皆可看作为该表的元素。P.S. 该博客和代码为个人编写习惯以及为后续博客内容拓展服务考虑,若有错误等不周到的地方还请包涵以及指出。

2024-07-26 01:03:45 659

转载 C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结

本文出处:https://www.jb51.net/article/55885.htm这篇文章主要介绍了C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结,需要的朋友可以参考下。前言:C++中的类型转换分为两种:1.隐式类型转换定义:隐式转换是系统跟据程序的需要而自动转换的。2.显式类型转换。定义:显式转换也叫强制转换,是自己主动让这个类型转换成别的类型。对于隐式变换,就是标准的转换,在很多时候,不经意间就发生了,比

2021-07-03 23:34:48 314

原创 【设计模式】工厂模式以及抽象工厂

1

2021-06-29 23:26:03 230 2

原创 设计模式初涉

以下参考:https://blog.csdn.net/guorui_java/article/details/104026988https://blog.csdn.net/A1342772/article/details/91349142一:什么是设计模式设计模式(Design pattern) 是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目的是实现代码的高内聚和低耦合

2021-06-28 00:31:53 208

原创 【编程题】LeetCode.0031 下一个排列

题目描述:实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。(其实就是next_permutation()函数的原理UwU~~)示例:示例 1:输入:nums = [1,2,3]输出:[1,3,2]示例 2:输入:nums = [3,2,1]输出:[1,2,3]示例 3:输入:nums = [1,1,5]输出:[1,5,1]

2021-06-27 23:53:24 160 1

转载 九种常用的UML图总结

.前言准备之后写一些设计模式的笔记,在这里先记录一下前置知识。原文:https://blog.csdn.net/u012500848/article/details/94490361UML(Unified Modeling Language)统一建模语言,又称标准建模语言。是用来对软件密集系统进行可视化建模的一种语言。UML的定义包括UML语义和UML表示法两个元素。UML是在开发阶段,说明、可视化、构建和书写一个面向对象软件密集系统的制品的开放方法。最佳的应用是工程实践,对大规模,复杂系统进行建

2021-06-26 21:16:19 40250 1

原创 C++ 函数中的不定参数

.定义所谓不定参数,指的就是在函数的定义中

2021-06-24 00:31:53 8655 1

原创 【编程题】LeetCode.0030 串联所有单词的子串

vector<int> findSubstring(string s, vector<string>& words) { //当单词长度 int word_size = words[0].size(); vector<int> ans; //总长度不足可返回 if(s.size()<words.size()*word_size) { r

2021-06-22 00:23:04 209 1

原创 【编程题】LeetCode.0029 两数相除

题目描述:给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例:示例 1:输入: dividend = 10, divisor = 3输出: 3解释: 10/3 = truncate(3.33333..) =

2021-06-19 19:25:18 169

原创 关于常见字符串匹配算法——KMP算法的个人理解与解释

本文是对LeetCode上官方对KMP算法的解释的个人理解与消化,对应链接:https://leetcode-cn.com/problems/implement-strstr/.前言我愿称LeetCode.0028为算法题里的扫地憎题目描述:实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。当 needle 是空字符串时,我们应当返回

2021-06-16 20:04:22 261

原创 【编程题】LeetCode.0025 K 个一组翻转链表

题目描述:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:1、你可以设计一个只使用常数额外空间的算法来解决此问题吗?2、你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例:示例1:示例2:示例 1:输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]示例 2:输入:head = [1,2,3,4

2021-06-14 23:46:23 168 3

原创 【编程题】LeetCode.0023 合并K个升序链表

题目描述:给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists = [

2021-06-13 23:30:11 225 1

原创 【编程题】LeetCode.0022 括号生成

题目描述:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例:示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]解析:向下回溯,注意出入栈的顺序。其中,这里用一个数n表示出入栈的状态。由于后括号 ‘)’都在前括号 ‘(’ 之后插入,因此,如果以入栈视为+1,出栈为-1;因此n>=0,一个完整的括号其结果为n==0/

2021-06-11 18:19:48 115

原创 【编程题】LeetCode.0019 删除链表的倒数第 N 个结点

题目描述:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例:示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]解析:这题实际上算比较简单的,主要是思考如何标记倒数第n个节点的前序节点。自然,可以先遍历一次获取总长度然后再靠一轮循环获取,不过这显然不合题目

2021-06-09 23:37:11 153 4

原创 【编程题】LeetCode.0017 电话号码的字母组合

题目描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"]解析:观察规律,前K个字符的排列组

2021-06-08 19:48:33 187

原创 【编程题】LeetCode.0015 三数之和

题目描述:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]解析:之前用hash_map邪道做过一道两数之和,这里也同

2021-06-07 18:55:26 158

原创 【编程题】翻转链表

题目描述:输入一个链表,反转链表后,输出新链表的表头。示例:输入:{1,2,3}返回值:{3,2,1}解析:如果指针操作不熟悉可以键一个栈存储。现在先放下代码:ListNode* ReverseList(ListNode* pHead) { //是否为空指针或长度为1 //若是,直接返回 if(pHead==nullptr||pHead->next==nullptr) return pHead;

2021-06-07 13:23:19 264

原创 【编程题】 LeetCode.0011 盛最多水的容器

题目描述:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。(木桶理论hh)示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例

2021-06-06 15:15:16 144

原创 【编程题】LeetCode.0010 正则表达式匹配

题目描述:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例:示例 1:输入:s = "aa" p = "a"输出:false解释:"a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa" p = "a*"输出:true解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面

2021-06-05 20:34:11 143

原创 【编程题】LeetCode.0007 整数翻转

题目描述:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例:示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0这题很简单,解决方法很多,基本步骤为:1、判断正负;2、翻转整

2021-06-04 12:31:51 119

原创 【编程题】LeetCode.0005 最长回文子串

题目描述:给你一个字符串 s,找到 s 中最长的回文子串。示例:示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”解析:这题从直观观感来看,似乎跟之前一题求区间最大值类似,似乎可以用滑动窗口可解,当然这可行,不过效率不高。分析回文定义,如果一个字符串s[l][r]是回文字符串,则它的子字符串s[

2021-06-01 16:06:51 208

转载 【编程题】LeetCode.0004寻找两个正序数组的中位数

题目描述:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例:示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5示例 3:输入:nums1

2021-06-01 15:13:01 79

原创 【编程题】 推箱子

题目描述:大家一定玩过“推箱子”这个经典的游戏。具体规则就是在一个N*M的地图上,有1个玩家、1个箱子、1个目的地以及若干障碍,其余是空地。玩家可以往上下左右4个方向移动,但是不能移动出地图或者移动到障碍里去。如果往这个方向移动推到了箱子,箱子也会按这个方向移动一格,当然,箱子也不能被推出地图或推到障碍里。当箱子被推到目的地以后,游戏目标达成。现在告诉你游戏开始是初始的地图布局,请你求出玩家最少需要移动多少步才能够将游戏目标达成。输入描述:每个测试输入包含1个测试用例第一行输入两个数字N,M表示地图

2021-05-29 11:38:11 659 1

原创 【编程题】LeetCode.0003 无重复字符的最长子串

题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例:示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke”

2021-05-29 09:33:59 102

原创 【编程题】LeetCode.0002 两数相加

题目描述:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。每个链表中的节点数在范围 [1, 100] 内0 <= Node.val <= 9题目数据保证列表表示的数字不含前导零示例:示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465

2021-05-28 23:22:40 86

原创 c++map与hash_map以及例题

mapmap底层由红黑树实现,不同的操作的时间复杂度为:插入: O(logN)查看:O(logN)删除:O(logN)hash_maphash_map底层由哈希表实现,不同的操作的时间复杂度为:插入:O(1),最坏情况O(N)查看:O(1),最坏情况O(N)删除:O(1),最坏情况O(N)两者的区别可参考:https://blog.csdn.net/weixin_42767099/article/details/82874555例题:LeetCode0001,两数之和题目描述:给定

2021-05-26 20:36:51 261

原创 【算法】分治算法及部分习题

分治策略(Divide and Conquer)一、基本思想1、将原始问题划分或者归结为规模较小的子问题。2、递归或迭代求解每个子问题。3、将子问题的解综合得到原问题的解注意:1、子问题与原始问题性质完全一样2、子问题之间可以彼此独立求解3、递归停止时子问题可以直接求解二、例题幂乘算法:题目说明:计算正整数a的n次幂解析:如果顺序相乘,则需要n次操作,复杂度为n;实际上,观察幂乘规则有:1)当n为偶数时:an=an/2*an/22)当n为偶数时:an=an/2*an/2

2021-05-17 03:55:11 419

原创 【编程题】重新分配

题目描述:有n个房间,现在i号房间里的人需要被重新分配,分配的规则是这样的:先让i号房间里的人全都出来,接下来按照 i+1, i+2, i+3, … 的顺序依此往这些房间里放一个人,n号房间的的下一个房间是1号房间,直到所有的人都被重新分配。现在告诉你分配完后每个房间的人数以及最后一个人被分配的房间号x,你需要求出分配前每个房间的人数。数据保证一定有解,若有多解输出任意一个解。输入描述:第一行两个整数n, x (2<=n<=10^5, 1<=x<=n),代表房间房间数量以及最

2021-05-15 01:18:42 631

原创 c++ 启动外部可执行文件

本文参考:https://blog.csdn.net/Nancy_m/article/details/8643987.前言C库中函数int system(const char* command)用于执行外部可执行文件,其功能是调用DOS命令,因此需用到cmd命令。其特点为:1、他不会立即返回,直到你启动的程序执行完成。2、如果你启动是windows程序,它仍然会启动一个控制台,这就给人感觉太差劲了,但如果本身是控制台的,而且又需要等待它的完成,那这将是比较好的选择。3、它的返回值代表是否执行成功以

2021-05-12 02:47:02 1221 3

原创 C++中的IO流操作

.IO流的概念及流类库结构1、前言当程序与外界环境进行信息交换时,存在两个对象:一个是程序中的对象,另一个是文件对象。其中文件对象可以是磁盘设备,也可以是外部设备,C++将输入输出设备当做文件处理。流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。2、流对象与文件操作程序建立一个流对象;指定这个流对象与某个文件对象建立连接程序操作流对象流对象通过文件系统对所连接的文件对象产生作用3、c++中的流对象.输出流1、预先定义的输出流对象cout 标准

2021-05-04 23:49:41 333

原创 【编程题】求数组中的所有子集

题目叙述:给出一个含有不重复元素的数组,列出它的所有子集。输入描述:共两行输入:第一行一个整数n,示意数组的元素个数。第二行,数组的各元素。输出描述:按集合的形式,每行输出其中一个子集,不要求顺序。示例:输入:31 2 3输出:[3][1][2][1,2,3][1,3][2,3][1,2][]本题目参考:https://blog.csdn.net/u012118523/article/details/24884803方法一:通过二叉树向下回溯原数组中的每

2021-05-02 16:16:25 1194

原创 随机数

方法一:rand()给srand()提供一个种子,它是一个unsigned int类型;调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到RAND_MAX之间);根据需要多次调用rand(),从而不间断地得到新的随机数;无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。#include <iostream>#include <algorithm>#include <time.h>

2021-04-30 04:37:37 70

原创 [编程题]字母交换

题目描述:字符串S由小写字母构成,长度为n。定义一种操作,每次都可以挑选字符串中任意的两个相邻字母进行交换。询问在至多交换m次之后,字符串中最多有多少个连续的位置上的字母相同?输入描述:第一行为一个字符串S与一个非负整数m。(1 <= |S| <= 1000, 1 <= m <= 1000000)输出描述:一个非负整数,表示操作之后,连续最长的相同字母数量。示例:输入abcbaa 2输出2说明使2个字母a连续出现,至少需要3次操作。即把第1个位置上的a移动

2021-04-27 23:18:29 1328 1

原创 【编程题】判断一个多边形是否为凸多边形

题目:顺序输入点的坐标,判断按这些点顺序连接起来的多边形是否为凸多边形还是凹多边形输入描述:输入包括两行;第一行是一个整数n,n>=3,作为提示输入的顶点数量第二行为2*n个整数,为各点的(x,y)输出描述:若为凸多边形,则输出为“这是凸多边形”若不是凸多边形,则输出为“这不是凸多边形”解析:对于凸多边形有:每个内角都为小于180度的角,没有大于180度的角。解法1:对于一个凸多边形,其每个顶点较小的角的和必为其边长减2再乘以180度:(n-2)*180对于一个凸多边形

2021-04-22 15:49:32 4591 1

原创 [编程题]手串

题目描述:作为一个手串艺人,有金主向你订购了一条包含n个杂色串珠的手串——每个串珠要么无色,要么涂了若干种颜色。为了使手串的色彩看起来不那么单调,金主要求,手串上的任意一种颜色(不包含无色),在任意连续的m个串珠里至多出现一次(注意这里手串是一个环形)。手串上的颜色一共有c种。现在按顺时针序告诉你n个串珠的手串上,每个串珠用所包含的颜色分别有哪些。请你判断该手串上有多少种颜色不符合要求。即询问有多少种颜色在任意连续m个串珠中出现了至少两次。输入描述:第一行输入n,m,c三个数,用空格隔开。(1 &lt

2021-04-17 23:03:54 194

原创 [编程题]用户喜好

题目:为了不断优化推荐效果,今日头条每天要存储和处理海量数据。假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用户(标号相连的一批用户)中,有多少用户对这类文章喜好值为k。因为一些特殊的原因,不会出现一个查询的用户区间完全覆盖另一个查询的用户区间(不存在L1<=L2<=R2<=R1)。输入描述:输入:第1行为n代表用户的个数 第2行为n个整数,第i个代表用户标号为i的用户对某类文章的喜好度第3行为一

2021-04-17 21:55:09 256

原创 【编程题】产品经理

产品经理(PM)有很多好的idea,而这些idea需要程序员实现。现在有N个PM,在某个时间会想出一个 idea,每个 idea 有提出时间、所需时间和优先等级。对于一个PM来说,最想实现的idea首先考虑优先等级高的,相同的情况下优先所需时间最小的,还相同的情况下选择最早想出的,没有 PM 会在同一时刻提出两个 idea。同时有M个程序员,每个程序员空闲的时候就会查看每个PM尚未执行并且最想完成的一个idea,然后从中挑选出所需时间最小的一个idea独立实现,如果所需时间相同则选择PM序号最小的。直到完

2021-04-15 10:30:55 390 1

转载 (转载)c++优先队列(priority_queue)用法详解

既然是队列那么先要包含头文件#include <queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的和队列基本操作相同:top 访问队头元素empty 队列是否为空size 返回队列内元素个数push 插入元素到队尾 (并排序)emplace 原地构造一个元素并插入队列pop 弹出队头元素swap 交换内容定义:pri

2021-04-13 19:38:17 112

原创 通过移位操作及逻辑运算实现加减乘除

1、预备知识移位:c++中对十进制的数的存储在内存上以二进制的方式存储。移位操作包括无符号的逻辑左移与逻辑右移,以及带符号的算术移位。逻辑左移:二进制数m整体向左边移动n位,多余的位数会丢掉,空缺的数将由0补上。格式:m<<nunsigned int m = 5;//二进制化为101unsigned int x=m << 3;//向左移动3位,即101000,转为10进制应为40cout << x;逻辑右移:二进制数m整体向右边移动n位,多余的位数

2021-04-06 23:43:33 1343

原创 关于深度优先遍历二叉树以及广度优先遍历二叉树

.前言1、深度优先遍历(DFS)依靠栈实现,以先序为例,操作顺序是出栈,读取父节点->将右子节点压入栈->将左子节点压入栈;2、广度优先遍历(BFS)依靠队列,操作顺序是读取头节点->将左子节点压入队列->将右子节点压入队列。这个知识点其实没什么能推导的,因此我觉得直接解释操作会对知识点的解释会有个好的先导印象。.说明一颗二叉树,若是想遍历所有节点,其形式有两种,一种是在读取一个节点后,读取它的子节点,将这颗子树读完再读取另一颗子树(深度优先遍历);另一种则是按照节点的

2021-03-27 09:36:04 217

空空如也

空空如也

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

TA关注的人

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