- 博客(48)
- 资源 (23)
- 收藏
- 关注
原创 各类算法排序详解
归并排序 自带时间复杂度测试//时间复杂度 O(N*log2N) //稳定程度: 稳定/*确定分界点,中间位置两端排序归并,合二为一*/ #include<iostream>#include<time.h>using namespace std;int tmp[250001];void Sort(int List[], int l, int r); int main(){ int a[250000]; int k, j; // 设置种子
2020-11-28 20:59:53
24
原创 常见算法核心思想
双指针算法1.双指针算法主要是为了提高朴素算法的复杂度,即O(n^2)的算法,优化为O(n)的算法。2.常见模板for (int i = 0, j = 0; i < n; i ++ ){ while (j < i && check(i, j)) j ++ ; // 具体问题的逻辑}常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作相关题目...
2020-11-28 20:54:04
19
原创 剑指 Offer 01-----20
剑指 Offer 03. 数组中重复的数字解题思路,使用STL中的set,逐个读入vector中的每一个元素,使用set进行对比,如果set中存在会返回1,这时直接返回该元素即可;如果set中没有可以insert这个元素到set,进行下一次遍历。class Solution {public: int findRepeatNumber(vector<int>& nums) { set<int> ret; for(auto i:
2020-11-28 15:32:37
22
原创 剑指 Offer 51-----59
剑指 Offer 55 - I. 二叉树的深度解题思路:class Solution {public: int maxDepth(TreeNode* root) { if(root==NULL)return 0; int l=maxDepth(root->left); int r=maxDepth(root->right); return (l>r?l:r)+1; }};...
2020-11-28 15:21:47
21
原创 LeetCode 01. 两数之和
原题视频讲解class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { map<int,int>p; vector<int>res; for(int i=0;i<nums.siz...
2020-11-28 14:52:11
60
原创 LeetCode 27.移除元素
原题链接/* * @lc app=leetcode.cn id=27 lang=cpp * * [27] 移除元素 标签:拷贝覆盖 主要思路是遍历数组nums,每次取出的数字变量为num,同时设置一个下标ans 在遍历过程中如果出现数字与需要移除的值不相同时,则进行拷贝覆盖nums[ans] = num,ans自增1 如果相同的时候,则跳过该数字不进行拷贝覆盖,最后ans即为新...
2020-11-28 14:52:07
94
原创 Leetcode 08. 字符串转换整数 (atoi)
原题链接1.字符 0~~~~~9 分别对应整数 48~~~~~572.先过滤空白3.确定前面所带的符号4. long long res = 0; res = res * 10 + str[k] - '0'; 可以通过此方法从左到右高位逐个累加。class Solution {public: int myAtoi(string str) { long long res = 0; int k = 0; while(k &...
2020-11-28 14:52:03
43
原创 LeetCode 02.两数相加
原题链接解题思路:本题可以使用模拟法,从链表的结点中提取出value逐个相加进位。从而得到最后的结果链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {}
2020-11-28 14:51:59
47
原创 LeetCode 03. 无重复字符的最长子串
原题链接解题思路:class Solution {public: int lengthOfLongestSubstring(string s) { unordered_map<char, int> hash; int res = 0; for (int i = 0, j = 0; j < s.size(); j ++ ) { hash[s[j]] ++ ; w
2020-11-28 14:51:42
31
原创 LeetCode 09. 回文数
原题链接class Solution {public: bool isPalindrome(int x) { if(x<0) return false; if(x>=0 && x<10) return true; long long temp = 0; int xx = x; while(x!=0){
2020-11-28 14:51:38
28
原创 Leetcode 24. 两两交换链表中的节点
原题链接题解:class Solution {public: ListNode* swapPairs(ListNode* head) { auto dummy = new ListNode(-1); dummy->next = head; for (auto p = dummy; p->next && p->next->next;) { auto a = p->next,
2020-11-28 14:51:28
27
原创 Leetcode 28. 实现 strStr()
原题链接解:KMP算法class Solution {public: int strStr(string s, string p) { if (p.empty()) return 0; int n = s.size(), m = p.size(); s = ' ' + s, p = ' ' + p; vector<int> next(m + 1); for (int i = 2, j = 0;
2020-11-28 14:51:20
24
原创 Leetcode 146. LRU 缓存机制
原题链接题解:class LRUCache {public: struct Node { int key, val; Node *left, *right; Node(int _key, int _val): key(_key), val(_val), left(NULL), right(NULL) {} }*L, *R; unordered_map<int, Node*> hash; int n;
2020-11-28 14:50:57
33
原创 LeetCode 07. 整数反转
原题描述个人解法思路class Solution {public: int reverse(int x) { int temp=0;//需要返回的最后结果 while(x!=0) { if(temp>INT_MAX/10 || temp<INT_MIN/10) return 0;...
2020-11-28 14:50:29
54
原创 归并排序 自带时间复杂度测试
#include<iostream>#include<time.h>using namespace std;int tmp[250001];void Sort(int List[], int l, int r);int main(){ int a[250000]; int k, j; // 设置种子 srand((unsigned)time(NU...
2020-11-28 14:49:04
79
原创 LeetCode题集大全
LeetCode 01. 两数之和LeetCode 02.两数相加LeetCode 03. 无重复字符的最长子串LeetCode 07. 整数反转Leetcode 08. 字符串转换整数 (atoi)LeetCode 09. 回文数LeetCode 13. 罗马数字转整数LeetCode 15 二进制中1的个数Leetcode 19. 删除链表的倒数第N个节点LeetCode 20.有效括号LeetCode 21 合并两个有序链表...
2020-11-28 14:46:30
64
原创 剑指 Offer 40-----50
原题链接class Solution {public: char firstUniqChar(string s) { char res = ' '; if(!s.size()) return res; unordered_map<char, int> mmp; for(int i = 0; i < s.size(); i++) { mmp[s[i]] += 1; }
2020-11-28 13:52:54
30
原创 【H.264/AVC视频编解码技术】第三章【熵编码算法】
熵编码的概念熵:化学与热力学概念,用于度量能量退化的指标。熵越高,物体/系统做工能力越低。信息学中的熵:用于度量消息的平均信息量,和信息的不确定性。越是随机的,前后不相关的信息,其熵越高。信源编码定理:说明了香浓熵与信源符号概率之间的关系。信息的熵为信源无损编码后平均码长的下限。基本思想使前后的码字之间尽量更加随机,减少前后相关性,更加接近其信源的香浓熵。常用熵编码算法1.变长编码:运算复杂度和编码效率都比较低,常用方法:哈夫曼编码,香农-费诺编码等。2.算数编码:运算较为复
2020-11-26 17:31:39
35
原创 Leetcode 61. 旋转链表
原题链接题解:class Solution {public: ListNode* rotateRight(ListNode* head, int k) { if (!head) return head; int n = 0; ListNode* tail; for (auto p = head; p; p = p->next) { tail = p; n ++ ;
2020-11-25 23:31:12
26
原创 C++ 11 深度学习(六)智能指针综述
以下三种智能指针均为类模板1.shared_ptr 共享指针 ,多个指针指向同一个对象,最后一个指针被销毁时,这个对象会被释放。2.week_ptr 是辅助shared_ptr工作的3.unique_ptr 是独占式指针,同一时间只要一个指针能指向该对象,该对象所有权还是可以转移出去的。shared_ptr基础1.共享所有权,不是被一个shaerd_ptr使用,而是被多个shared_ptr之间相互协作,shared_ptr有额外开销。2.工作原理:采用引用计数机制,每个sha...
2020-11-23 19:03:57
29
原创 C++ 11 深度学习(五)类型转换:static_cast dynamic_cast const_cast reinterpret_cast
四种cast通用形式:强制类型转换名<type>(express) @强制类型转换名,以上四种 ;@type:想要转成成的目标类型 ; @express,需要转换的目标static_cast内置数据类型转换,具有继承关系的指针和引用,不进行安全检查dynamic_cast动态类型转换,转换具有继承关系的 严格遵循对象类型安全检查 由下向上的转换是安全的,由上向下的转换是不安全不被允许的const_ca...
2020-11-23 17:03:05
28
原创 C++ 11 深度学习(四)结构、权限修饰符
1.structstruct MyStruct{ int a; char b;};struct默认权限为public,其中最重要的是涉及到结构体数据对齐。数据对齐,1.数据对齐是指存在处理结构体成员时,成员在内存中的起始地址编码必须是成员类型字节的整倍数。2.要以结构体中最深层的基本数据类型为准。2.权限修饰符public(公有的),接口可以被外部访问 ;private(私有的),类中成员只有被内部定义的成员函数使用;protected(保护的)...
2020-11-23 13:26:28
23
原创 Leetcode 151. 翻转字符串里的单词
原题链接class Solution {public: string reverseWords(string s) { int k = 0; for (int i = 0; i < s.size(); i ++ ) { if (s[i] == ' ') continue; int j = i, t = k; while (j < s.size() && s[j]
2020-11-23 10:49:07
31
原创 WebRTC Google的 BBR拥塞控制算法解析
正文之前,给出本文的图例:BBR的组成bbr算法实际上非常简单,在实现上它由5部分组成:1.即时速率的计算计算一个即时的带宽bw,该带宽是bbr一切计算的基准,bbr将会根据当前的即时带宽以及其所处的pipe状态来计算pacing rate以及cwnd(见下文),后面我们会看到,这个即时带宽计算方法的突破式改进是bbr之所以简单且高效的根源。计算方案按照标量计算,不再关注数据的含义。在bbr运行过程中,系统会跟踪当前为止最大的即时带宽。2.RTT的跟踪bbr之所以可以获取非常
2020-11-23 09:56:57
100
原创 LeetCode 13. 罗马数字转整数
原题链接class Solution {public: int romanToInt(string s) { int tagVal[128]; tagVal['I'] = 1; tagVal['V'] = 5; tagVal['X'] = 10; tagVal['L'] = 50; tagVal['C'] = 100; tagVal['D'] = 500; tagV
2020-11-22 20:54:49
21
原创 Leecode 136. 只出现一次的数字
原题链接解法:异或运算 A^A=0 A^0=Aclass Solution {public: int singleNumber(vector<int>& nums) { int ret = 0; for(auto p : nums) ret^=p; return ret; }};
2020-11-22 20:24:46
27
原创 Leetcode 19. 删除链表的倒数第N个节点
原题链接解法一:双指针算法class Solution {public: ListNode* removeNthFromEnd(ListNode* head, int n) { auto dummy = new ListNode(-1); dummy->next = head; auto first = dummy,second = dummy; while(n--)first=first->next; while(
2020-11-22 20:13:10
27
原创 双指针算法核心
1.双指针算法主要是为了提高朴素算法的复杂度,即O(n^2)的算法,优化为O(n)的算法。2.常见模板for (int i = 0, j = 0; i < n; i ++ ){ while (j < i && check(i, j)) j ++ ; // 具体问题的逻辑}常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作相关题目链接http
2020-11-22 18:05:13
20
原创 LeetCode 203. 移除链表元素
原题链接class Solution {public: ListNode* removeElements(ListNode* head, int val) { auto dummy = new ListNode(-1); dummy->next = head; for (auto p = dummy; p; p = p->next) { auto q = p->next; while
2020-11-21 22:49:03
13
原创 【OpenGL从入门到精通】Shader专题
详解GPU的工作流程1.shader通常称为着色器,作用是把CPU上的点渲染出来。2.shader是并行的。3.流程:数据data (顶点数据) ----->VS(输入:data的顶点数据,输出:gl_Position的 vec4 顶点数据)----->光栅化处理(显卡自动负责,把点连成生成面,其中包括一定像素)------>FS(输入:光栅器的输出的像素,输出画面);注意VS和FS点会同时被并行执行,多个点可以同时处理。最简单的Shader代码1.Vertext
2020-11-19 10:37:50
32
原创 【FFMPEG中PTS与DTS统一转换为毫秒】
对于PTS和DTS 是两个非常重要的参数,在音视频同步时是必要的,为了方便使用,将二者统一为毫秒级别static double r2d(AVRational r){ return r.den == 0 ? 0 : (double)r.num / (double)r.den;}//转换为毫秒,方便做同步AVPacket->pts * (r2d(ic->streams[pkt->stream_index]->time_base) * 1000) ...
2020-11-18 11:10:24
73
原创 【Android OpenGL ES 开发 (四)】
纹理贴图的原理1.作用:可以用来渲染视频。生成OpenGL中的纹理对象1.像素数据想要绘制出来需要先变成纹理2.创建纹理放在GPU上GLuint CreateTexture2D(unsigned char *pixelData,int width,int height,GLenum type) { GLuint texture; glGenTextures(1,&texture);//创建一个纹理对象 glBindTexture(GL_TEXTURE_2
2020-11-15 17:24:40
34
原创 【Android OpenGL ES 开发 (三)】
编译Shader代码1.封装一个编译shader的接口GLuint CompileShader(GLenum shaderType,const char *shaderCode){ GLuint shader=glCreateShader(shaderType); glShaderSource(shader,1,&shaderCode,NULL); glCompileShader(shader); GLint compileResult=GL_TRUE;
2020-11-15 15:07:53
29
原创 【Android OpenGL ES 开发 (二)】
计算出每一帧耗费的时间1.在头文件中加入time.h,cpp中实现如下计算时间接口float GetFrameTime(){ static unsigned long long lastTime=0,currentTime=0; timeval current; gettimeofday(¤t, nullptr);//取当前时间 currentTime = current.tv_sec * 1000 + current.tv_usec/100
2020-11-15 12:41:17
48
原创 【Android OpenGL ES 开发 (一)】
创建OpenGLES视口1.App窗口改成OpenGL窗口,是通过java调用C++,在以下位置修改如下内容package com.example.learnogles;import androidx.appcompat.app.AppCompatActivity;import android.content.Context;import android.opengl.GLSurfaceView;import android.os.Bundle;import android.ut
2020-11-12 12:12:00
42
原创 【Android OpenGL ES 开发 (零)】
创建符合要求的AndroidApp使用Android Studio开发,Android Studio下载地址1.先创建Native C++2.项目相关添加3.使用C++11标准学习使用JNI为Java提供API1.在cpp中定义相关接口,格式如下2.外部调用这个API把so改成自己想要的名字1.需要在cmake文件里面进行配置添加更多的cpp源文件参与编译1.首先创建一个.h文件,把所有需要的头文件都加入到此头文件2.在..
2020-11-11 19:32:11
31
原创 【音视频安卓开发 (零)】用 Android NDK 编译 FFmpeg
下载相关构建和工具链1.先下载NDKGoogle Android2.在Windows端下载使用msys2,msys2支持Linuxmsys2安装相关源,等待更新要很久.....慢慢等pacman -S mingw-w64-x86_64-toolchain然后执行以下命令安装pacman -S base-devel如果下载过慢或者不成功可以修改软件源更新源清华源中科大源修改mirrorlist.msys利用UltraEdit或者类似工具打开这mirr
2020-11-11 01:53:05
51
原创 【视频码率==文件传输大小等通用计算】
1字节(Byte)= 8位(bit),我们通常称比特为小b1千字节(KB,Kilobyte)=1024字节(2的10次方字节)(1KB=1024B),我们经常称字节为大B视频文件大小码率计算方法
2020-11-10 21:01:51
29
WebRTC音视频数据采集webserver.rar
2020-10-05
WebRTC传输速率控制
2020-10-07
1V1音视频实时互动直播系统.rar
2020-10-07
端对端1V1传输webserver.rar
2020-10-05
简单聊天室webserver.rar
2020-10-06
获取音视频设备信息webserver.rar
2020-10-05
QTopengl视频播放编程.rar
2020-09-23
Qt播放音频.rar
2020-09-23
TestOpenSL.rar
2020-09-23
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝