自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 资源 (1)
  • 论坛 (1)
  • 收藏
  • 关注

原创 LeetCode每日一题-对链表进行插入排序

对链表进行插入排序/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* insertionSortList(ListNode* head) {

2020-11-20 23:11:23 17

原创 LeetCode每日一题-移动零

移动零class Solution {public: void moveZeroes(vector<int>& nums) { //双指针做 left right - 时间复杂度为o(n) int left = 0, right = 0; while(left < nums.size() && right < nums.size()) { //left - 指向元素为0的

2020-11-20 21:06:15 9

原创 LeetCode每日一题-奇偶链表

给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : va.

2020-11-13 21:26:26 10

原创 LeetCode每日一题-按奇偶排序数组 II

按奇偶排序数组 II给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。你可以返回任何满足上述条件的数组作为答案。class Solution {public: vector<int> sortArrayByParityII(vector<int>& A) { //偷懒一点 - 创建辅助空间 // if(A.s

2020-11-12 23:03:56 12

原创 tcp非阻塞connect实现

引言:客户端connect接口, 代表着三次握手, 默认为阻塞模式, 在握手期间, 客户端程序只能处于等待状态, 不能处理其他的业务,其次,如果握手失败, 还会等connect计时器时间, 大约是在75s左右。一、阻塞connect存在的几大问题。1、阻塞期间不能处理其他业务。2、如果连接失败, 等待的时间过长。二、实现非阻塞connect的方法1、将创建sockfd设置为阻塞模式int old_option = fcntl(fd, F_GETFL);int new_optio.

2020-11-11 17:07:24 28 1

原创 LeetCode-隐藏个人信息

隐藏个人信息给你一条个人信息字符串 S,它可能是一个 邮箱地址 ,也可能是一串 电话号码我们将隐藏它的隐私信息,通过如下规则:class Solution {public: //邮箱处理函数 string MailToString(const string& str) { //1、首先获取第一组到第一个和最后一个字符 size_t pos = str.find('@'); size_t pos1 = str.fi

2020-11-10 17:45:01 33

原创 LeetCode每日一题-下一个排列

下一个排列class Solution {public: void nextPermutation(vector<int>& nums) { //双指针法 - 探索规律去做题 if(nums.size() == 0) { return; } int left = nums.size() - 1; int right = left; while(left > 0) {

2020-11-10 17:39:52 12

原创 LeetCode每日一题-根据数字二进制下 1 的数目排序

根据数字二进制下 1 的数目排序给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。class Solution {public: struct cmp { int Bytr1Size(int num) { int count = 0; while(num) {

2020-11-06 19:51:50 15

原创 LeetCode每日一题-单词接龙

单词接龙给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:class Solution {public: //深度优先搜索DFS - 超时 // bool IsRight(const string& beginWord, const string& str) { // //判断beginword字符串 是否可以变成 str //

2020-11-06 00:34:07 21

原创 LeetCode每日一题-有效的山脉数组

有效的山脉数组给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false。让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组:A.length >= 3在 0 < i < A.length - 1 条件下,存在 i 使得:A[0] < A[1] < … A[i-1] < A[i]A[i] > A[i+1] > … > A[A.length - 1]class Solution {public:

2020-11-03 16:07:33 15

原创 LeetCode每日一题-O(1) 时间插入、删除和获取随机元素 - 允许重复

O(1) 时间插入、删除和获取随机元素 - 允许重复// 初始化一个空的集合。RandomizedCollection collection = new RandomizedCollection();// 向集合中插入 1 。返回 true 表示集合不包含 1 。 collection.insert(1);// 向集合中插入另一个 1 。返回 false 表示集合包含 1 。集合现在包含 [1,1] 。collection.insert(1);// 向集合中插入 2 ,返回 true 。

2020-11-01 18:42:40 9

原创 LeetCode每日一题-岛屿的周长-2020-10-30补录

岛屿的周长给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。class Solution {public: int islandPerimeter(vec

2020-11-01 00:34:35 13

原创 LeetCode每日一题-求根到叶子节点数字之和

给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right;.

2020-10-29 21:15:58 14

原创 LeetCode每日一题-独一无二的出现次数

独一无二的出现次数给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。class Solution {public: bool uniqueOccurrences(vector<int>& arr) { if(arr.empty()) { return true; } unordered_map<int

2020-10-28 23:16:24 32

原创 LeetCode每日一题-二叉树的前序遍历

二叉树的前序遍历给定一个二叉树,返回它的 前序 遍历。class Solution {public: vector<int> preorderTraversal(TreeNode* root) { // if(root) { // vec_.push_back(root->val); // preorderTraversal(root->left); // preorderTr

2020-10-27 17:51:50 18

原创 LeetCode每日一题-数组中的最长山脉

数组中的最长山脉我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:B.length >= 3存在 0 < i < B.length - 1 使得 B[0] < B[1] < … B[i-1] < B[i] > B[i+1] > … > B[B.length - 1](注意:B 可以是 A 的任意子数组,包括整个数组 A。)给出一个整数数组 A,返回最长 “山脉” 的长度。如果不含有 “山脉” 则返回 0。class

2020-10-25 12:54:45 61 3

原创 LeetCode每日一题-回文链表

回文链表请判断一个链表是否为回文链表。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: // bool isPalindrome(ListNode* head) { /

2020-10-23 09:55:02 18

原创 LeetCode每日一题-划分字母区间

划分字母区间字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。class Solution {public: vector<int> partitionLabels(string S) { //1、采用定长的数组存储每个元素的最大位置 int hash[26] = {0}; for(int i = 0; i < S.size()

2020-10-22 10:51:25 24 1

原创 LeetCode每日一题-长按键入

长按键入你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。class Solution {public: bool isLongPressedName(string name, string typed) { //1、鲁棒性检查 if(!name.size() &a

2020-10-21 10:01:03 12 1

原创 LRU最久未使用淘汰算法实现

LRU: 缺页置换算法中的一种, 当容量满的时候, 添加新的一页,就会置换淘汰掉最久未使用的一页。实现:可以采用链表实现: 主要是因为该算法体现在头部和尾部的操作居多。因此采用双向链表为佳。 介于C++STL容器的list实现为一个方式。由于牵扯到判断是否存在的问题, 因此需要遍历查找。 该算法实现时间复杂度为o(n)双向链表实现#include <iostream>#include <list>#include <unordered_map>using

2020-10-14 22:57:14 46

原创 计数排序&基数排序

在此之前我是不了解基数排序的, 昨天专门研究了下。 感觉是一种非常不错的排序算法。时间复杂度很低o(n), 空间复杂度为o(n)。说实话,没有多少种排序算法可以达到这样的性能。仔细研究了下,发现在很多种情况下采用这样算法可以做到很好的处理。(例如字符串排序, 电话号码排序等)一、计数排序如果想要学会基数排序, 那么首先要了解计数排序, 因为基数排序封装了计数排序。那么对于计数排序, 我有一种很强烈的感觉就是用空间换取时间。我想大家都知道哈希思想。1、开辟一块很大的辅助空间(能够存储最大

2020-10-05 14:16:27 36

原创 SYN泛洪攻击

今天我们来讨论一个问题: 就是SYN泛洪攻击。泛洪攻击出现在三次握手阶段, 这是TCP协议本身存在的缺点。一、泛洪攻击原理:攻击方以伪造的IP地址向服务器发送大量SYN请求(对应接口是connect),我们知道这是三次握手的第一个报文, 服务器收到SYN请求之后, 会返回SYN+ACK的报文(表明自己已经接受到你的连接请求, 并且我也想和你建立连接)。正常的客户端连接是会返回ACK报文的。 但这个攻击方不会返回ACK。攻击方负责大量地发送SYN请求,但不响应服务器端地回应。最终会导致服务器

2020-09-22 23:27:28 151

原创 KMP算法-实现多重查找

这个算法是计算关于字符串匹配问题。求一个字符串在另一个字符串是否存在, 如果存在下标在哪里?str1 = “abcdefgh”str2 = “efg”求str2是否为str1的字串, 很显然可以看出下标为4.这里我推荐大家看下刘毅大佬的文章, 写得很详细。大佬KMP算法详解另一位大佬的KMP解析我相信大家看完之后,就会有所体会、了解。这块大佬给我们留下一些猜想, 就是第一次找到了就不会去寻找了, str1字符串中后面或许还有的呢, 我就做一些弥补吧, 也是写这篇文章的原因。基于大佬给

2020-09-13 16:48:49 48

原创 2021届秋招携程笔试编程题

说实话, 不知道该不该写这篇文章。毕竟昨天晚上刚面试过了,今天就写, 有点害怕!感觉答得不怎么样,不过尽全力发挥了。 题目不太适合我的方向。我对数据库方面的知识有些欠缺, 还有道java的题,怎么说了。。。。。。尽全力就行了。编程第一道大题:找到敏感词汇, 把字符串的敏感词汇替换成目标词汇。举个例子:敏感词汇: you句子: i love you, ouy love me替换词: jack输出: i love jack, jack love me句子中you、ouy都属于敏感词汇,

2020-09-09 16:57:40 259

原创 八皇后问题&最小换乘问题

这道问题很精辟, 考察回溯的实现。对于一个二维数组何如回溯的思想很有帮助。由于我找到一个写得非常不错的文章, 我就不在这里自取欺辱了。大佬的八皇后思想分解基于这道题的思想, 我自己对于二维数组的回溯实现有了一定的了解。还是很有帮助的, 本章文件就相当于是一篇转发吧。核心框架:void Find_Queen(vector<vector<int>>& queen_pos, int rows, int* steps) { //rows 控制 行数, 当rows ==

2020-09-08 00:44:28 42 1

原创 两个无序的数组合并为一个有序的数组

这道题很有意思。考察对于排序思想的理解。我相信大部分的人都写过两个有序链表的合并, 不过前提是有序。这里是无序的。 其次是链表合并指向变化, 不许要开辟额外的空间就可以去做。这里不可以。 因此是数组。 你可以思考一下充满了挑战性。那么这道题该如何处理呢?1、将一个数组元素插入到另一个数组中,然后调用一次排序算法。这种思想可以说, 非常简单, 还有点取巧。我们分析性能, 时间复杂度, 我们采用快速排序去做。nlogn, 感觉还可以哦!我想这种思想是可以说的,但是不能作为最终的解法。 可以提一

2020-09-07 19:47:06 221 1

原创 大数运算分析

何为大数运算?就是数据量过多, 内存放不下, 如果去处理的问题。 下面我们通过例题分析在这里, 我们先讲一些换算公式:1G = 10亿byte, 2G = 20亿byte一般内存大小为4G, 内核占用2G, 用户最大能够使用2G左右(我们一般认为用户最多能够使用2G空间)一、给一个超过100G大小的IP地址, 设计算法找到出现次数最多的IP地址?100G的ip地址, ip为4byte, 如果想要全部存在, 需要100*4 = 400Gbyte大小的空间而我们只有2G空间的大小, 很显然

2020-09-05 22:45:22 41

原创 谈谈有意思的const参数函数重载问题

这道问题我们经常遇到, 但是几乎很少对它有过研究。我们以一段代码作为引言:#include <iostream>using namespace std;void Fun(int a) { cout << "nonconst-a" << endl;}void Fun(const int a) { cout << "const-a" << endl;}int main() { int a = 10; const in

2020-09-05 09:49:37 43

原创 c++基类对象如何访问派生类的独有的属性

这种问题很有意思。我们都知道派生类对象可以访问基类的属性, 因为是继承(共有),继承基类的属性并在此基础上做扩充。因此支持派生类对象、指针、引用赋给基类对象, 也叫切片操作、也叫上行转化。但是基类不能赋给派生类对象, 是不支持的。你可以强转基类对象为派生类对象指针,进行赋值, 这种操作也叫下行转化,存在安全隐患。那么如何让基类访问派生类对象独有的属性呢?1、我想我们应该想想看多态, 这是我第一次想到这个问题的联想。多态允许我们基类对象访问派生类重写的虚函数, 但是这是要存放在虚表中 的虚函数,

2020-09-03 17:50:49 107

原创 说说mysql中的幻读???

最近复习mysql, 复习到事务那块, 对于幻读和不可重复读这块的概念老是搞不清。今天专门说说这个幻读。说到这个, 我们先讲讲事务那块存在的问题。当两个不同mysql用户对同一张表的数据访问时存在的问题。下面的所有情况都是两个mysql用户同时开始事务begin。以mysql用户A和mysql用户B为例。1、脏读用户B对这个表的数据进行修改。在没有commi提交之前, 用户A可以看到修改后的数据。 也就说B用户对这个表数据的任何操作A都是能看到的 - 这就是脏读。为什么说是脏读?个人理解,

2020-08-27 21:40:00 46

原创 tcp/ip详解

个人感觉tcp协议有种弥补ip协议的不足。ip协议是一个无状态、无连接、不可靠的服务。当接受端分用数据时, 它提交给上层协议时,这些数据可能是乱序的、重复的。他不会处理这些数据。 因此需要我们上层的传输层TCP协议来进行处理,处理完毕之后递交给应用层。说说IP协议的优点:1、由于无状态, 内核不需要开辟资源维护双方通信信息,简单、高效, 这点和UDP、HTTP协议相同。2、由于无状态, IP通信双方不会长时间维护对方IP地址信息, 每次发送数据时,都需要指定对端的IP地址。3、不可靠, IP

2020-08-27 19:30:29 54

原创 备战练习(五)(动态规划)

介绍这篇时, 我会用简单讲讲动态规划的思想, 毕竟动态规划的思想是很重要的。做这种题有种感觉, 你会思想,推出状态, 状态转移方程, 问题自然游刃而解。如果推不出,这种题真心很难,无从下手。一、将这种题的做法分为两步:1、从实际问题看规律,推出状态、状态转移方程。(这种是最难的、也是最关键的。)2、编写代码二、动态规划问题特点这种题的特点,大问题可以划分小问题, 小问题可以划分为更小的问题, 每个问题解决方法都是类似的。举例简单的斐波那契数列。[1,1,2,3,5,8,13,21…]1、状

2020-08-13 11:17:53 120

原创 备战练习(四)

一、回文数索引#include <iostream>#include <vector>#include <string> using namespace std; bool IsHui(const string& str) { if(str.size() == 0) { return true; } int begin = 0; int end = str.size() - 1; w

2020-08-10 20:48:48 51

原创 练习备战(三)

一、栈的压入、弹出序列非常精明的写法。 当入栈元素和出栈序列的元素相同时,我们就一直出栈,最终判断栈是否为空,栈为空, 则该出栈序列正确不为空, 出栈序列不正确。class Solution {public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { if(pushV.size() == 0 || popV.size() == 0 || pushV.s

2020-08-07 21:42:08 65 1

原创 练习备战(二)

一、删除链表中重复的结点//三指针法做的class Solution {public: ListNode* deleteDuplication(ListNode* pHead) { if(!pHead) { return nullptr; } if(!pHead->next) { //只有一个结点, 删毛线呀 return pHead; }

2020-08-06 19:23:16 63

原创 练习备战(一)

一、非递减排序及旋转数组#include <iostream>using namespace std;int main() { int a[] = { 3,3,3,3,1,2,3 }; int len = sizeof(a) / sizeof(a[0]); int begin = 0; int end = len - 1; while (begin < end) { //中间值 int mid = begin + (end - begin) / 2;

2020-08-03 19:41:19 64

原创 c++编程提升(一)

最近在阅读<<effective C++>>这本书, 这本书在我刚开始学习编程的时候, 我就听过这本书的大名。 不管在任何论坛和前辈的推荐中, 关于进阶C++, 总会有这本书的影子。本章浅谈下条款1到条款4。很好奇为什么这本书要以条款为标题。但是确实新颖, 分层很清晰。也算是这本书一大特色,挺喜欢的。条款1到条款4重点是在介绍const的重要性, 从各个方面引入,比较, 说const各大优点,甚至在设计的使用的优点等。1、explicit关键字我们来看一个例子:#incl

2020-07-17 00:11:39 65

原创 排序算法复习

排序是数据结构中很重要的算法, 说起来是算法, 个人感觉也就是种思想,明白每种算法的设计思想。 就很简单了。 就比不要去借鉴别人算法, 看起来苦涩难懂。算法最忌讳死记硬背。 所以对于算法静下心来,慢慢来, 多思考多分析。这样才扎实,在以后算法的扩展, 算法的优化才能更加轻松。一、冒泡排序给我们的一组序列{ 25,6,56,24,9,12,55 } , 长度为7。看着上图, 我们分析分析, 我们共执行了6次(也就是n-1)趟排序。每一趟排序都是将一个最大值放到合适的位置, 例如第一趟排序,56放到

2020-06-22 18:17:16 80

原创 二叉树面试复习题集(二)

根据二叉树创建字符串 – leetcode描述:你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。分析:当一个结点存在时, 我们会把这个结点存放到数组中,如果它的左孩子存在我们继续添加一个左括号, 进行左孩子递归, 当左孩子递归完毕后, 我们会添加一个右括号, 然后接着判断右孩子是否存在, 如果右孩子存在,我们也会添加一个括号,右孩子递归, 最后添加一个右括

2020-06-20 22:48:18 82

原创 二叉树面试复习题集(一)

去年做过一遍, 当时花了两周时间, 如今在做这些题,还是比较有点难吧, 首先每个问题的思路必须要明白,分析和设计这些代码,二叉树的考题递归偏多, 而递归这种东西真的第一次很难想到,即使想到也很难设计。 只能多练多看吧。二叉树也是一个热门的考点, 加油呀,自己!一、二叉树的先序遍历 – leetcode题目链接描述:给定一个二叉树,返回它的 前序 遍历。分析:先序遍历也就是根左右去遍历, 思想是很简单, 关键在于设计。我相信大家都会写递归的方法, 我就直接给说非递归实现的思想吧。递归实

2020-06-19 23:57:16 109

MD5算法(实现磁盘管理).pdf

实现MD5算法逻辑图,包括思想, 填充、运算、左移, 更新,整合

2020-05-08

萌新第一次用CSDN

发表于 2019-04-26 最后回复 2019-05-02

空空如也

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

TA关注的人 TA的粉丝

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