自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (3)
  • 收藏
  • 关注

原创 C++实现阻塞式的循环队列

/*题目实现一个阻塞式的循环队列要求:- 多线程安全- 队列满时调用写接口阻塞- 队列空时调用读接口阻塞*/template <typename T>class BlockingCircularBuffer { public: int mCap; vector<T> mVec; int mRead; int mWrite; mutex mL; condition mCon; explicit BlockingCircularBuff.

2022-04-13 20:42:02 967

原创 求两个矩阵相交部分面积

给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。每个矩形由其 左下 顶点和 右上 顶点坐标表示:第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。第二个矩形由其左下顶点 (bx1, by1) 和右上顶点 (bx2, by2) 定义。class Solution {public: int computeArea(int ax1, int ay1, int ax2, int ay2, int bx

2022-04-12 10:15:35 969

原创 C++实现单例模式

单例模式分为饿汉模式与懒汉模式,下面分别对其进行实现:#include <iostream>#include <vector>#include <string>#include <mutex>#include <pthread.h>using namespace std;// 单例饿汉模式class Singleton {private: Singleton() {} static Singleton* in

2022-03-29 22:30:00 1028

原创 LC合并两个非递减数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。关键点:nums1要从后往前填,要注意防范数组

2022-03-24 21:25:18 561

原创 LC搜索二维矩阵 II

设计一个算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。关键点:从矩阵左下角开始查找。注意:小心数组越界。class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { if (matrix.empty()) return

2022-03-24 16:17:57 441

原创 实现二叉树先序,中序和后序遍历

C++实现二叉树三种遍历方式,非递归。/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /** * * @param root TreeNode类 the root of binary tree * @return int整型vector<vector&lt

2022-03-20 18:47:13 1108

原创 LRU算法及其实现

数据结构:双向链表list:保存key和value哈希表unordered_map:用于快速找到key对应节点位置整行:记录容器大小,容器满时淘汰数据接口用法:list:begin()取链表第一个元素;back()取链表最后一个元素;size()计算链表一共多少元素;erase(iterator)删除链表中某个元素;push_front(pair<>)将某个元素放到链表头部;pop_back()删除链表最后一个元素。unordered_map:

2022-03-18 22:02:47 583

原创 leetcode重排链表

题目描述:给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为:L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。例子1:输入:head = [1,2,3,4]输出:[1,4,2,3]例子2:输入:head = [1,2,3,4,5]输出:[1,5,2,4,3]代码实现:/** * Defi

2022-03-18 17:02:23 484

原创 最长上升子序列(一)

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7,7,7,

2022-03-10 16:15:37 137

原创 反转链表实现

力扣206题:反转链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(

2022-03-09 12:40:46 822

原创 C++ sharedPtr实现

#include <iostream>using namespace std;template <typename T>class shared_ptr {private: // 引用计数指针与模板指针 int* count; T* ptr;public: // 构造函数,初始化引用计算与模板指针 shared_ptr(T* p) : count(new int(1)), ptr(p) { cout << "调用构造函数" <.

2022-03-06 23:37:44 826

原创 快速排序C++实现

#include <iostream>using namespace std;void quickSort(int *arr, int left, int right);int portSort1(int *arr, int left, int right);int portSort2(int *arr, int left, int right);int main(){ int array[] = {4,1,7,6,9,2,8,0,3,5}; int len = ...

2022-02-21 00:06:13 699

原创 git操作指令

1.git操作示意图Workspace:工作区Index/Stage:暂存区(索引)Repository:仓库区(本地仓库)Remote:远程仓库2.常用指令2.1 仓库与配置 git init:新建仓库 git clone:克隆所有代码 git config:配置git 2.2 文件与代码 git add:将修改的文件添加到暂存区 git rm:删除工作区文件,并将这次删除操作放入暂存区 git mv:改名文件,.

2021-10-27 15:07:02 123

原创 STL中的容器和算法简述

STL的特点:数据结构与算法分离,使其变得非常通用。顺序容器:vector(向量)、list(双向链表)、deque(双端队列)。关联容器:set(集合)、multiset(多重集合)、map(映射)、multimap(多重映射)。容器适配器:stack(栈)、queue(队列)、qriority_queue(带权队列)。算法头文件:<algorithm>,<nu...

2020-03-09 20:00:15 554

原创 常见的C++关键字简介

asm 用于在C++源码中内嵌汇编语言。alignas(C++11起) 用来设置内存中的对齐方式,最小是8字节对齐,也可以是16,32,64,128等。alignof(C++11起) 用于返回指定类型的对齐方式。and_eq 表示相与并赋值,等价于&=操作符。not _eq 表示取非并赋值,等价于!=。or_eq 表示相或并赋值,等...

2020-03-09 10:41:47 827

原创 char 型字符串更加安全的拷贝函数 strlcpy 实现方式

strlcpy是一个类似strcpy的字符串拷贝函数,它的目的是保证拷贝过程中缓冲区不会溢出,并且最后缓冲区内是一个有效的C字符串。它的定义如下:size_t strlcpy(char * dest, const char * src, size_t size);参数:char * dest目标缓冲区const char * src原始字符串size_t size目标缓冲区长...

2019-10-01 14:24:41 815

原创 面试题——全排列问题

问题描述:输入一个整型数字N,求1~n组成数组的全排列输入用例:3输出用例:1 2 31 2 32 1 32 3 13 1 23 2 1解题思想:将当前元素与后面元素交换,交换过程中并进行递归,以下为实现代码:#include<iostream>#include<vector>using namespace std;void ...

2019-09-23 11:00:18 305

原创 面试题:寻找峰值

题目描述:峰值元素是指其值大于左右相邻值的元素。给定一个输入数组nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设nums[-1] = nums[n] = -∞。示例 1:输入: nums = [1,2,3,1]输出: 2解释: 3 是峰值元素,你的函数应该返回其...

2019-09-22 10:24:07 380

原创 寻找字符串的最长回文子串

题目描述:给定一个字符串 s,找到 s 中最长的回文子串。示例 :输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。解题思路:利用中心扩展算法,一个子串一共(2n-1)个中心,因为两个相邻字母之间还有一个中心。时间复杂度为O(n2)。class Solution {public: string longestPalindrome(string ...

2019-09-21 23:52:46 301

原创 查找一个字符串中另一个字符串的个数(动态规划)

输入一个较长的字符串S和一个较短的字符串T,计算在S每个字符之前(包括当前字符)T出现的次数,并将其输出。输入用例:ababac输出用例:011222解题思想:动态规划#include<iostream>#include<vector>#include<string>using namespace std;int main(){ s...

2019-09-18 22:59:12 616

原创 字符串中单词翻转并大小写转换

输入一行字符串,包括大小写英文字母、空格、点,对每个word进行翻转,并且将大写字母转化为小写字母,小写字母转化为大写字母。输入用例:I am a GOOD student.输出用例:i MAA doogTNEDUTS.#include<iostream>#include<string>#include <stack>using name...

2019-09-18 22:32:57 1116

原创 实现一种数据结构,支持 push(),pop(),findMin() 三种操作

一道经典的面试题,让实现一种数据结构,支持push(),pop(),findMin() 三种操作,并且时间复杂度不能超过O(logN)class MyStack {public: //通过构造函数进行初始化 MyStack(int length) { data = new int[length]; minData = new int[length]; dataIndex...

2019-09-14 10:19:08 877 1

原创 寻找1~n之间的质数

寻找1~n之间的质数#include<iostream>#include<vector>using namespace std;int main(){ int n; cin >> n; vector<int> vec{2}; for(int i = 3; i <= n; i++){ ...

2019-09-02 23:51:34 494

原创 SQL优化有哪些方法?

1、在表中建立索引,优先考虑where、group by使用到的字段(较频繁地作为查询条件且唯一性不太差),不会再where中用到的字段不建立索引,因为建立索引也需要系统的开销。2、减少使用 * ,用列名代替select * from user;要写成 select userID, userName, userSalary from user;因为在使用 * 的时候,数据库还得查询...

2019-08-28 11:26:40 2235

原创 什么是Redis?为什么要用redis?redis的应用场景有哪些?redis的数据类型有哪些?

1、什么是Redis?Redis是一款内存高速缓存数据库,一种支持Key-Value的存储系统。2、为什么要用redis?redis以内存作为数据存储介质,读取数据的效率极高,远远超过一般数据库。redis与memcache不同点是,存储在redis的数据是持久化的,断电或重启数据也不会丢失。因为redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,redis可以重新将...

2019-08-28 11:25:47 895

原创 推到吧骨牌,编程题

题目描述输入描述:输入为一个长度不超过1000的,仅包含‘L’,‘R’,‘.’的字符串输出描述:根据输入,输出一个仅由‘L’,‘R’,‘.’组成的结果字符串示例1输入.L.R...LR....L.输出LL.RR.LLRRRLLL.#include<iostream>#include<string>using name...

2019-08-27 16:10:09 414

原创 为什么要三次握手?为什么要四次挥手?为什么有TIME_WAIT?

为什么要三次握手?如果是两次握手就会出现服务器处于连接状态,而客户端并没有与其建立连接。假设是两次握手,当Client需要建立连接,向Server1发送SYN请求后,但是迟迟得不到回应,这时Client就可能去和其他Server2建立连接,而过了一段时间Server1收到了SYN请求,Server1变为连接状态,但是Client并没有与其建立连接。为什么是四次挥手?1、因为Serv...

2019-08-24 11:13:05 1731

原创 牛牛找工作(贪心算法),帮小伙伴选工作

题目描述为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。输入描述:每个输入包含一个测试用例。每个测试用例的第一行包含两个正整数,分别表示工作的数量N(N&...

2019-08-13 09:23:23 701

原创 计算二叉树的深度

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。如果只有一个结点,则树的深度为1。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...

2019-08-06 08:42:00 6544

原创 用两个栈实现队列

用两个栈来实现一个队列,完成队列的Push和Pop操作。栈的特点:先进后出,后进先出;队列的特点:先进先出,后进后出。基本思想:push的时候直接push到stack1;pop的时候将stack1中的元素转移到stack2中,但是注意要剩下最后一个元素(这里是关键),这个元素就是要pop的元素,待pop完成后再将stack2中的元素还给stack1。class Solution...

2019-08-05 21:08:30 127

原创 使用迭代方法实现二叉树的层次遍历(非递归)

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]这里使用一个队列存储节点,因为队列的特点是先进先出,利用一个参数判断当前层是...

2019-08-02 18:48:14 207

原创 验证一颗二叉搜索树

题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。这里有一种错误的思路:判断当前节点大于左节点,小于右节点,以此递归下去,当不满足上面条件就返回false。其实这里存在一个小bug,当二叉树满足以上条件可能也不是二叉搜索树...

2019-08-01 15:39:44 174

原创 智能指针与动态内存

智能指针个人理解,智能指针是用来管理动态内存的,动态内存也就是堆内存,程序用它来存储动态分配的对象,即程序在运行的时候分配的对象。除了动态内存,还有静态内存和栈内存,静态内存用来保存局部 static 对象,类 static 数据成员和定义在函数之外的变量;栈内存用来保存定义在函数内的非 static 对象。静态内存和栈内存由编译器自动分配和释放,而动态内存由程序员手动分配和释放。例如...

2019-07-28 10:39:03 175

原创 编译错误与运行错误的区别

编译错误一般是因为语法上有问题,程序在编译的时候就产生报错,不能生成 .class 文件,例如未定义变量、没有包含头文件等。此时的文件是放在磁盘上的。运行错误一般是因为逻辑上有问题,程序可以通过编译,也就是可以生成 .class 文件,但是在运行的时候发生报错或不能得到预期的结果,例如数组越界、空指针等。这时的程序被加载到内存中。编译阶段不给程序分配内存,只是生成可执行文件,运行阶段开始给...

2019-07-19 10:44:44 3433

原创 复杂链表的复制(不同于剑指offer方法)

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)剑指offer上面给的方法有点出乎意料,一般情况下想不到,这里给出正常思路的方法。基本思想:先不考虑特殊指针,对链表进行复制,等链表复制成功后再确定每个节点特殊指针的...

2019-07-16 09:44:46 132

原创 归并排序(MERGE-SORT)实现

归并排序(MERGE-SORT): 利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案“修补”在一起,即分而治之)。 归并排序是稳定排序算法。平均时间复杂度为O(nlogn),因为每次合并的平均时间复杂度为O(n),总的深度...

2019-07-14 17:26:33 403

原创 快速理解(C/C++)指针的概念

通过以下代码快速理解指针:#include <iostream>using namespace std;int main(){ int a = 9, b = 29; int *p_one; p_one = &a; int *p_tow = &b; cout << "a的值: " << a << endl; ...

2019-07-13 21:34:45 363

原创 牛客剑指offer——机器人的运动范围(C++)

题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?class Solution {pu...

2019-07-13 11:13:04 254

原创 剑指offer——和为S的连续正数序列

这是一道来自牛客上剑指offer的题题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!...

2019-06-29 11:02:11 152

原创 判断一个数是不是“Glodon Number”

编写一个算法来判断一个数是不是“Glodon number”。一个“Glodon number”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,也可能是无限循环但始终变不到1,如果可以变成1,那么这个数就是Glodon Number。示例:输入:32输出:true解释:3^2+2^2 = 131^2+3^2 = 1...

2019-05-27 22:12:23 1157

统计0~n之间某个数字出现个数

该C++程序通过循环的方式,实现了统计从0~9、0~99、0~999、0~9999、0~99999 ······ 中数字8出现的次数。

2019-08-02

用C++实现万年历

输入要查看的年份(要求为公元元年以后),就可以输出这一年每个月份的天数,以及每天所对应周几。

2019-04-22

统计数字出现个数C++程序

该C++程序通过循环的方式,实现了统计从0~9、0~99、0~999、0~9999、0~99999 ······ 中数字8出现的次数。

2018-09-13

空空如也

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

TA关注的人

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