Leetcode Top 100 Liked Questions(序号141~189)
141. Linked List Cycle
题意:给你一个链表,判断链表有没有环
我的思路
两个指针,一个每次走两步,一个每次走一步,如果走两步的那个走到了NULL,那说明没有环,如果两个指针指向相等,说明有环
代码 Runtime7 ms Beats 91.63% Memory 8 MB Beats 67.57%
class Solution {
public:bool hasCycle(ListNode *head) {ListNode *p=head;ListNode *q=head;if(head==NULL||head->next==NULL)return 0;p=p->next;q=q->next->next;while(q!=NULL&&q!=p){p=p->next;if(q->next!=NULL)q=q->next->next;else q=q->next;}if(q==NULL)return 0;return 1;}
};
标答 简洁
原理是一样的 就是代码更简洁了
class Solution {
public:bool hasCycle(ListNode *head) {ListNode* slow=head;ListNode* fast=head;while(fast && fast->next){slow=slow->next;fast=fast->next->next;if(fast==slow)return true;}return false;}
};
142. Linked List Cycle II
题意:给一个链表,有环返回环的开始,没环返回NULL
我的思路
虽然想用快慢指针,但是不一定能返回环的开始位置,所以想了想还是用map把,第一个相同的map就是环的位置
代码 Runtime14 ms Beats 12.81% Memory 10.1 MB Beats 5.29%
class Solution {
public:ListNode *detectCycle(ListNode *head) {if(head==NULL)return NULL;unordered_map<ListNode *,int>mp;ListNode *q=head;while(q->next!=NULL){if(mp[q])return q;mp[q]++;q=q->next;} return NULL;}
};
标答 快慢指针
如果头指针为空的话,返回空;定义慢指针和快指针;
如果快指针和快指针的next不为空(否则跳出循环),那么慢指针走一步步,快指针走走两步,如果快指针等于慢指针,跳出循环;
跳出循环后,如果快指针为空或者快指针的next为空,返回NULL
这时的环的大小是慢指针走过的路程数,slow指向head时,slow和head的距离是环的长度的倍数
详见下方公式

代码 Runtime 4 ms Beats 93.5% Memory 7.6 MB Beats 51.24%
class Solution {
public:ListNode *detectCycle(ListNode *head) {if(!head) return NULL;auto slow = head, fast = head;while(fast && fast->next) {slow = slow->next;fast = fast->next->next;if(slow == fast) break;}if(!fast || !fast->next) return NULL;slow = head;while(slow != fast) {slow = slow->next;fast = fast->next;}return slow;}
};
146. LRU Cache
题意:cache容量为size,如果不停地向cache中put(key,value),如果超出容量了,就会把最长时间问访问的删除;get函数是返回key的value,同时刷新最近访问
我的思路
我记得之前牛客做过?但是忘记了
put的时候,需要有list来控制先后,最近的刷新在链表的最前,所以超过容量的时候,list的表尾删掉,put加上的时候在最前面加上,本身就有的话,刷新;因为答案里输入的是一对,所以list的数据类型是pair
get的时候,要找到key对应的结点,这个时候要用map,map和list<int>::iterator
代码 Runtime 409 ms Beats 87.32% Memory 174 MB Beats 53.92%
class LRUCache {
public:int size;unordered_map<int, list<pair<int, int> >::iterator>mp;list< pair<int,int > > li;LRUCache(int capacity) {size=capacity;}int get(int key) {if(mp.count(key)>0){pair<int,int>tmp=*mp[key];li.erase(mp[key]);//get一次刷新一次li.push_front(tmp);mp[key]=li.begin();return tmp.second;}return -1;}void put(int key, int value) {pair<int,int> tmp={key,value};if(mp.count(key) > 0){//以前就有,把以前的删掉li.erase(mp[key]);}else if(li.size()==size){//以前没有,但是满了,把最前面的删掉auto lit=li.end();lit--;pair<int,int> del=*lit;//值li.pop_back();mp.erase(del.first);//现在没了}li.push_front(tmp);//新加入的放在最前面mp[key]=li.begin();}
};
标答 没仔细看
代码 vector Runtime346 ms Beats 98.88% Memory163.8 MB Beats 97.1%
class LRUCache {
public:queue<int> LRU;vector<int> usages = vector<int>(10001, 0);vector<int> kvp = vector<int>(10001, -1);int size = 0;int cap = 0;LRUCache(int capacity) {cap = capacity;}int get(int key) {if(kvp[key] != -1){LRU.push(key);usages[key]++;}return kvp[key];}void put(int key, int value) {if(size < cap || kvp[key] != -1){if(kvp[key] == -1) size++;LRU.push(key);usages[key]++;kvp[key] = value;return;}while(usages[LRU.front()] != 1){usages[LRU.front()]--;LRU.pop();}kvp[LRU.front()] = -1;usages[LRU.front()]--;LRU.pop();LRU.push(key);usages[key]++;kvp[key] = value;}
};
148. Sort List
题意:链表升序排序
我的思路
说要nlogn,想到的有快排和归并;翻了翻标答,居然超时了,看了看数据,原来是降序排序,好吧,那就按照归并做吧
【后来想了想,快排还要倒着走,确实不太适合单向链表】
归并就是先递归左边,之后递归右边,最后归并
数组我会,但是链表怎么做呢
标答
首先定义prev指针,快指针和慢指针,之后让慢指针到链表二分之一的位置,快指针在NULL之前,prev在slow指针的前面;之后prev->next=NULL,使他彻底变成两条指针
递归第一条链表和第二条链表,直到head==NULL或者head->next==NULL 返回head指针;
最后把这两个head指针的链表合起来,合并也是用递归合并;如果l1的值小于l2的值,合并(l1->next,l2)【因为要从小到大排序,所以要留下小的值,让后面的值去比较
代码 Runtime 127 ms Beats 99.16% Memory 53.2 MB Beats 79.49%
class Solution {
public:ListNode* sortList(ListNode* head) {if(head==NULL||head->next==NULL)return head;ListNode* prev=NULL;ListNode* slow=head;ListNode* fast=head;while(fast!=NULL&&fast->next!=NULL){prev=slow;slow=slow->next;fast=fast->next->next;}prev->next=NULL;ListNode* l1=sortList(head);ListNode* l2=sortList(slow);return merge(l1,l2);}ListNode* merge(ListNode* l1,ListNode* l2){//合并递归if(l1==NULL)return l2;if(l2==NULL)return l1;if(l1->val<l2->val){l1->next=merge(l1->next,l2);return l1;}else {l2->next=merge(l1,l2->next);return l2;}}
};
152. Maximum Product Subarray
题意:最大子段积
我的思路
动态规划?但是有负数欸;看提示,是前缀积?先来个O(n^2)
但是普通的前缀积不太行,因为有0;算了,现在个最暴力的O(n^2)----->TLE了
class Solution {
public:int maxProduct(vector<int>& nums) {ios::sync_with_stdio(false);cin.tie(0);int n=nums.size(),maxx=nums[0];if(n==1)return nums[0];for(int i=0;i<n;i++){int pro=1;for(int j=i;j<n;j++){pro=pro*nums[j];maxx=max(maxx,pro);}}return maxx;}
};
标答 动态规划
首先定义了min和max,如果这个数是负数,就把max和min交换一下,之后更新max和min和ans
代码 Runtime3 ms Beats 92.63% Memory13.8 MB Beats 23.8%
class Solution {
public:int maxProduct(vector<int>& nums) {int n=nums.size();int maxx=nums[0],minn=nums[0],ans=nums[0];for(int i=1;i<n;i++){if(nums[0]<0)swap(maxx,minn);minn=min(minn*nums[i],nums[i]);//和nums[i]作比较maxx=max(maxx*nums[i],nums[i]);//表示的是以i为右端点的最大or最小值ans=max(ans,maxx);}return ans;}
};
153. Find Minimum in Rotated Sorted Array
题意:数组被rotate了1到n次,以logn的时间复杂度返回最小的数字
我的思路
其实循环On也能 Runtime0 ms Beats 100% Memory10.1 MB Beat 93.66%
class Solution {
public:int findMin(vector<int>& nums) {int minn=5001;for(int i=0;i<nums.size();i++)minn=min(minn,nums[i]);return minn;}
};
但是logn的话,那就二分,如果用归并的想法,都切成2个2个的,最后返回最小的
但是这没有用到rotate的部分,也不知道是不是logn
好像不是【因为a=2,b=2,f(n)=1,所以复杂度为n】

Runtime0 ms Beats 100% Memory 10.1 MB Beats 93.66%
class Solution {
public:int fi(vector<int>& nums,int l,int r){if(l>=r)return nums[l];int mid=l+(r-l)/2;return min(fi(nums,l,mid),fi(nums,mid+1,r));}int findMin(vector<int>& nums) {int n=nums.size();return fi(nums,0,n-1);}
};
标答
因为题中的rotate是把数组分成两个部分,这两个部分交换的意思
例如 0 1 2 3 4 5 7--->3 4 5 7 0 1 2这样的纯交换,所以虽然看上去递归两次,其实只要递归一边
为什么这个是logn?
- At each level, at least one side could be done in
O(1).T(N) = O(1) + T(N/2) = O(\log{N})
代码 Runtime0 ms Beats 100% Memory10.1 MB Beats 51.34%
class Solution {
public:int fi(vector<int>& nums,int l,int r){if(l>=r)return nums[l];if(nums[l]<nums[r])return nums[l];int mid=l+(r-l)/2;return min(fi(nums,l,mid),fi(nums,mid+1,r));}int findMin(vector<int>& nums) {int n=nums.size();return fi(nums,0,n-1);}
};
155. Min Stack
题意:建立一个栈,它有正常的栈都有的功能,就是多了一个getmin的函数,求当前剩下的数字中最小的那个
我的思路
如果是普通的栈的话stack和vector都可以,但是如何getmin?
先On试试
代码 Runtime 200 ms Beats 5.2% Memory 16.4 MB Beats 25.58%
class MinStack {
public:vector<long long>v;MinStack() {}void push(int val) {v.push_back(val);}void pop() {v.pop_back();}int top() {return v[v.size()-1];}int getMin() {long long minn=-9999999999999999999;for(int i=0;i<v.size();i++)minn=min(minn,v[i]);return minn;}
};
标答 单调栈
创建两个栈,一个是正常的栈,一个是专门存放最小值的栈
为什么不会存在pop正常栈的值(第二小的值),再pop正常栈的值(第一小的值),再getmin为什么不会出现第二小的值?
因为存放最小值的栈是单调栈,只会存放当前数的右边比它更小的值
代码 Runtime17 ms Beats 85.63% Memory16.1 MB Beats 92.4%
class MinStack {
public:stack<int> st;stack<int> mi;void push(int val) {st.push(val);if(mi.empty()||mi.top()>=val)mi.push(val);//注意这里是等于}void pop() {if(mi.top()==st.top())mi.pop();st.pop();}int top() {return st.top();}int getMin() {return mi.top();}
};
160. Intersection of Two Linked Lists
题意:返回两条链表的交点,如果没有交点返回NULL
我的思路
用map做
代码 Runtime 67 ms Beats 15.53% Memory 21.2 MB Beats 5.5%
class Solution {
public:map<ListNode *,bool>mp;ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if(headA==NULL||headB==NULL)return NULL;ListNode *p=headA;ListNode *q=headB;while(p!=NULL&&q!=NULL){if(mp[p])return p;else mp[p]=1;if(mp[q])return q;else mp[q]=1;p=p->next;q=q->next;}while(p!=NULL){if(mp[p])return p;else mp[p]=1;p=p->next;}while(q!=NULL){if(mp[q])return q;else mp[q]=1;q=q->next;}return NULL;}
};
标答
设p是headA,q是headB,两个指针p和q一起向前走,当有一个指针(假设是p)指向空的时候,这个指针p来到q的起始位置,当q指向空的时候,q来到p的起始位置;这时,两者的起始到空的位置都是一样的了
一般来说,位置交换只要双方来一次就可以完成了
代码 Runtime 32 ms Beats 93.83% Memory14.6 MB Beats 33.15%
class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode *p=headA;ListNode *q=headB;while(p!=q){if(p==NULL)p=headB;else p=p->next;if(q==NULL)q=headA;else q=q->next;}return p;}
};
169. Majority Element
题意:给定一个数组,返回众数
我的思路
用map
好吧,看了标答才注意到,这样只要大于n/2就可以return了
The majority element is the element that appears more than ⌊n / 2⌋ times.
代码 Runtime12 ms Beats 81.64% Memory19.8 MB Beats 6.3%
class Solution {
public:int majorityElement(vector<int>& nums) {ios::sync_with_stdio(false);cin.tie(0);pair<int,int>maxx={0,0}; map<int,int>mp;for(int i=0;i<nums.size();i++){mp[nums[i]]++;if(mp[nums[i]]>maxx.second)maxx={nums[i],mp[nums[i]]};}return maxx.first;}
};
标答 摩尔投票法
因为要求的是绝对众数,所以可以用摩尔投票法,简而言之就是初始化can为第一个被提名人,cnt为票数,当有一个人被提名且不是can,那么cnt--;因为绝对众数,所以绝对众数的票全部给其他人抵消了还会剩下多的
代码 Runtime 5 ms Beats 98.86% Memory19.9 MB Beats 6.3%
class Solution {
public:int majorityElement(vector<int>& nums) {ios::sync_with_stdio(0);int can=0,cnt=0;int n=nums.size();for(int i=0;i<n;i++){if(cnt==0) can=nums[i];if(can==nums[i])cnt++;else cnt--;}return can;}
};
拓展摩尔投票
算法学习笔记(78): 摩尔投票 - 知乎 (zhihu.com)

189. Rotate Array
题意:

- Try to come up with as many solutions as you can. There are at least three different ways to solve this problem.
- Could you do it in-place with
O(1)extra space?
我的思路
重新开一个空间
代码 Runtime19 ms Beats 90.37% Memory26.4 MB Beats 5.92%
class Solution {
public:void rotate(vector<int>& nums, int k) {vector<int> v;int n=nums.size();k=k%n;for(int i=0;i<k;i++)v.push_back(nums[n-k+i]);for(int i=0;i<n-k;i++)v.push_back(nums[i]);nums=v;}
};
标答
只能说其实如此
eg 1 3 4 5 6 8 9,k=5
第一次reverse:3 1 4 5 6 8 9
第二次reverse:3 1 9 8 6 5 4
第三次reverse:4 5 6 8 9 1 3
代码 Runtime18 ms Beats 92.46% Memory 25 MB Beats 65.31%
class Solution {
public:void rotate(vector<int>& nums, int k) {int n=nums.size(); k=k%n;reverse(nums.begin(),nums.end()-k);reverse(nums.begin()+n-k,nums.end());reverse(nums.begin(),nums.end());}
};相关文章:
Leetcode Top 100 Liked Questions(序号141~189)
141. Linked List Cycle 题意:给你一个链表,判断链表有没有环 我的思路 两个指针,一个每次走两步,一个每次走一步,如果走两步的那个走到了NULL,那说明没有环,如果两个指针指向相等&…...
网络编程day3-FTP客户端项目
FTP协议 FTP 的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条 TCP 连接,一条是数据连接,用于数据传送;另一条是控制连接,用于传送控制信息(命令和响应)&…...
音频母带制作::AAMS V4.0 Crack
自动音频母带制作简介。 使用 AAMS V4 让您的音乐听起来很美妙! 作为从事音乐工作的音乐家,您在向公众发布材料时需要尽可能最好的声音,而为所有音频扬声器系统提供良好的商业声音是一项困难且耗时的任务。AI掌握的力量! 掌控您…...
【SpringCloud】SpringCloud整合openFeign
文章目录 前言1. 问题分析2. 了解Feign3. 项目整合Feign3.1 引入依赖3.2 添加注解3.3 编写Feign客户端3.4 测试3.5 总结 4. 自定义配置4.1 配置文件方式4.2 Java代码方式 5. Feign使用优化5.1 引入依赖5.2 配置连接池 6. Feign最佳实践6.1 继承方式6.2 抽取方式 前言 微服务远…...
成集云 | 飞书审批同步金蝶云星空 | 解决方案
源系统成集云目标系统 方案介绍 飞书员工报销审批通过后,审批单据内容和审批状态实时同步金蝶云星空 飞书是字节跳动于2016年自研的新一代一站式协作平台,将即时沟通、日历、云文档、云盘和工作台深度整合,通过开放兼容的平台,…...
【计算机组成 课程笔记】3.2 算数运算和逻辑运算的硬件实现
课程链接: 计算机组成_北京大学_中国大学MOOC(慕课) 3 - 2 - 302-门电路的基本原理(11-39--)_哔哩哔哩_bilibili 现代计算机的CPU和其他很多功能部件都是基于晶体管的集成电路,想要了解计算机组成的基本原理,还是需要有…...
python元组的不可变性和应用场景
Python元组是一种不可变的数据类型,也就是说一旦创建后,其元素无法被修改、添加或删除。元组使用圆括号来表示,元素之间使用逗号进行分隔。 以下是创建和访问元组的方法和语法: 创建元组: 使用圆括号直接创建ÿ…...
配置化开发的核心设计 - Schema
前端配置化SchemaServerless FaaS BaaS useImperativeHandle() react-helmet 参考链接 schema进入...
HTTP协议概述
HTTP 协议定义 HTTP协议,直译为超文本传输协议,是一种用于分布式、协作、超媒体的信息系统的应用协议。HTTP协议是万维网数据通信的基础。HTTP协议在客户端-服务器计算模型中充当请求-响应协议。客户端向服务器提交HTTP请求消息。服务器提供HTML文件和其…...
fastjson2 打开 AutoType
1. 功能简介 FASTJSON支持AutoType功能,这个功能在序列化的JSON字符串中带上类型信息,在反序列化时,不需要传入类型,实现自动类型识别。 2. AutoType安全机制介绍 必须显式打开才能使用。和fastjson 1.x不一样,fast…...
封装(个人学习笔记黑马学习)
1、格式 #include <iostream> using namespace std;const double PI 3.14;//设计一个圆类,求圆的周长 class Circle {//访问权限//公共权限 public://属性//半径int m_r;//行为//获取圆的周长double calculateZC() {return 2 * PI * m_r;} };int main() {//通…...
PyTorch 模型性能分析和优化 - 第 3 部分
这[1]是关于使用 PyTorch Profiler 和 TensorBoard 分析和优化 PyTorch 模型主题的系列文章的第三部分。我们的目的是强调基于 GPU 的训练工作负载的性能分析和优化的好处及其对训练速度和成本的潜在影响。特别是,我们希望向所有机器学习开发人员展示 PyTorch Profi…...
【力扣每日一题】2023.9.1 买钢笔和铅笔的方案数
目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目给我们三个数,一个是我们拥有的钱,一个是钢笔的价格,另一个是铅笔的价格。 问我们一共有几种买笔…...
实现不同局域网间的文件共享和端口映射,使用Python自带的HTTP服务
文章目录 1. 前言2. 本地文件服务器搭建2.1 python的安装和设置2.2 cpolar的安装和注册 3. 本地文件服务器的发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 数据共享作为和连接作为互联网的基础应用,不仅在商业和办公场景有广泛的应用…...
Kubernetes技术--k8s核心技术Pod
(1).概述 Pod 是 k8s 系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型。 k8s不会直接处理容器,而是 Pod,Pod 是由一个或多个 container 组成。 一个pod中的容器共享网络命名空间。 Pod是一个短暂存在的。 (2).为什么k8s中最小单元是…...
基于Springboot实现的Echarts图表
概述 ECharts是百度开源的一个前端组件。它是一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等)&…...
adb server version (41) doesn‘t match this client (39)
异常: adb server version (41) doesnt match this client (39); killing... ADB server didnt ACK安装ADB后:查看版本 $ adb version Android Debug Bridge version 1.0.39 Version 1:8.1.1-1r23-5.4-1eagle Installed as /usr/lib/android-sdk/platf…...
B080-RabbitMQ
目录 RabbitMQ认识概念使用场景优点AMQP协议JMS RabbitMQ安装安装elang安装RabbitMQ安装管理插件登录RabbitMQ消息队列的工作流程 RabbitMQ常用模型HelloWorld-基本消息模型生产者发送消息导包获取链接工具类消息的生产者 消费者消费消息模拟消费者手动签收消息 Work QueuesSen…...
关于岛屿的三道leetcode原题:岛屿周长、岛屿数量、统计子岛屿
题1:岛屿周长 给定一个 row x col 的二维网格地图 grid ,其中:gridi 1 表示陆地, gridi 0 表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰…...
lintcode 1081 · 贴纸拼单词【hard 递归+记忆化搜索才能通过】
题目 https://www.lintcode.com/problem/1081/ 给出N种不同类型的贴纸。 每个贴纸上都写有一个小写英文单词。 通过裁剪贴纸上的所有字母并重排序来拼出字符串target。 每种贴纸可以使用多次,假定每种贴纸数量无限。 拼出target最少需要多少张贴纸?如果…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

