<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[agentky的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/agentky</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; agentky]]></copyright><item><title><![CDATA[计算算法的运行时间，精确到us（c、window、vs2019）]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/123096799</link><guid>https://blog.youkuaiyun.com/agentky/article/details/123096799</guid><author>agentky</author><pubDate>Wed, 23 Feb 2022 18:51:11 +0800</pubDate><description><![CDATA[#include&lt;stdio.h&gt;
#include &lt;windows.h&gt;
#include &lt;iostream&gt;
#include &lt;thread&gt;
#include&lt;ctime&gt;
//计时部分初始化
double run_time;
_LARGE_INTEGER time_start;  //开始时间
_LARGE_INTEGER time_over;   //结束时间
double dqFreq;      //计时器频率
LARGE_IN]]></description><category></category></item><item><title><![CDATA[c++ 三个线程轮流打印ABC]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/119956957</link><guid>https://blog.youkuaiyun.com/agentky/article/details/119956957</guid><author>agentky</author><pubDate>Fri, 27 Aug 2021 17:04:55 +0800</pubDate><description><![CDATA[#include&lt;iostream&gt;
#include&lt;thread&gt;
using namespace std;
#include&lt;condition_variable&gt;
condition_variable cv;
mutex m;
int flag = 0;

void fun_a()
{
	unique_lock&lt;mutex&gt; lk(m);
	cout &lt;&lt; "fun_a" &lt;&lt; endl;
	int count = 0;
	wh]]></description><category></category></item><item><title><![CDATA[算法合集（图片上不来）]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/119729250</link><guid>https://blog.youkuaiyun.com/agentky/article/details/119729250</guid><author>agentky</author><pubDate>Mon, 16 Aug 2021 11:38:01 +0800</pubDate><description><![CDATA[设计模式
单例模式
它的核心结构只包含一个被称为单例的特殊类。它的目的是保证一个类仅有一个实例，并提供一个访问它的全局访问点，该实例被所有程序模块共享。
有很多地方都需要这样的功能模块，如系统的日志输出，操作系统只能有一个窗口管理器，一台PC连接一个键盘等。
核心：

全局只有一个实例：static 特性，同时禁止用户自己声明并定义实例（把构造函数设为 private）
线程安全（可以通过加锁实现，但用局部静态变量更好）
禁止赋值和拷贝
用户通过接口获取实例：使用 static 类成员函数
避免内存泄漏（可]]></description><category></category></item><item><title><![CDATA[数据结构与算法-TOP-k问题]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/119153702</link><guid>https://blog.youkuaiyun.com/agentky/article/details/119153702</guid><author>agentky</author><pubDate>Tue, 27 Jul 2021 21:26:07 +0800</pubDate><description><![CDATA[TOP-k 问题
这道题如果要求时间复杂度优先可以考虑快排变形，如果空间复杂度优先，可以使用堆排。
下面给出了三种方法，第一种自己实现了一个堆结构，第二种用的stl的优先队列，第三种用了快排模板的变形。
堆的解决方法虽然速度不一定有快排快，但对于海量数据，本地不需要存储那么多数据
方法1：手写堆
class Solution {
public:
    vector&lt;int&gt; smallestK(vector&lt;int&gt;&amp; arr, int k) 
    {
       .]]></description><category></category></item><item><title><![CDATA[数据结构与算法-归并排序模板记忆]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/119144957</link><guid>https://blog.youkuaiyun.com/agentky/article/details/119144957</guid><author>agentky</author><pubDate>Tue, 27 Jul 2021 15:25:06 +0800</pubDate><description><![CDATA[​    通过递归的方式将大的数组一直分割，直到数组的大小为 1，此时只有一个元素，那么该数组就是有序的了，之后再把两个数组大小为1的合并成一个大小为2的，再把两个大小为2的合并成4的 … 直到全部小的数组合并起来。
整体的思想是分治，即先使每个子序列有序，再使子序列段间有序
将数组元素拆分成个体，然后两两合并成一组，以此类推
递归注意结束条件、递归公式
先递归，再合并
1.完成数组拆分，直到拆成单个元素
2.完成两个分别有序子序列合并得功能函数
#include&lt;iostream&gt;
using]]></description><category></category></item><item><title><![CDATA[数据结构与算法-快速排序模板记忆]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/119138619</link><guid>https://blog.youkuaiyun.com/agentky/article/details/119138619</guid><author>agentky</author><pubDate>Tue, 27 Jul 2021 11:18:10 +0800</pubDate><description><![CDATA[快排的边界问题太容易出错了，所以写一个模板背下来
分析：
1.选一个哨兵 这里选x = nums[left + right &gt;&gt; 1];这个哨兵最好不要随意改变，要么容易出现边界问题要么容易超时.
2.快排的核心是分治 即将一个序列左部分小于等于x  右部分大于等于x
3.设置两个指针left right 分别从两端开始，left遇到大于等于x的停下来，right遇到小于等于x的停下来，然后如果i&lt;j 就交换nums[i] nums[j]
void quick_sort(int nums[]]></description><category></category></item><item><title><![CDATA[数据结构与算法-堆排序]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/119121169</link><guid>https://blog.youkuaiyun.com/agentky/article/details/119121169</guid><author>agentky</author><pubDate>Tue, 27 Jul 2021 00:16:12 +0800</pubDate><description><![CDATA[堆的特点： 完全二叉树+父节点值大于子节点
完全二叉树的重要性质： 将完全二叉树的节点按照层序遍历的顺序依次输入到一个数组中，那么任意一个子节点和父节点在数组中的索引有如下数量关系
parent=(i-1)/2
c1=2i+1//左孩子
c2=2i+2//右孩子

核心思想：输入一个乱序数组，将他按照层序遍历的顺序逐个填成一个完全二叉树，然后把这棵完全二叉树变成一个大根堆，然后得到当前的最大值，交换到数组的末尾，然后再重复操作，又搞成一个大根堆。再次交换，重复上述过程直到所有元素都排好序。
整体步骤分三步.]]></description><category></category></item><item><title><![CDATA[回溯算法模板总结+力扣原题解析]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/118892109</link><guid>https://blog.youkuaiyun.com/agentky/article/details/118892109</guid><author>agentky</author><pubDate>Tue, 20 Jul 2021 10:29:14 +0800</pubDate><description><![CDATA[回溯算法复杂度分析
回溯本质是遍历所有可能的情况，所以复杂度会比较高，但可以通过剪枝来优化。
子集问题：由于每个元素只有选择或者不选两种，所以遍历到每一种情况，时间复杂度为O(2^n),再加上构造的每一组子集都需要放入数组，需要o(n),所以总共O（n * 2^n）.空间复杂度，递归深度n,系统栈所用空间O(n)；
排列问题：时间复杂度O(N!)，第一层n个分枝，第二层每个分支又有n-1分支。所以nn-1n-1…*1=n!，空间复杂度O(N)
组合问题：组合问题就是一种子集问题（组合一般限制元素个数）
回溯]]></description><category></category></item><item><title><![CDATA[平分物品（网易2021校招笔试提前批）(dfs)]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/118727027</link><guid>https://blog.youkuaiyun.com/agentky/article/details/118727027</guid><author>agentky</author><pubDate>Wed, 14 Jul 2021 14:32:30 +0800</pubDate><description><![CDATA[题目：
现在有n个物品，每一个物品都有一个价值，现在想将这些物品分给两个人，要求这两个人每一个人分到的物品的价值总和相同（个数可以不同，总价值相同即可），剩下的物品就需要扔掉，现在想知道最少需要扔多少价值的物品才能满足要求分给两个人。

这道题我认为是选择问题  通过dfs每一种可能的选择，找到所有可能的解法
题意转换
​     将题意转换很重要，题目是求最少丢掉多少物品能够平分给两个人，转换为两个人从0开始拿，计算出所有满足平分条件的最值（最少丢弃）
具体步骤

首先将题目转换为两个人从0开始拿物品，对]]></description><category></category></item><item><title><![CDATA[基于ffmpeg和SDL的音视频播放器]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/117406354</link><guid>https://blog.youkuaiyun.com/agentky/article/details/117406354</guid><author>agentky</author><pubDate>Sun, 30 May 2021 22:10:48 +0800</pubDate><description><![CDATA[基于ffmpeg和SDL的音视频播放器
花了挺长时间给代码加了超级详细的注释
实现的功能：音视频同步播放
一.播放器的多线程模型
本文从播放器的多线程的模型开始分析播放器的源码
1.主线程
我们的设计思路是主线程不添加过多的业务逻辑，专注于SDL事件的响应，提高用户的响应速度
​	首先要介绍一个超级重要的结构体VidoeState，这里面存放了视频文件的信息（上下文、解码器、各种参数等）和写代码过程中要使用的数据结构（队列、index、锁等），这个结构体要作为函数参数把各个线程串起来。
主线程首先做了一些初]]></description><category></category></item><item><title><![CDATA[数据结构与算法-- 排序]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/115454516</link><guid>https://blog.youkuaiyun.com/agentky/article/details/115454516</guid><author>agentky</author><pubDate>Tue, 06 Apr 2021 22:14:23 +0800</pubDate><description><![CDATA[快速排序
核心思想：
参考链接
https://developer.51cto.com/art/201403/430986.htm
/*1．先从数列中取出一个数作为基准数。
1.1 直接取第一个元素
2．分区过程，将比这个数大的数全放到它的右边，小于或等于它的数全放到它的左边。
2.1  两个指针i,j分别指向头尾，相向而行。先移动j,直到j找到一个小于等于基准数的，i找到一个大于基准数的，交换他们。
2.2  继续2.2  直到i=j ，交换这个位置和首元素
3．再对左右区间重复第二步，直到各区间只有一个]]></description><category></category></item><item><title><![CDATA[数据结构与算法--二分查找]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/115427842</link><guid>https://blog.youkuaiyun.com/agentky/article/details/115427842</guid><author>agentky</author><pubDate>Sun, 04 Apr 2021 14:55:43 +0800</pubDate><description><![CDATA[核心思想：一般查找有序序列中的某个元素可以采用二分查找
基本公式：mid=1+(R-L)/2
求开方
69. Sqrt(x) (Easy)
题目描述
给定一个非负整数，求它的开方，向下取整。
输入输出样例
输入一个整数，输出一个整数。
Input: 8
Output: 2
8 的开方结果是 2:82842:::，向下取整即是 2。
核心思想：while结束的条件为L&gt;R,初始L为0，R为a，mid为1+(R-L)/2 ，sqrt为a/mid;若sqrt大于mid，则将L赋值为mid+1,若sqrt小于]]></description><category></category></item><item><title><![CDATA[数据结构算法---双指针]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/115054150</link><guid>https://blog.youkuaiyun.com/agentky/article/details/115054150</guid><author>agentky</author><pubDate>Sun, 21 Mar 2021 20:51:49 +0800</pubDate><description><![CDATA[算法核心思想：
双指针多用于遍历数组，可以同时遍历一个数组或分别遍历不同的数组。常见的设计思想如下：
对于排序后的数组，双指针分别指向数组的头尾，遍历方向相反，用于搜索。
双指针指向两个数组，分别遍历
快慢指针
滑动窗口
两数之和
167. Two Sum II - Input array is sorted (Easy)
题目描述
在一个增序的整数数组里找到两个数，使它们的和为给定值。已知有且只有一对解。
输入输出样例
输入是一个数组（numbers）和一个给定值（target）。输出是两个数的位置，从 ]]></description><category></category></item><item><title><![CDATA[数据算法---贪心算法]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/114821941</link><guid>https://blog.youkuaiyun.com/agentky/article/details/114821941</guid><author>agentky</author><pubDate>Mon, 15 Mar 2021 11:16:19 +0800</pubDate><description><![CDATA[算法核心思想
采用贪心的策略，保证每次操作都是局部最优的，最终达到全局最优。
分配问题
455. Assign Cookies (Easy)
题目描述
有一群孩子和一堆饼干，每个孩子有一个饥饿度，每个饼干都有一个大小。每个孩子只能吃
最多一个饼干，且只有饼干的大小大于孩子的饥饿度时，这个孩子才能吃饱。求解最多有多少孩
子可以吃饱。
输入输出样例
输入两个数组，分别代表孩子的饥饿度和饼干的大小。输出最多有多少孩子可以吃饱的数
量。
Input: [1,2], [1,2,3]
Output: 2
思路：在这个样]]></description><category></category></item><item><title><![CDATA[操作系统复习]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/114266123</link><guid>https://blog.youkuaiyun.com/agentky/article/details/114266123</guid><author>agentky</author><pubDate>Sat, 06 Mar 2021 20:33:33 +0800</pubDate><description><![CDATA[一.操作系统
1.进程与线程的区别？
一个进程由PCB（进程控制块）、数据段、代码段组成，进程本身不可以运行程序，而是像一个容器一样，先创建出一个主线程，分配给主线程一定的系统资源，这时候就可以在主线程开始实现各种功能。当我们需要实现更复杂的功能时，可以在主线程里创建多个子线程，跟人多好干活的道理一样，多个线程在同一个进程里，利用这个进程所拥有的系统资源合作完成某些功能。
2.同一进程的多线程中哪些是独有的，哪些的共享的？
独有：栈（但没有保护机制，只要栈上的指针被别的线程拿到，就可被修改）、局部变量、寄存]]></description><category></category></item><item><title><![CDATA[ffmpeg实现简单的音频编码]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/112315666</link><guid>https://blog.youkuaiyun.com/agentky/article/details/112315666</guid><author>agentky</author><pubDate>Thu, 07 Jan 2021 15:49:10 +0800</pubDate><description><![CDATA[音频使用的不多，大致流程跟视频编码差不多
#include &lt;stdint.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

#include &lt;libavcodec/avcodec.h&gt;

#include &lt;libavutil/channel_layout.h&gt;
#include &lt;libavutil/common.h&gt;
#include &lt;libavutil/frame.h&gt;
#in]]></description><category></category></item><item><title><![CDATA[ffmpeg实现简单视频解码（将视频文件分解为单张RGB图片）]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/112296006</link><guid>https://blog.youkuaiyun.com/agentky/article/details/112296006</guid><author>agentky</author><pubDate>Wed, 06 Jan 2021 21:37:49 +0800</pubDate><description><![CDATA[参考链接
官网
https://ffmpeg.org/doxygen/3.4/decode_video_8c-example.html
https://blog.youkuaiyun.com/u014162133/article/details/81131339
核心流程及API
//处理输入
/* register all formats and codecs */
av_register_all();
/* open input file, and allocate format context */
avform]]></description><category></category></item><item><title><![CDATA[ffmpeg  实现初步视频编码]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/111950150</link><guid>https://blog.youkuaiyun.com/agentky/article/details/111950150</guid><author>agentky</author><pubDate>Wed, 30 Dec 2020 11:18:38 +0800</pubDate><description><![CDATA[参考资料
编解码API详解（这个博主写的还挺多，有时间可以看看）
https://www.cnblogs.com/leisure_chn/p/10584925.html
官网demo
http://ffmpeg.org/doxygen/trunk/encode__video_8c_source.html
直接上代码吧
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;libavc]]></description><category></category></item><item><title><![CDATA[ffmpeg实现两个文件的音频、视频流抽取与合成（小咖秀）]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/111908706</link><guid>https://blog.youkuaiyun.com/agentky/article/details/111908706</guid><author>agentky</author><pubDate>Tue, 29 Dec 2020 14:36:14 +0800</pubDate><description><![CDATA[整体思路简要分析
1.初始化准备工作
分别打开文件  探测信息给AVstream等一些空白参数赋值
avformat_open_input
avformat_find_stream_info
创建输出上下文
根据文件名分配合适的输出文件AVFormatContext 管理结构
avformat_alloc_output_context2
寻找第一个视频中最好的音频流和第二个文件中最好的视频流，并返回流的索引
av_find_best_stream
2.准备输出内容
创建音频输出流（视频同理）
avforma]]></description><category></category></item><item><title><![CDATA[ffmpeg知识整理]]></title><link>https://blog.youkuaiyun.com/agentky/article/details/111898647</link><guid>https://blog.youkuaiyun.com/agentky/article/details/111898647</guid><author>agentky</author><pubDate>Tue, 29 Dec 2020 13:15:19 +0800</pubDate><description><![CDATA[一：ffmpeg的模型
1：转码模型
转码基本流程：flv格式数据–&gt;h264/aac数据–&gt;yuv/pcm数据–&gt;h264/aac数据–&gt;mp4格式数据。
a：我们把flv格式数据或者mp4格式数据这一层叫做mux/demux层或者复用层有些人习惯于叫做封装层，这里叫做mux/demux层下面同理。
b：我们把h264/aac数据这一层叫做编解码层或者codec/decode，这里叫做codec/decode层下面同理。
c：我们把yuv/pcm数据这一层叫做原始数据层或者Raw ]]></description><category></category></item></channel></rss>