LeetCodehot 力扣热题100 全排列
这段代码的目的是计算给定整数数组的所有全排列(permutations),并返回一个包含所有排列的二维数组。
思路解析
在这段代码中,采用了 深度优先搜索(DFS) 和 回溯 的方法来生成所有的排列。
关键步骤:
1. 回溯:我们通过交换数组中的元素,将数组的每个元素依次放置到每个位置,生成所有的排列组合。
2. 递归:每次递归处理当前索引位置的元素,继续处理下一个位置,直到递归到数组的末尾,表示完成一个排列。
3. 交换回溯:在每次递归后,通过交换操作还原数组的顺序,避免对后续递归产生影响。
代码解析
class Solution {public:vector<vector<int>> ans; // 用于存储所有的排列vector<vector<int>> permute(vector<int>& nums) {dfs(nums, 0); // 从数组的第一个位置开始深度优先搜索return ans; // 返回所有的排列}void dfs(vector<int>& nums, int n) {// 如果当前的索引等于数组的长度,说明已经形成了一个排列if (n == nums.size()) {ans.push_back(nums); // 将当前排列加入结果集中return;}// 遍历当前索引位置后的所有元素for (int i = n; i < nums.size(); i++) {swap(nums[i], nums[n]); // 将第 i 个元素与第 n 个元素交换dfs(nums, n + 1); // 递归处理下一个位置swap(nums[i], nums[n]); // 交换回去,恢复原数组状态(回溯)}}};
详细注释
1. vector<vector<int>> ans;:
• 用于存储所有的排列组合。
2. vector<vector<int>> permute(vector<int>& nums):
• permute 是主函数,接受一个整数数组 nums 作为输入,返回一个包含所有排列的二维数组。
• dfs(nums, 0) 从 nums 的第 0 个位置开始深度优先搜索。
3. void dfs(vector<int>& nums, int n):
• dfs 是深度优先搜索的核心函数,负责递归生成排列。
• nums 是待排列的数组,n 是当前递归处理的索引位置。
4. if (n == nums.size()):
• 如果当前的索引 n 等于数组的大小,说明已经将所有元素排列完毕,形成了一个有效的排列。
• ans.push_back(nums) 将当前的排列(即 nums 数组的状态)加入结果集 ans。
5. for (int i = n; i < nums.size(); i++):
• 遍历当前索引 n 之后的每一个元素,通过交换生成不同的排列。
6. swap(nums[i], nums[n]);:
• 交换 nums[i] 和 nums[n],将 nums[i] 放到当前的位置 n。这样可以生成一个新的排列组合。
7. dfs(nums, n + 1):
• 递归调用 dfs,将处理下一个位置的元素。即当前元素已放置好,继续处理下一个索引。
8. swap(nums[i], nums[n]);:
• 交换回去,恢复原数组状态,这样可以进行下一轮的排列生成(即回溯)。这是为了确保后续的排列生成不会受到之前交换的影响。
好的,接下来我会详细地继续补充并完成整个 深度优先搜索(DFS) 和 回溯 的运行步骤,直到所有排列都生成完毕。
输入数组:
nums = [1, 2, 3]
运行步骤:
我们通过 DFS 和回溯的方法生成 nums 数组的所有排列。
初始状态:
• 输入:nums = [1, 2, 3]
• ans = [](最终存储所有排列的结果)
第 1 层递归:n = 0 (处理第一个位置)
• 当前节点的起始值是 nums = [1, 2, 3],n = 0,遍历 i = 0 到 i = 2。
1. 第 1 次交换:swap(nums[0], nums[0]),数组未变,仍为 [1, 2, 3]。
• 递归调用 dfs(nums, 1),进入处理第二个位置。
第 2 层递归:n = 1 (处理第二个位置)
• 当前节点的起始值是 nums = [1, 2, 3],n = 1,遍历 i = 1 到 i = 2。
1. 第 1 次交换:swap(nums[1], nums[1]),数组未变,仍为 [1, 2, 3]。
• 递归调用 dfs(nums, 2),进入处理第三个位置。
第 3 层递归:n = 2 (处理第三个位置)
• 当前节点的起始值是 nums = [1, 2, 3],n = 2,遍历 i = 2 到 i = 2(只剩下一个位置)。
1. 第 1 次交换:swap(nums[2], nums[2]),数组未变,仍为 [1, 2, 3]。
• 递归调用 dfs(nums, 3),这时 n == nums.size(),说明当前排列已经完成。
2. 将 [1, 2, 3] 加入到 ans 中。
• ans = [[1, 2, 3]]
回溯:恢复状态
• 交换回去,恢复原数组 [1, 2, 3]。
• 返回到 n = 1,继续处理 i = 2。
2. 第 2 次交换:swap(nums[1], nums[2]),数组变为 [1, 3, 2]。
• 递归调用 dfs(nums, 2),进入处理第三个位置。
第 3 层递归:n = 2 (处理第三个位置)
• 当前节点的起始值是 nums = [1, 3, 2],n = 2,遍历 i = 2 到 i = 2(只剩下一个位置)。
1. 第 1 次交换:swap(nums[2], nums[2]),数组未变,仍为 [1, 3, 2]。
• 递归调用 dfs(nums, 3),这时 n == nums.size(),说明当前排列已经完成。
2. 将 [1, 3, 2] 加入到 ans 中。
• ans = [[1, 2, 3], [1, 3, 2]]
回溯:恢复状态
• 交换回去,恢复原数组 [1, 3, 2]。
• 返回到 n = 1,恢复原数组 [1, 2, 3]。
• 返回到 n = 0,恢复原数组 [1, 2, 3]。
第 2 次交换:n = 0 (处理第一个位置)
3. 第 2 次交换:swap(nums[0], nums[1]),数组变为 [2, 1, 3]。
• 递归调用 dfs(nums, 1),进入处理第二个位置。
第 2 层递归:n = 1 (处理第二个位置)
• 当前节点的起始值是 nums = [2, 1, 3],n = 1,遍历 i = 1 到 i = 2。
1. 第 1 次交换:swap(nums[1], nums[1]),数组未变,仍为 [2, 1, 3]。
• 递归调用 dfs(nums, 2),进入处理第三个位置。
第 3 层递归:n = 2 (处理第三个位置)
• 当前节点的起始值是 nums = [2, 1, 3],n = 2,遍历 i = 2 到 i = 2(只剩下一个位置)。
1. 第 1 次交换:swap(nums[2], nums[2]),数组未变,仍为 [2, 1, 3]。
• 递归调用 dfs(nums, 3),这时 n == nums.size(),说明当前排列已经完成。
2. 将 [2, 1, 3] 加入到 ans 中。
• ans = [[1, 2, 3], [1, 3, 2], [2, 1, 3]]
回溯:恢复状态
• 交换回去,恢复原数组 [2, 1, 3]。
• 返回到 n = 2,继续处理 i = 2。
2. 第 2 次交换:swap(nums[1], nums[2]),数组变为 [2, 3, 1]。
• 递归调用 dfs(nums, 2),进入处理第三个位置。
第 3 层递归:n = 2 (处理第三个位置)
• 当前节点的起始值是 nums = [2, 3, 1],n = 2,遍历 i = 2 到 i = 2(只剩下一个位置)。
1. 第 1 次交换:swap(nums[2], nums[2]),数组未变,仍为 [2, 3, 1]。
• 递归调用 dfs(nums, 3),这时 n == nums.size(),说明当前排列已经完成。
2. 将 [2, 3, 1] 加入到 ans 中。
• ans = [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1]]
回溯:恢复状态
• 交换回去,恢复原数组 [2, 3, 1]。
• 返回到 n = 1,恢复原数组 [2, 1, 3]。
• 返回到 n = 0,恢复原数组 [1, 2, 3]。
第 3 次交换:n = 0 (处理第一个位置)
4. 第 3 次交换:swap(nums[0], nums[2]),数组变为 [3, 2, 1]。
• 递归调用 dfs(nums, 1),进入处理第二个位置。
第 2 层递归:n = 1 (处理第二个位置)
• 当前节点的起始值是 nums = [3, 2, 1],n = 1,遍历 i = 1 到 i = 2。
1. 第 1 次交换:swap(nums[1], nums[1]),数组未变,仍为 [3, 2, 1]。
• 递归调用 dfs(nums, 2),进入处理第三个位置。
第 3 层递归:n = 2 (处理第三个位置)
• 当前节点的起始值是 nums = [3, 2, 1],n = 2,遍历 i = 2 到 i = 2(只剩下一个位置)。
1. 第 1 次交换:swap(nums[2], nums[2]),数组未变,仍为 [3, 2, 1]。
• 递归调用 dfs(nums, 3),这时 n == nums.size(),说明当前排列已经完成。
2. 将 [3, 2, 1] 加入到 ans 中。
• ans = [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1]]
回溯:恢复状态
• 交换回去,恢复原数组 [3, 2, 1]。
• 返回到 n = 2,恢复原数组 [3, 2, 1]。
• 返回到 n = 1,恢复原数组 [3, 2, 1]。
• 返回到 n = 0,恢复原数组 [1, 2, 3]。
最终结果
最终生成的排列 ans 中包含了所有可能的排列:
ans = [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]
总结
1. DFS 遍历:通过递归逐个处理每个位置,生成所有可能的字符组合。
2. 回溯:通过交换和恢复数组状态,确保生成所有排列。
3. 最终生成了所有的排列,并存储在 ans 中。
这样,我们使用回溯和 DFS 的方法成功计算出了所有的排列,并保存在 ans 数组中。
相关文章:
LeetCodehot 力扣热题100 全排列
这段代码的目的是计算给定整数数组的所有全排列(permutations),并返回一个包含所有排列的二维数组。 思路解析 在这段代码中,采用了 深度优先搜索(DFS) 和 回溯 的方法来生成所有的排列。 关键步骤…...
深度学习c++资源库:vector容器,蓝桥杯常用算法sort,unique(排序+去重)
vector容器 1.基本概念 <vector> 是 STL 中的一个容器类,不同于普通数组的静态空间,vector可以动态扩展。 动态扩展:并不是在原空间连接新空间,而是找到更大的内存空间,将原数据拷贝到新空间,释放…...
Postgresql-重置统计信息(reset statistics)
文章目录 理解 PostgreSQL 中的 pg_stat_resetpg_stat_reset 的作用与使用时机pg_stat_reset 所需权限PostgreSQL 重置统计信息的方法重置整个database重置特定表的统计重置特定function的统计重置Statistics Collector:重置 WAL(Write-Ahead Logging)统…...
【Uniapp-Vue3】导入uni-id用户体系
在uniapp官网的uniCloud中下载uni-id用户体系 或者直接进入加载,下载地址:uni-id-pages - DCloud 插件市场 进入以后下载插件,打开HbuilderX 选中项目,点击确定 点击跳过 点击合并 右键uniCloud文件夹下的database文件夹&#x…...
【前沿探索篇七】【DeepSeek自动驾驶:端到端决策网络】
第一章 自动驾驶的"感官革命":多模态神经交响乐团 1.1 传感器矩阵的量子纠缠 我们把8路摄像头+4D毫米波雷达+128线激光雷达的融合称为"传感器交响乐",其数据融合公式可以简化为: def sensor_fusion(cam, radar, lidar):# 像素级特征提取 (ResNet-152…...
Staruml软件的介绍安装uml类图的绘制流程
文章目录 1.uml和staruml之间的关系2.软件的安装3.配置脚本语言4.Staruml创建类图4.反向工程 1.uml和staruml之间的关系 这篇文章主要是介绍这个staruml软件的安装和相关的背景介绍: 我和uml初识于IDEA软件,学习java的你一定用过这个软件,当…...
神经网络发展简史:从感知机到通用智能的进化之路
引言 神经网络作为人工智能的核心技术,其发展历程堪称一场人类对生物大脑的致敬与超越。本文将用"模型进化"的视角,梳理神经网络发展的五大关键阶段,结合具象化比喻和经典案例,为读者呈现一幅清晰的AI算法发展图谱。 一…...
快节奏生活
在当今快节奏的商务环境中,效率成为了决定企业竞争力的关键因素之一。亿可达软件连接平台,以其独特的功能和优势,为职场人士带来了前所未有的便捷与高效,成为了众多用户心中的“宝藏”工具。 1、亿可达:自动化流程的搭…...
Windows 11【1001问】通过Rufus制作Win 11系统安装U盘
随着科技的发展,Windows 11 已经成为许多用户的首选操作系统。在之前的几篇文章中,我们详细探讨了 Windows 11 的概念、安装配置要求以及如何下载 Windows 11 镜像文件,并介绍了六种不同的安装方法。本篇博客将聚焦于使用 ISO 文件安装 Windo…...
spring中手写注解开发(创建对象篇)
说明: 在spring底层中并不是我写的如此,这篇只是我用我自己的方式实现了使用注解组件扫描并且 创建对象,方法并不是很难,可以看一看,欢迎大佬评论 第一步: 我们需要自己写一个注解,我用的是idea…...
DeepSeek进入开源周,分享几点关于开源的思考
最近DeepSeek进入开源周,又把差点被大众遗忘在角落的开源话题拉了出来。 作为一个开源作者,也分享几点关于开源的思考。 AI对开源的影响 开源项目遇到的最大困难 开源项目不应该商业化 你的开源项目是垃圾...
大模型训练中的数据不平衡问题及其解决策略
目录 大模型训练中的数据不平衡问题及其解决策略 一、数据不平衡问题的影响 二、处理数据不平衡问题的方法 1. 过采样(Oversampling) 2. 欠采样(Undersampling) 3. 代价敏感学习(Cost-Sensitive Learning…...
本地部署DeepSeek R1满血版大模型
一、前言 老周上一篇分享了《本地部署DeepSeek R1大模型》,本地受硬件条件限制,只跑了80亿参数量的模型。 1.5b模型基本可以在大部分个人电脑甚至手机中运行,如果你有 6G 显存以上,那么可以部署7b模型,如果有16G显存&…...
外发抄板SCH与PCB检查系列
外发抄板SCH与PCB检查系列 一、检查到手的文件二、PCB与原理图的对应检查1.为什么要查SCH与Pcbdoc的对应?2.查询方法 三、PCB与实物的信号对应检查 一、检查到手的文件 外发出去两块板子:控制板与功率板。 抄板机构返回的文件: 1.互相独立的…...
EX_25/2/25
编写一个如下场景: 有一个英雄Hero类,私有成员,攻击,防御,速度,生命值,以及所有的set get 方法 编写一个 武器 Weapon 类,拥有私有成员攻击力,以及set get 方法 编写一个…...
C# 打印Word文档 – 4种打印方法
Word文档是日常办公和学习中不可或缺的一部分。比如在商务往来中,经常需要打印 Word 文档用于撰写和传递正式的商务信函、合作协议、项目提案等。打印出来的文档便于双方签字盖章,具有法律效力和正式性。本文将提供以下4种通过C# 打印Word文档的方法&…...
ROS的action通信——实现阶乘运算(一)
在ROS中除了常见的话题(topic)通信、服务(server)通信等方式,还有action通信这一方式,由于可以实时反馈任务完成情况,该通信方式被广泛运用于机器人导航等任务中。本文将通过三个小节的分享,实现基于action通信的阶乘运…...
Mac 上安装多版本的 JDK 且实现 自由切换
1.可以通过查看以下目录中的内容,确认当前已经安装的 jdk 版本。 cd /Library/Java/JavaVirtualMachines2.命令行查看 jdk 的安装路径 /usr/libexec/java_home -V3.下载要安装的jdk版本,修改环境变量( cat ~/.bash_profile) # 定义JDK 8和JDK 17的安装路…...
网络编程套接字
目录 一、认识端口号 二、端口号和进程ID 三、TCP/UDP协议 四、网络字节序 五、socket编程接口 5.1socket的常见API 5.2socketaddr结构 六、简单的UDP程序 七、地址转换函数 八、简单的TCP网络程序 九、Tcp协议通讯流程 9.1基于TCP协议的客户端/服务器程序的一般流…...
45.matlab产生正弦叠加信号
,...
Java23种设计模式案例
目录 一、概述 二、创建型模式 (Creational Patterns) 单例模式 (Singleton Pattern) 工厂方法模式 (Factory Method Pattern) 抽象工厂模式 (Abstract Factory Pattern) 建造者模式 (Builder Pattern) 原型模式 (Prototype Pattern) 三、结构型模式 (Structu…...
计算机毕业设计程序,定制开发服务
我们擅长的开发语言包括Python、C、Golang、Java,以及前端技术如HTML、CSS、JS和Vue。我们的服务内容丰富,能够满足您各种需求,无论是简单的功能开发还是复杂的定制项目,我们都能为您提供专业支持。若有具体需求可联系作者。 链接…...
AI提示词的种类与适合的任务
以下是提示词的主要种类及其适用任务,基于大模型特性与最佳实践总结: 一、基础提示词 零样本提示(Zero-shot Prompting) 形式:直接输入任务指令,不提供示例(如“翻译以下句子:Hello …...
【Kimi】自动生成PPT-并支持下载和在线编辑--全部免费
【Kimi】免费生成PPT并免费下载 用了好几个大模型,有些能生成PPT内容; 有些能生成PPT,但下载需要付费; 目前只有Kimi生成的PPT,能选择模板、能在线编辑、能下载,关键全部免费! 一、用kimi生成PP…...
Maven环境搭建
Maven 1. 概述 ApacheMaven是一个软件项目管理和构建工具。基于项目对象模型(POM)的概念,Maven可以从中心信息中管理项目的构建、报告和文档 理解: maven构建项目(100%)而且帮你完成jar的统一管理。 思考: 原来的jar—…...
Vue面试题
Vue面试题 Vue2.0的生命周期,每个生命周期分别做了哪些事情 create阶段:vue实例被创建。 beforeCreate: 创建前,此时data和methods中的数据都还没有初始化; created:创建完毕,data中有值,未…...
Linux时间日期类指令
1、data指令 基本语法: date : 显示当前时间date %Y : 显示当前年份date %m : 显示当前月份date %d : 显示当前哪一天date “%Y-%m-%d %H:%M:%S" : 显示年月日时分秒date -s 字符串时间 : 设置系统时…...
国标28181协议在智联视频超融合平台中的接入方法
一. 国标28181介绍 国标 28181 协议全称是《安全防范视频监控联网系统信息传输、交换、控制技术要求》,是国内视频行业最重要的国家标准,目前有三个版本: 2011 年:推出 GB/T 28181-2011 版本,为安防行业的前端设备、平…...
pyautogui库的screenshot()函数
# 方法一 screenshot pyautogui.screenshot() screenshot.save("screenshot.png")# 方法二 # 获取屏幕分辨率 screen_width, screen_height pyautogui.size()# 截取桌面屏幕 screenshot pyautogui.screenshot(region(0, 0, screen_width, screen_height)) screens…...
python与C系列语言的差异总结(3)
与其他大部分编程语言不一样,Python使用空白符(whitespace)和缩进来标识代码块。也就是说,循环体、else条件从句之类的构成,都是由空白符加上冒号(:)来确定的。大部分编程语言都是使用某种大括号来标识代码块的。下面的…...
《Linux系统编程篇》System V信号量实现生产者与消费者问题(Linux 进程间通信(IPC))——基础篇(拓展思维)
文章目录 📚 **生产者-消费者问题**🔑 **问题分析**🛠️ **详细实现:生产者-消费者****步骤 1:定义信号量和缓冲区****步骤 2:创建信号量****步骤 3:生产者进程****步骤 4:消费者进程…...
Jmeter接口并发测试
Apache JMeter 是一款开源的性能测试工具,广泛用于接口并发测试、负载测试和压力测试。以下是使用 JMeter 进行接口并发测试的详细步骤: 一、准备工作 安装 JMeter 下载地址:Apache JMeter 官网 确保已安装 Java 环境(JMeter 依…...
Python--内置函数与推导式(上)
1. 匿名函数 Lambda表达式基础 语法:lambda 参数: 表达式 特点: 没有函数名,适合简单逻辑函数体只能是单行表达式自动返回表达式结果 # 示例1:加法 add lambda a, b: a b print(add(3, 5)) # 输出 8# 示例2:字…...
Python爬虫实战:获取六图网漫画图
注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力! 一、引言 Python 作为一种广泛应用于数据处理和网络爬虫领域的编程语言,拥有丰富的库和框架。其中,Scrapy 框架以其高效、灵活、可扩展等特点,成为构建爬虫程序的…...
《人工智能之高维数据降维算法:PCA与LDA深度剖析》
在人工智能与机器学习蓬勃发展的当下,数据处理成为关键环节。高维数据在带来丰富信息的同时,也引入了计算复杂度高、过拟合风险增大以及数据稀疏性等难题。降维算法应运而生,它能将高维数据映射到低维空间,在减少维度的同时最大程…...
第2课 树莓派镜像的烧录
树莓派的系统通常是安装在SD卡上的。SD卡作为启动设备,负责启动树莓派并加载操作系统。这种设计使得树莓派具有便携性和灵活性,用户可以通过更换SD卡来更换操作系统或恢复出厂设置。 烧录树莓派的镜像即是将树莓派镜像烧录到SD卡上,…...
网络安全复习资料
网络安全复习资料 1.计算机网络安全是指保持网络中的硬件、软件系统正常运行,使他们不因自然和人为的因素而受到破坏、更改和泄露。 2.网络安全:物理安全,软件安全,信息安全,运行安全。 3.安全防范措施:…...
PIG框架学习5——动态路由实现
一、前言 参考PIGX官方文档:https://www.yuque.com/pig4cloud/pig/ggnc3e 1.1 说明 在微服务中,定义路由一般是在网关gateway对应的配置文件中进行定义声明的,PIGX框架下,如何通过动态路由实现网关路由的实时更新? 实…...
vscode设置自动换行
vscode设置自动换行 方法 方法 点击文件->首选项->设置。搜索word wrap -> 选择 on 。 搜索Word Wrap,并把选项改为on。...
Flutter-升级Xcode后构建iOS报错
代码什么都没改动,貌似只是升级了下Xcode,构建iOS就一直报错,错误有时候还不一样。 Swift Compiler Error (Xcode): Unable to rename temporary /Users/admin/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/2ZBFEEPIDQ0EY/Core…...
架构思维:架构的演进之路
文章目录 引言为什么架构思维如此重要架构师的特点软件架构的知识体系如何提升架构思维大型互联网系统架构的演进之路一、大型互联网系统的特点二、系统处理能力提升的两种途径三、大型互联网系统架构演化过程四、总结 引言 在软件开发行业中,有很多技术人可能会问…...
ElasticSearch公共方法封装
业务场景 1、RestClientBuilder初始化(同时支持单机与集群) 2、发送ES查询请求公共方法封装(支持sql、kql、代理访问、集群访问、鉴权支持) 3、判断ES索引是否存在(/_cat/indices/${indexName}) 4、判断ES…...
[Web 信息收集] Web 信息收集 — 手动收集 IP 信息
关注这个专栏的其他相关笔记:[Web 安全] Web 安全攻防 - 学习手册-CSDN博客 0x01:通过 DNS 服务获取域名对应 IP DNS 即域名系统,用于将域名与 IP 地址相互映射,方便用户访问互联网。对于域名到 IP 的转换过程则可以参考下面这篇…...
多源最短路径求解: Floyd-Warshall算法和Johnson 算法
多源最短路径问题是图论中的一个经典问题, 它要求找到图中所有顶点对之间的最短路径. 这个问题可以通过几种不同的算法来解决, 其中最为著名的包括 Floyd-Warshall Algorithm 和 Johnson’s Algorithm. Floyd-Warshall 算法 弗洛伊德-沃沙尔算法(Floyd-Warshall Algorithm) 是…...
解决IDEA使用Ctrl + / 注释不规范问题
问题描述: ctrl/ 时,注释缩进和代码规范不一致问题 解决方式 设置->编辑器->代码样式->java->代码生成->注释代码...
第9章 机器学习与统计模型
这一章重点探讨统计模型和机器学习模型,两个大的主题都建立在数据的基础之上,所以要熟练掌握对数据的处理与分析。实际上,机器学习本身就是统计模型的延伸,是在大数据背景下传统统计方法捉襟见肘了,所以才考虑引入机器…...
基于MATLAB的OFDM通信系统仿真设计
下面将为你详细介绍基于MATLAB的OFDM通信系统仿真设计的步骤和示例代码。 1. OFDM系统原理概述 正交频分复用(OFDM)是一种多载波调制技术,它将高速数据流通过串并转换,分配到多个正交的子载波上进行传输,这样可以有效…...
WebRTC学习七:WebRTC 中 STUN 协议详解
系列文章目录 第一篇 基于SRS 的 WebRTC 环境搭建 第二篇 基于SRS 实现RTSP接入与WebRTC播放 第三篇 centos下基于ZLMediaKit 的WebRTC 环境搭建 第四篇 WebRTC学习一:获取音频和视频设备 第五篇 WebRTC学习二:WebRTC音视频数据采集 第六篇 WebRTC学习三…...
力扣47. 全排列 II
思路 用 used 保存在一次答案中取过的数组索引。 先对数组进行排序,然后尝试取每个元素作为排列。 首先需要满足不重复取自己,即 !used.contains(i)。其次当前元素和前一个元素不同时可取,即 i 0 || nums[i] ! nums[i - 1]; 如…...
什么是将应用放在边缘服务器上创建?应用不是在用户手机上吗?边缘计算究竟如何优化?通过两个问题来辨析
元宇宙应用虽然可以在用户的手机等终端设备上运行,但大部分的计算和数据处理任务并不是完全在手机上完成的。元宇宙的运行需要庞大的计算资源和大量的数据交互,而这些是手机等终端设备难以独自承担的。因此,元宇宙应用需要借助边缘数据中心等…...