自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

0与1世界的黑板报!

继承前人的意志,向后人散播文明的种子

  • 博客(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从入门到精通(六)】纹理对象与纹理坐标

1.当进行纹理贴图时候,纹理的坐标。2.

2020-11-20 14:52:16 28

原创 【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

原创 【UDP协议头解析】

2020-11-16 19:29:58 21

原创 【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(&current, 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

WebRTC音视频数据采集 参考文章https://cn-yixiaonaihe.blog.csdn.net/article/details/108926316

2020-10-05

WebRTC传输速率控制

基于WebRTC的传输速率控制 相关文章https://blog.csdn.net/qq_40179458/article/details/108792757

2020-10-07

安卓初级控件开发(一)

安卓初级控件开发(一)!!!!!!!!!!

2021-01-03

Windows摄像头采集渲染

在Windows环境下采集摄像头图像,并且转换为YUV420P的图像格式进行渲染显示到屏幕上。

2020-12-30

rtspserver-master.zip

RTSP和RTP发送数据的通信

2020-12-26

Windows摄像头采集/本地文件/网络流解封装到转码

Windows摄像头采集/本地文件/网络流解封装到转码

2020-12-24

【开源项目】超级播放器1.0

【开源项目】超级播放器1.0! 超级棒!

2020-12-05

RGB_PCM数据封装.rar

基于FFmpeg将RGB与PCM经过H264压缩后封装为一体 详细细节可以查看我的相关文章!!!!!!!!!!

2020-11-02

基于FFmpeg的格式转封装.rar

基于FFmpeg的格式转封装,详细可以参考我的博客相关文章 cn-yixiaonaihe.blog.csdn.net

2020-10-29

基于QT5的原生屏幕录制程序

基于QT5的原生屏幕录制程序!!!!!!!!!!!!!!!! 可应用于视频编码!!!!!!!!!!!!!!!!!!!!

2020-10-08

WebRTC非音视频数据传输

WebRTC非音视频数据传输!!!!!!!!!!!!!!!!!! 非常有价值的东西!!!!!!!!!!!!!!!!!!!

2020-10-07

1V1音视频实时互动直播系统.rar

基于WebRTC的一对一实时音视频互动 相关参考 https://cn-yixiaonaihe.blog.csdn.net/article/details/108938355

2020-10-07

端对端1V1传输webserver.rar

webrtc 1V1端对端视频传输 参考文章 https://cn-yixiaonaihe.blog.csdn.net/article/details/108931564

2020-10-05

简单聊天室webserver.rar

基于WebRTC的聊天室 相关文章https://blog.csdn.net/qq_40179458/article/details/108929906

2020-10-06

获取音视频设备信息webserver.rar

基于WebRTC获取音视频设备。包括技术nodejs js 相关文章https://blog.csdn.net/qq_40179458/article/details/108740650

2020-10-05

Day923.rar

基于android studio 开发 使用OpenGLES库的shader变成 使用了C++ NDK

2020-09-24

QTopengl视频播放编程.rar

基础QT的OpenGL渲染YUV数据 相关技术请配合文章学习 https://blog.csdn.net/qq_40179458/article/details/106804426

2020-09-23

ImageEncodec.rar

基于FFmpeg实现将各种格式的图片编码成为H264图片编码 其中包括保存为YUV格式文件 保存为H264格式文件

2020-09-23

Qt播放音频.rar

基于QT开发的PCM音频播放器。 可以配合相关文章学习 https://blog.csdn.net/qq_40179458/article/details/106804336

2020-09-23

TestOpenSL.rar

安卓端原生OPenSLES对音频进行播放处理。 可以关注文章一起梳理流程 https://blog.csdn.net/qq_40179458/article/details/108746264

2020-09-23

librtmp.module

基于librtmp库开发的 主要包括 发送H264 发送FLV 和 接收RTMP流保存为FLV文件

2020-09-22

FFMPEG_NDK.rar

Windows下FFmpeg4.3.1 NDK编译通用脚本 支持跨平台编译

2020-09-11

身份证信息快捷读取A.rar

神思通用100型身份证读卡器 快捷键读取相关信息并输入到焦点输入位置

2019-09-26

空空如也

空空如也

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

TA关注的人 TA的粉丝

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