- 博客(326)
- 资源 (12)
- 收藏
- 关注
原创 【情景设计】手写智能指针
对其持有的堆内存具有唯一拥有权,也就是说引用计数永远是 1,std::unique_ptr 对象销毁时会释放其持有的堆内存。
2024-05-20 10:19:26 407
原创 【leetcode】缓存淘汰策略题目总结
我们使用了一个双向链表cache来存储数据,同时使用一个哈希表hash_map来映射键和链表节点的迭代器。当调用get(key)函数时,我们首先检查hash_map中是否存在该key,如果存在则将之前位置移到链表头部并返回值;当调用函数时,我们先检查hash_map中是否存在该key,存在的话将该节点从链表中删除,不管存在与否都需要考虑是否需要删除旧数据(缓存已满的情况)。我们定义两个哈希表,
2024-05-02 12:44:03 805
原创 【leetcode】滑动窗口题目总结
滑动窗口算法是在给定特定窗口大小(当然也可以是动态可变窗口)的数组或者字符串上进行操作的算法,该算法主要的用途就是在于将嵌套循环时间复杂度的效率优化成为线性时间复杂度。简而言之,滑动窗口算法在一个特定大小的字符串或数组上进行操作,而不在整个字符串和数组上操作,这样就降低了问题的复杂度,从而也达到降低了循环的嵌套深度。窗口: 窗口大小并不是固定的,可以不断扩容直到满足一定的条件;也可以不断缩小,直到找到一个满足条件的最小窗口;当然也可以是固定大小。滑动: 说明这个窗口是移动的,也就是移动是按照一定方向来的。
2024-04-29 17:23:15 444
原创 【leetcode】快慢指针相关题目总结
判断链表中环的起点:当我们判断出链表中存在环,并且知道了两个指针相遇的节点,我们可以让其中任一个指针指向头节点,然后让它俩以相同速度前进,再次相遇时所在的节点位置就是环开始的位置。判断链表是否有环:如果链表中存在环,则在链表上不断前进的指针会一直在环里绕圈子,且不能知道链表是否有环。先让其中一个指针向前走k步,接着两个指针以同样的速度一起向前进,直到前面的指针走到尽头了,则后面的指针即为倒数第k个元素。快指针一次前进两步,慢指针一次前进一步,当快指针到达链表尽头时,慢指针就处于链表的中间位置。
2024-04-27 17:34:34 364
原创 【leetcode】数组和相关题目总结
直接利用hashmap存储值和对于索引,利用target-nums[i]去哈希表里找对应数值。返回下标。排序+双指针。
2024-04-27 11:07:04 213
转载 DESIGN PATTERNS - ABSTRACT FACTORY PATTERN
Abstract Factory PatternAbstract Factory - Provide an interface for creating families of related or dependent objects without specifying their concrete classes.Abstract Factory pattern lets a class ...
2020-03-25 16:21:50 311
转载 C++对象模型详解
C++对象模型详解点击打开链接https://www.cnblogs.com/tgycoder/p/5426628.htmlhttps://www.cnblogs.com/tgycoder/p/5426628.html
2018-03-30 16:57:34 532
原创 7_TwoDimensionalArray
//二维数组的创建、查询、销毁int **create(int m,int n){ int **arr=new int*[m]; for(int i=0;i<m;i++) { arr[i]=new int[n]; } return arr;}int search(int **arr,int m,int n,int...
2018-03-26 19:42:48 413
原创 6_BinarySearch
//[2 4 5 6 8 10 12 14 17 19] 5#include<iostream>using namespace std;int search(int array[], int len, int value){ int low=0,high=len-1; while(low<=high) { //int m...
2018-03-16 21:35:38 332
原创 5_JumpOutArrary
/*DP动态规划一个数组,每个位置的数字代表当前位置可以向前走的步长,判断该数组能否跳出数组之外case1 :[1,3,1,1,1,2] true// [1,4,4,4,5,5]case2 :[1,2,1,1,0,2] falsecase3 :[1,3,1,3,0,2] true*/#include<iostream>using namespace std...
2018-03-16 21:23:07 340
原创 4_Longest Substring Without Repeating Characters
//abcabcbb abc 3//bbbbb b 1//pwwkew wke 3#include<iostream>#include<string>#include<vector>using namespace std;int lengthOfLongestSubstring(string s...
2018-03-14 20:27:54 335
原创 3_Add Two Numbers
//Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)//Output: 7 -> 0 -> 8//Explanation: 342 + 465 = 807.#include<iostream>using namespace std;struct ListNode { int val; ListN...
2018-03-10 08:25:06 264
原创 2_shift_left
//0 1 2 3 4 5 6 7//1 2 3 4 5 6 7 0//2 3 4 5 6 7 0 1#include<iostream>#include<vector>using namespace std;void reverse_arr(vector<int>&vec,int start,int end){ for(;st...
2018-03-10 08:23:52 787
原创 1_two_sum
//数组:2 6 7 11 4 3 目标:9//下标:0 1 2 3 4 5//位置:1 2 3 4 5 6//当前元素依次往后遍历,在前边元素中找(target-当前元素)/*2 76 32 06 1*/#include<iostream>#include<vector>#include<map>using n...
2018-03-10 08:21:14 254
原创 C 语言字符数组的定义与初始化
C 语言字符数组的定义与初始化1、字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。 char str[10]={ ‘I’,’ ‘,’a’,’m’,’ ‘,‘h’,’a’,’p’,’p’,’y’}; 即把10个字符分别赋给str[0]到str[9]10个元素 如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组 长度,则只将这些字符数组中前
2017-05-14 22:01:50 1268
转载 使用事件驱动模型实现高效稳定的网络服务器程序
几种网络服务器模型的介绍与比较围绕如何构建一个高效稳定的网络服务器程序,本文从一个最简单的服务器模型开始,依次介绍了使用多线程的服务器模型、使用非阻塞接口的服务器模型、利用select()接口实现的基于事件驱动的服务器模型,和使用libev事件驱动库的服务器模型。通过比较各个模型,得出事件驱动模型更适合构建高效稳定的网络服务器程序的结论。前言事件驱动
2016-08-30 21:24:39 577
原创 草原坝上滑梯
草原坝上滑梯 只能从上下左右侧移动 输入:行数R 列数C 输出:最长区域的长度 样例: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 输出:25#include <iostream>#include <algorithm>using namespace std;
2016-08-28 22:25:45 1018 1
原创 字符串合法性长度
题目: 仅由三个自负A、B、C构成字符串,切字符串任意连续三个元素不能完全相同。如“ACCCAB”不合法,“ABBCBCA”合法。求满足条件的长度为n的字符串个数。假定不考虑整数溢出,要求时间和空间复杂度不高于O(N)。 提示:使用动态规划、滚动数组、矩阵乘幂#include <iostream>#include <string>using namespace std;int NumO
2016-08-28 13:41:03 1022
原创 构造回文
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述:对于每组数据,输出一个整数,代表最少需要删除的字符个数。输入例子:abcdagoogle
2016-08-25 22:50:36 716
原创 线索二叉树
一、线索二叉树的原理 通过考察各种二叉链表,不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数。准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。如下图所示。 因此,提出了一种方法,利用原来的空链域存放指针,指向树中其他结点。这种指针称为线索。 记ptr指向二叉链表中的一个结点,以下是建立线索的规
2016-08-13 14:59:20 603
原创 二叉树中节点的最大的距离
问题定义把二叉树看成一个图,父子节点之间的连线看成是双向的,定义“距离”为两个节点之间的边数。例如下图中最大距离为红线的条数为6.分析方法一、typedef struct Node { struct Node *pleft; //左孩子 struct Node *pright; //右孩子
2016-08-12 21:33:41 5254
转载 Morris Traversal方法遍历二叉树
本文主要解决一个问题,如何实现二叉树的前中后序遍历,有两个要求:1. O(1)空间复杂度,即只能使用常数空间;2. 二叉树的形状不能被破坏(中间过程允许改变其形状)。通常,实现二叉树的前序(preorder)、中序(inorder)、后序(postorder)遍历有两个常用的方法:一是递归(recursive),二是使用栈实现的迭代版本(stack+iterative)。这
2016-08-12 18:09:27 1242
转载 图解后缀表达式的计算过程
为了解释后缀表达式的好处,我们先来看看,计算机如何应用后缀表达式计算出最终的结果20的。后缀表达式:9 3 1-3*+ 10 2/+规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。下面是详细的步骤:1. 初始化一个空栈。此桟用来对要运算的数字进出使用。
2016-08-11 22:51:11 25774 2
转载 将中缀表达式转化为后缀表达式
我们把平时所用的标准四则运算表达式,即“9+(3-1)*3+10/2"叫做中缀表达式。因为所有的运算符号都在两数字的中间,现在我们的问题就是中缀到后缀的转化。中缀表达式“9+(3-1)*3+10/2”转化为后缀表达式“9 3 1-3*+ 10 2/+”规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号
2016-08-11 22:39:15 1327 1
转载 海量数据处理——trie树
1. 什么是trie树 1.Trie树 (特例结构树) Trie树,又称单词查找树、字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 Trie的核心思想是
2016-08-11 16:31:00 1266
转载 海量数据处理问题汇总及方法总结
面试题中总是有好多海量数据的处理问题,在这里列出一些常见问题,便于以后查阅: 类型1:hash映射+hash统计+堆排序1、 给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。 可以估计每个文件安的大小为5G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治
2016-08-10 16:16:09 2857 1
转载 海量数据处理常用思路和方法
1.Bloom filter 适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集 基本原理及要点: 对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。
2016-08-10 16:14:03 492
转载 海量数据处理——倒排索引
一,什么是倒排索引问题描述:文档检索系统,查询那些文件包含了某单词,比如常见的学术论文的关键字搜索。基本原理及要点:为何叫倒排索引?一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。 以英文为例,下面是要被索引的文本: T0 = "it is what it is" T1 = "what is it" T2 =
2016-08-10 16:11:30 3715
原创 海量数据处理——分治和hash映射
什么是Hash Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数
2016-08-10 16:06:03 17474 2
STL源码讲解文档
2016-06-05
STL源码剖析 候捷配套
2016-06-05
STL source code
2016-06-05
SX1278模块
2015-11-18
BLE-CC41-A蓝牙模块
2015-11-18
SX1276/1278LoRa模块测试程序
2015-11-18
BLE-CC41-A蓝牙模块驱动程序
2015-11-18
虚拟化知识
2015-08-18
操作系统:精髓与设计原理02(读书笔记)
2015-07-26
操作系统:精髓与设计原理01(读书笔记)
2015-07-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人