自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据加解密系统(ubuntu平台)

2021年01月15日 周五 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】最近这两天不知道怎么了,虚拟机一直崩溃,重装了好几次了都。所以还是记录一下项目部署的过程,再重装的时候就能快速恢复到原来的环境了。安装 ubuntu14.04 或 16.04 虚拟机禁止自动更新,更换下载源为阿里源安装 vim 并配置安装 openssl 服务端(为了让 windows 的 vs 可以远程连接 ubuntu 虚拟机) sudo apt install openssh-server安装 openssl

2021-01-15 12:07:05 352 2

原创 C++实现字符串mystring类的封装(难点:赋值运算符函数)

2020年11月10日 周二 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 引言2. 主文件——main.cpp3. mystring.h4. mystring.cpp参考文献1. 引言用C++实现了简单的字符串类封装,实现了字符串赋值、相加、修改、比较等功能。完整工程放在了我的github上,有需要的也可以自取。github地址:https://github.com/March225/High-frequency-algorithm2. 主文件——main.cpp/** *

2020-11-10 12:21:57 917

原创 常见的十种内部排序算法(C++实现)

2020年8月29日 周六 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 引言1.1 内部排序算法分类1.2 内部排序算法复杂度2. 内部排序算法2.1 交换排序2.1.1 冒泡排序优缺点算法优化2.1.2 快速排序优缺点算法优化2.2 插入排序2.2.1 简单插入排序优缺点算法优化2.2.2 希尔排序优缺点算法优化2.3 选择排序2.3.1 简单选择排序优缺点算法优化2.3.2 堆排序优缺点算法优化2.4 归并排序优缺点算法优化2.5 计数排序2.6 基数排序2.7 桶排序参考文献1

2020-08-29 22:35:24 515

原创 C++中输入方式总结:cin>>、cin.get()、cin.getline()、getline()、gets()和getchar()(附split的实现)

2020年7月27日 周一 天气阵雨 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 简单介绍输入缓冲区2. cin>>3. cin.get()用法1: a = cin.get()或cin.get(a)用法2:cin.get(arrayname,size)用法3:cin.get(arrayname,size,s)本文转载自 https://blog.csdn.net/livecoldsun/article/details/254894291. 简单介绍输入缓冲区程序的输入都建有一

2020-07-28 11:56:00 597

原创 航海探险(BFS+优先队列,并输出路径)

2021年08月22日 周日 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目描述2. DFS 或 BFS2.1 DFS2.2 BFS + 优先队列3. 总结DFS和BFS的区别1. 题目描述给你一个由"0"(水)、“1”(陆地)和2"(障碍物)组成的的一维网格,再给你一个两栖交通工具,走陆地费用为1,走水路费用为2,障碍物无法通行,请你计算从网格的起始位置行驶到最终位置的最小费用。注意:仅可以水平方向和竖直方向行驶。如果无法到达目的地,则返回-1。另外,起始第1个位置不算,根据

2021-08-22 11:48:03 815 2

原创 马走棋盘算法

2021年08月16日 周一 天气雨 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. DFS参考文献1. 题目简介原题链接:http://noi.openjudge.cn/ch0205/8465/2. DFS思路比较清晰,直接用dfs在8个方向上进行搜索即可。#include <iostream>#include <vector>using namespace std;int t, m, n, x, y, mn, ans;vector&lt

2021-08-16 20:52:15 350

原创 LeetCode 120. 三角形最小路径和(要求输出具体路径)

2021年07月15日 周四 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 动态规划2. 拓展:输出具体路径3. 空间优化4. 总结与反思https://leetcode-cn.com/problems/triangle/1. 动态规划题目本身不难,自底向上计算最简单。class Solution {public: int minimumTotal(vector<vector<int>>& triangle) { int

2021-07-15 12:02:02 400

原创 关于ASN.1的一些个人理解

2021年06月15日 周二 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. ASN.1简介2. BER编码规则3. ASN.1和JSON的区别参考文献1. ASN.1简介ASN.1本身只定义了表示信息的抽象语法,但是没有限定其编码的方法(可以理解为定义了标准,但是具体如何实现由编码规则决定)。标准的ASN.1编码规则有基本编码规则(BER,Basic Encoding Rules)、规范编码规则(CER,Canonical Encoding Rules)、唯一编码规则(DER,Dis

2021-06-15 20:14:49 1680 1

原创 LeetCode 148. x的平方根(二分法;牛顿迭代法)

2021年06月07日 周一 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. x为非负整数1.1 返回整数1.2 返回浮点数1.2.1 二分法(不保证正确)1.2.2 牛顿迭代法(推荐)2. x为浮点数3. 总结1. x为非负整数1.1 返回整数这时稍微简单点,用二分法即可,唯一需要注意的就是越界问题。class Solution {public: int mySqrt(int x) { if(x==0 || x==1) return x;

2021-06-08 12:45:34 342 1

原创 LeetCode 518 零钱兑换II(弄清内外循环的顺序,一个是求组合数,一个是求排列数)

2021年5月14日 周五 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 题解(经典动态规划)1. 题目简介518. 零钱兑换 II2. 题解(经典动态规划)非常经典的动态规划题目,需要注意的是:本题求的是组合数,内外循环的顺序要搞清楚,如果交换内外循环的话,就变成了排列数。可以这样记忆: 如果钱币循环在外层,说明钱币出现的顺序已经被人为地确定了,这样就不会出现顺序不一样,但是和为 amout 的答案。因此,钱币在外层是组合数,在内层是排列数。class So

2021-05-14 22:34:02 160

转载 C++自己实现一个nullptr(转发)

2021年05月07日 周五 天气 小雨 【不悲叹过去,不荒废现在,不惧怕未来】本文目录自己实现一个nullptr(c++)

2021-05-07 10:37:57 113

原创 美团笔试 最优二叉树II(树形DP)

2021年04月21日 周三 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 树形DP参考文献1. 题目简介最优二叉树II2. 树形DP图源:shanxiansen310#include<bits/stdc++.h>using namespace std;// 最大节点个数const int maxN = 301;// 二叉树节点值vector<int> nums;// 备忘录int ans[maxN][maxN][maxN

2021-04-21 21:44:55 1664 1

原创 LeetCode 148. 排序链表(归并和快速排序)

2021年04月18日 周日 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 题解2.1 选择排序2.2 归并排序1. 题目简介148. 排序链表2. 题解2.1 选择排序2.2 归并排序

2021-04-18 15:08:04 590

原创 LeetCode 189. 旋转数组(翻转数组;环形替换)

2021年04月15日 周四 天气大风 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 题解2.1 开辟新数组复制2.2 三次翻转2.3 环形替换参考文献1. 题目简介189. 旋转数组2. 题解2.1 开辟新数组复制将原数组下标为 i 的元素放至新数组下标为 (i+k) mod n 的位置。class Solution {public: void rotate(vector<int>& nums, int k) { int

2021-04-15 21:10:22 144

原创 LeetCode 287. 寻找重复数(龟兔赛跑;二分查找)

2021年04月15日 周四 天气大风 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 题解2.1 二分查找法2.2 龟兔赛跑算法1. 题目简介287. 寻找重复数2. 题解2.1 二分查找法class Solution {public: int findDuplicate(vector<int> &nums) { int len = nums.size(); int left = 1; int

2021-04-15 10:35:38 195

原创 LeetCode 9. 回文数(反转一半的数字)

2021年04月14日 周三 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 题解2.1 计算首尾数值进行比较2.2 反转一半的数字(掌握)参考文献1. 题目简介9. 回文数2. 题解2.1 计算首尾数值进行比较刚开始的思路是,先计算位数,然后根据位数计算首尾数值,进行比较。class Solution {public: bool isPalindrome(int x) { if(x<0) return false;

2021-04-14 16:23:38 184

原创 LeetCode 739. 每日温度(逆序遍历;单调栈)

2021年04月14日 周三 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 题解2.1 从后往前遍历2.2 单调栈参考文献1. 题目简介739. 每日温度2. 题解2.1 从后往前遍历思路:维护一个数组 t ,记录每个温度第一次出现的下标,从后往前遍历,找出大于当前元素中,索引最小的那个,就是第一个大于当前元素值的索引,同时更新数组 t 。为什么要从后往前遍历?答:如果从前往后遍历,前面的元素可能会影响当前位置结果的判断。而从后往前遍历,保证了当前元素前面的元

2021-04-14 15:04:24 174

原创 LeetCode 128. 最长连续序列(判断左边界法)

2021年04月11日 周日 天气阴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 判断左边界法参考文献1. 题目简介128. 最长连续序列2. 判断左边界法class Solution {public: int longestConsecutive(vector<int>& nums) { int res = 0; unordered_set<int> uset; // 第一步:去

2021-04-11 17:11:13 122

原创 LeetCode 224. 基本计算器(考虑“ + - * / ( ) ” 所有情况,递归、迭代双版本)

2021年04月10日 周六 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 题解2.1 只处理加减(迭代)2.2 处理加减乘除(递归)参考文献1. 题目简介224. 基本计算器2. 题解2.1 只处理加减(迭代)核心思想:遍历的同时进行计算。 由于只有加减法,所以直接从前到后进行计算,要注意的就是括号的处理:遇到 “(” ,则将前一个数和运算符压入栈中,遇到 “)” ,则把它们取出来,和括号里计算的结果相加(符号也可能是减号)。class Solution {

2021-04-10 22:24:20 260

原创 LeetCode 32. 最长有效括号(dp;栈;遍历)

2021年04月10日 周六 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 题解2.1 dp(掌握)2.2 栈2.3 两次遍历(掌握)参考文献1. 题目简介32. 最长有效括号2. 题解2.1 dp(掌握)dp是这道题的标准解法,建议掌握。dp思路:class Solution {public: int longestValidParentheses(string s) { const int n = s.size();

2021-04-10 13:20:03 158

原创 LeetCode 662. 二叉树最大宽度(合理利用二叉树顺序存储下标对应关系)

2021年04月09日 周五 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. BFS法参考文献1. 题目简介662. 二叉树最大宽度2. BFS法合理利用二叉树顺序存储下标对应关系,为每个根结点建立编号,根据编号求得宽度值。class Solution {public: int widthOfBinaryTree(TreeNode* root) { // 保存最大的宽度 int res = 0; // 队列

2021-04-09 22:30:09 141

原创 460. LFU 缓存(哈希表+双向链表)

2021年04月09日 周五 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 哈希表+双向链表参考文献1. 题目简介460. LFU 缓存2. 哈希表+双向链表本题的思路类似于 146. LRU 缓存机制 ,但是要更复杂。感谢大神 liweiwei1419 的配图。1. LRU 和 LFU 的区别2. 本题核心思想struct Node{ int key, val, freq; Node(int _key, int _val, int _f

2021-04-09 21:08:27 188

原创 密钥协商相关知识

2021年04月06日 周二 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 密钥协商相关概念2. 密钥协商算法分类2.1 百度百科概念2.2 进一步解释参考文献1. 密钥协商相关概念密钥协商(百度百科): 两个或多个实体协商,共同建立会话密钥,任何一个参与者均对结果产生影响,不需要任何可信的第三方(TTP)。密钥协商协议(百度百科): 会话密钥由每个协议参与者分别产生的参数通过一定的计算得出。常见的密钥协商协议,如IKE。2. 密钥协商算法分类2.1 百度百科概念密钥协商算法分

2021-04-06 18:29:26 1167

转载 C++中static变量的初始化

2021年03月31日 周三 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 编译时初始化2 加载时初始化3 运行时初始化4 static初始化的原理总结1. 编译时初始化如果静态变量本身是基本数据类型(POD),且初始化值是常量,那么这个初始化过程是在编译期间完成的。static int a = 10;static char strArray[] = "hello! world";那么这个初始化过程是在编译期间完成的,这也就是通常所说的"编译时初始化"。2 加载时初始化程

2021-03-31 09:44:31 4565 1

转载 C++ 函数/模板的偏特化和全特化

2021年03月30日 周二 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】直接用代码来解释:#include <iostream>using namespace std; template<typename T, typename N>class Test{public: Test( T i, N j ) : a(i), b(j) { cout<<"普通模板类"<< a <<' ' <&lt

2021-03-30 21:49:11 149

转载 为什么C++是面向对象的语言?

2021年03月27日 周六 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】为什么C++是面向对象的语言?

2021-03-27 10:05:03 540 1

原创 Leetcode 82. 删除排序链表中的重复元素 II(迭代;递归(非简单的递归))

2021年03月26日 周五 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 问题简介2. 题解2.1 迭代2.2 递归参考文献1. 问题简介82. 删除排序链表中的重复元素 II2. 题解2.1 迭代求解的关键点在于:当遇到重复元素并删除完了的时候,不要更新pre ,因为可能cur->next还是重复的节点;只有当cur->val和cur->next->val不相等时(保证了cur一定不是重复的节点),才更新pre。class Solution {p

2021-03-26 22:30:03 96

原创 Leetcode 718. 最长重复子数组(DP;滑动窗口)

2021年03月25日 周四 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 问题简介2. 题解2.1 动态规划2.2 滑动窗口(思路巧妙)参考文献1. 问题简介718. 最长重复子数组2. 题解2.1 动态规划class Solution {public: int findLength(vector<int>& A, vector<int>& B) { int m = A.size(), n = B.size(

2021-03-25 16:09:06 175 2

原创 Leetcode 470. 用 Rand7() 实现 Rand10()(拒绝采样)

2021年03月19日 周五 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 问题简介2. 题解(拒绝采样)2.1 方法一2.2 方法二参考文献1. 问题简介470. 用 Rand7() 实现 Rand10()2. 题解(拒绝采样)具体可参考:从最基础的讲起如何做到均匀的生成随机数2.1 方法一class Solution {public: int rand10() { while(true){ int a = rand7();

2021-03-19 17:54:29 185

原创 Leetcode 31. 下一个排列(为什么要这么做?)

2021年03月19日 周五 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 问题简介2. 题解(为什么是这么做?)参考文献1. 问题简介31. 下一个排列2. 题解(为什么是这么做?)这道题最重要的是理解思路,思考为什么这么做之后就能得到下一个排列? 下面是具体思路:思路理清之后,代码就比较容易实现了:class Solution {public: void nextPermutation(vector<int>& nums) {

2021-03-19 10:53:27 88

原创 Leetcode 46. 全排列(经典回溯法)

2021年03月18日 周四 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 问题简介2. 题解(回溯大法)2.1 临时数组法2.2 交换法*复杂度分析参考文献1. 问题简介46. 全排列2. 题解(回溯大法)2.1 临时数组法class Solution {public: unordered_set<int> uset; // 利用哈希表判断元素是否遍历过了 vector<vector<int>> res; vect

2021-03-18 15:21:29 149

原创 LeetCode 56.合并区间(排序+双指针)

2021年03月16日 周二 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 问题简介2. 题解参考文献1. 问题简介56. 合并区间2. 题解排序+双指针:先按照左区间的大小进行排序,然后利用双指针,循环的进行区间合并。class Solution {public: struct cmp{ bool operator()(const vector<int>& v1,const vector<int>& v2){

2021-03-16 22:37:12 136

转载 数组指针和指针数组的区别

2021年03月16日 周二 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】数组指针和指针数组的区别

2021-03-16 16:15:13 68

转载 详解C++的模板中typename关键字的用法

2021年03月16日 周二 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】详解C++的模板中typename关键字的用法

2021-03-16 15:40:44 128

原创 LeetCode 42. 接雨水(双指针巧妙求解,韦恩图拍案叫绝)

2021年03月13日 周六 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 问题简介2. 多种解法(数学法最为巧妙)2.1 按列求(循序渐进)2.1.1 暴力法(双循环)2.1.2 暴力法优化一——动态规划2.1.3 暴力法优化二——双指针,巧妙求解2.2 按行求(单调栈)2.3 数学法(韦恩图,拍案叫绝)参考文献1. 问题简介42. 接雨水2. 多种解法(数学法最为巧妙)具体可参考:https://leetcode-cn.com/problems/trapping-rain

2021-03-13 21:48:01 267

原创 剑指 Offer 36. 二叉搜索树与双向链表(考察中序遍历,需要存储前一个节点)

2021年03月11日 周四 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 问题简介2. 题解(中序遍历,存储前一个节点)2.1 递归2.2 迭代参考文献1. 问题简介剑指 Offer 36. 二叉搜索树与双向链表2. 题解(中序遍历,存储前一个节点)中序遍历每一个节点,同时存储上一个节点,完成双向链表的构建。2.1 递归class Solution {public: Node* pre, *head; Node* treeToDoublyList(Node

2021-03-11 22:25:26 92

原创 Leetcode20 有效的括号(栈的妙用(有简洁写法))

2021年3月10日 周三 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 题解(栈的妙用)参考文献1. 题目简介20. 有效的括号2. 题解(栈的妙用)这道题的思路并不难:利用栈先进先出的特点,比较容易解决,问题在于程序的实现,有一种比较简洁的写法。常规写法:class Solution {public: bool isValid(string s) { stack<char> st; for(const

2021-03-10 15:22:02 62

原创 LeetCode 160. 相交链表(合并情况,简化代码)

2021年3月5日 周五天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 题解1. 题目简介160. 相交链表2. 题解思路比较简单:走完自己的路之后,再走别人的路,这样就能一起到达交点了。问题是如何让代码写的简洁。我们可以把两个链表不相交的情况,看作它们相交于NULL,这样就可以把相交和不相交合并成相交一种情况:class Solution {public: ListNode *getIntersectionNode(ListNode *headA,

2021-03-05 10:10:43 93 1

原创 Leetcode 25. K 个一组翻转链表(模拟法)

2021年3月4日 周四天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 题解(模拟法)参考文献1. 题目简介25. K 个一组翻转链表2. 题解(模拟法)朴实无华的模拟法:思路类似于 Leetcode 92. 反转链表 II,只不过更复杂一些,需要每次根据头尾结点反转k个结点,然后把断掉的地方接上,直到剩下的结点不足k个为止。/** * Definition for singly-linked list. * struct ListNode { *

2021-03-04 10:38:54 113 1

原创 Leetcode 15. 三数之和(排序 + 双指针)

2021年3月3日 周三天气晴 【不悲叹过去,不荒废现在,不惧怕未来】本文目录1. 题目简介2. 题解(排序 + 双指针)参考文献1. 题目简介Leetcode 15. 三数之和2. 题解(排序 + 双指针)主要思路:排序 + 双指针,难点是如何去重。算法流程如下:class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { sor

2021-03-03 19:39:37 344 1

空空如也

空空如也

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

TA关注的人

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