- 博客(78)
- 收藏
- 关注
原创 整数转罗马数字
整数转罗马数字题目描述:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX
2022-05-16 18:01:42
282
原创 盛最多水的容器
盛最多水的容器题目描述:给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2:输
2022-05-16 17:18:55
138
原创 正则表达式匹配
正则表达式匹配题目描述:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = “aa”, p = “a”输出:false解释:“a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa”, p = “a*”输出:true解释:因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素, 在这
2022-05-13 18:12:59
424
原创 罗马数字转整数
罗马数字转整数题目描述:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX
2022-05-11 20:29:37
93
原创 字符串转换整数(atoi)
字符串转换整数(atoi)题目描述:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入
2022-05-10 18:54:36
185
原创 整数反转1
整数反转题目描述:给你一个 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提示:-231 <= x <= 231 - 1思路分析:
2022-05-09 18:38:48
117
原创 Z 字形变换
Z 字形变换题目描述:将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例
2022-05-08 16:49:41
73
原创 最长回文子串
最长回文子串题目描述给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”提示:1 <= s.length <= 1000s 仅由数字和英文字母组成思路分析:解法有很多, 本文用的动态规划.动态规划就是将一个大问题分解成多个有关联的小问题, 从而得出大问题的答案.比如 我们要知道 s[i], 到 s[j] 是不是一个回文串, 就
2022-05-08 16:08:46
308
原创 寻找两个正序数组的中位数
寻找两个正序数组的中位数题目描述给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。示例 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] ,中位数 (
2022-05-07 19:02:33
94
原创 滑动窗口最大值
滑动窗口最大值题目描述:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6
2022-05-06 18:25:00
59
原创 无重复字符的最长子串
无重复字符的最长子串题目描述:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串
2022-05-05 18:34:14
93
原创 Linux 多线程
线程什么是线程?在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流线程的优点:创建一个新线程的代价要比创建一个新进程小得多与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多线程
2020-08-19 17:37:12
93
原创 进程间通信
进程间通信是什么?每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。进程间通信的目的是什么?数据传输: 一个进程需要将它的数据发送给另一个进程资源共享: 多个进程之间共享同 样的资源。通知事件: 一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:
2020-08-19 16:49:02
146
原创 进程概念
冯诺依曼体系结构: 输入设备,输出设备,运算器,控制器,存储器操作系统: 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。进程课本概念:程序的一个执行实例,正在执行的程序等内核观点:担当分配系统资源(CPU时间,内存)的实体。描述进程 - PCB: 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合进程创建:pid_t ret = fork();if(ret < 0){ perror("fork");}else if (ret == 0){ pr
2020-08-18 19:52:20
112
原创 STL容器
vectorvector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,ve
2020-08-17 16:46:29
71
原创 封装,继承,多态
1. 类与对象类的初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。类的定义class className{ // 类体:由成员函数和成员变量组成 }; // 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类
2020-08-15 18:47:25
143
原创 八大排序的基本实现
排序排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。常见的排序算法
2020-08-13 20:20:58
279
原创 二叉树的前序遍历,中序遍历,后序遍历以及层序遍历
二叉树的前序遍历前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。oj链接: https://leetcode-cn.com/problems/binary-tree-preorder-traversal/submissions/递归实现:class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<in
2020-08-12 21:58:35
219
原创 数据结构之二叉树和堆
树树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树节点的度:一个节点含有的子树的个数称为该节点的度;叶节点或终端节点:度为0的节点称为叶节点;非终端节点或分支节点:度不为0的节点;双亲节点或父节点:若一个节点含有子节点,则这个节
2020-08-12 19:40:00
248
原创 数据结构之栈和队列和相关笔试题
栈一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。特点: 先入后出栈的实现: 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。队列只允许在一端进行插入数据操作,在另一端进行删除数据操作的特
2020-08-12 17:16:36
177
原创 数据结构之顺序表和链表
1.线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物 理上存储时,通常以数组和链式结构的形式存储。2. 顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 顺序表一般可以分为:静态顺序表:使用定长数组存储。动
2020-08-11 20:18:07
334
原创 深度优先算法和广度优先算法
1、深度优先算法遍历规则:不断地沿着顶点的深度方向遍历。顶点的深度方向是指它的邻接点方向。最后得出的结果为:ABDECFHG。类似于二叉树的前序遍历2、广度优先算法:遍历规则:先访问完当前顶点的所有邻接点。(应该看得出广度的意思)先访问顶点的邻接点先于后访问顶点的邻接点被访问。最后得出的结果为:ABCDEFGH。类似于二叉树的层序遍历...
2020-08-11 19:44:38
2639
原创 时间复杂度和空间复杂度
1. 什么是算法?算法就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算过程,用来将输入数据转化为输出结果。2. 算法的效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已
2020-08-11 19:35:14
73
原创 动态内存管理以及malloc,free和new,delete的区别
为什么存在动态内存分配?开辟空间的方式有两个特点:空间开辟大小是固定的。数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。 这时候就只能试试动态存开辟了。C/C++中的内存分布栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共.
2020-08-11 19:08:06
137
原创 字符函数与字符串函数的介绍
C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数函数介绍strlen函数功能: 计算字符串的长度size_t strlen ( const char * str );字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。参数指向的字符串必须要以 ‘\0’ 结束。函数的返回值为size_t,是无符号的.
2020-08-11 18:39:05
139
原创 数据在内存中的存储以及大端模式和小端模式的介绍和区分代码
数据类型的介绍c语言中的数据类型char //字符数据类型 1个字节short //短整型 2个字节int //整形 4个字节long //长整型 32位机4个字节 64位机8个字节long long //更长的整形 8个字节float //单精度浮点数 4个字节double //双精度浮点数 8个字节类型的意义:1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。2. 如何看
2020-08-11 18:07:08
348
原创 指针与引用
1. 什么是指针?在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。总结:所以指针是一个变量,用来保存内存地址的变量。指针是用来存放地址的,地址是唯一标示一块地址空间的。指针的大小在32位平台是4个字节,在64位平台是8个字节。2. 指针类型和解引用指针的定义方式是: t
2020-08-11 17:44:16
136
原创 mp3的光标位置
#include <iostream>#include <vector>#include <string>using namespace std;/*思路: 将显示的4个歌放到一个数组(show)中;起始时,show中显示前四首歌(1,2,3,4); 先判断需不需要翻页, 翻页情况1: 从第一个翻到最后一个,光标指向最后一个 显示的...
2019-11-30 00:32:45
124
原创 参数解析
在命令行输入如下命令:xcopy /s c:\ d:\,各个参数如下:参数1:命令字xcopy参数2:字符串/s参数3:字符串c:\参数4: 字符串d:\请编写一个参数解析程序,实现将命令行各个参数解析出来。解析规则:1.参数分隔符为空格2.对于用“”包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” “d...
2019-11-21 00:58:31
382
原创 查找组成一个偶数最接近的两个素数
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对#include <iostream>using namespace std;/*思路: 先写一个判断素数的函数,然后输入的值除2,如果得到的值(half)是一个素数,直接输出两此这个值就可以 如果不是一个素数,让两个数都等于这个数(half);...
2019-11-19 16:59:34
160
原创 最近公共祖先
有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b。请设计一个算法,求出a和b点的最近公共祖先的编号。给定两个int a,b。为给定结点的编号。请返回a和b的最近公共祖先的编号。注意这里结点本身也可认为是其祖先。#include <iostream>using namespace std;/*思路: 由题意可知, 子节点/2...
2019-11-18 01:09:19
102
原创 判断最大连续数
功能: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1输入: 一个byte型的数字输出: 无返回: 对应的二进制数字中1的最大连续数#include <iostream>using namespace std;/*思路: 要判断一个数的对应二进制数字中1的连续个数,我们可以把这个数的二进制数看成一个数组 通过 x...
2019-11-18 01:04:23
255
原创 C++中拷贝构造函数的深拷贝和浅拷贝
什么是拷贝构造函数及拷贝构造函数的应用?什么是拷贝构造函数每个类都有6个默认成员函数(构造函数,析构函数,拷贝构造函数,赋值重载函数,取地址运算符重载函数,const修饰的取地址运算符重载函数)也就是说即使你创建一个空类,也会存在这6个函数其中构造函数只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰)在用已存在的类类型对象创建新对象时由编译器自动调用class sol...
2019-11-17 19:08:25
389
原创 C/C++中的const修饰符用法总结
const的基本含义在 C/C++ 语言中,const关键字是一种修饰符。所谓“修饰符”,就是在编译器进行编译的过程中,给编译器一些“要求”或“提示”,但修饰符本身,并不产生任何实际代码。就 const 修饰符而言,它用来告诉编译器,被修饰的这些东西,具有 “只读” 的特点。 在编译的过程中,一旦我们的代码试图去改变这些东西,编译器就应该给出错误提示。所以,const修饰符的作用主要是利用...
2019-11-17 17:45:42
229
原创 C/C++中内存区域的划分与内存管理
C/C++中内存区域的划分一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(stack) 由编译器自动分配释放存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。当栈区需要扩容的时候向低地址扩容,其操作方式类似于数据结构中的栈。(内存分配时,与堆相向而生,因此申请内存是有限的,运用不当,会出现栈溢出)2、堆区(heap) 一般由程序员分配释放, 若程序员不...
2019-11-17 16:03:56
244
原创 进程调度算法
什么是调度算法在 操作系统中调度是指一种资源分配,因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法。对于不同的的系统和系统目标,通常采用不同的调度算法,例如,在 批处理系统中,为了照顾为数众多的段作业,应采用短作业优先的调度算法;又如在 分时系统中,为了保证系统具有合理的响应时间,应当采用轮转法进行调度。目前存在的多种调度算法中,有的算法适用于 作业调度,有的算法适用于 进程调度;但...
2019-11-15 22:38:45
396
原创 不要算术运算符的加法
#include <iostream>using namespace std;/*思路: 二进制加法。发现一个特点。 位的异或运算跟求'和'的结果一致: 异或 1^1=0 1^0=1 0^0=0 位的与运算跟求'进位‘的结果一致: 位与 1&1=1 1&0=0 0&0=0 异或将需要进位的位置 变成0;不需要进位的位置不变 位于将需要进位的...
2019-11-15 01:13:16
81
原创 两种排序方式
考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法: 1.根据字符串的字典序排序。例如:“car” < “carriage” < “cats” < “doggies < “koala”2.根据字符串的长度排序。例如:“car” < “cats” < “koala” < “doggies” < “carri...
2019-11-14 00:51:44
345
原创 判断一个数最少需要多少此++或者--能够成为Fibonacci数
Fibonacci数列是这样定义的:F[0] = 0F[1] = 1for each i ≥ 2: F[i] = F[i-1] + F[i-2]因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现...
2019-11-13 01:06:22
154
原创 合法括号串的判断
对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。合法括号串表示字符串中全是括号,并且左右括号数量相等#include <iostream>#include <string>#include <stack>using namespace std;/*思路:...
2019-11-13 01:00:11
770
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人