当前位置: 首页 > news >正文

LeetCode算法题(Go语言实现)_50

题目

现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, …] 。
实现 SmallestInfiniteSet 类:
SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。
int popSmallest() 移除 并返回该无限集中的最小整数。
void addBack(int num) 如果正整数 num 不 存在于无限集中,则将一个 num 添加 到该无限集中。

一、代码实现(堆与集合结合)


import ("container/heap"
)// 定义最小堆类型
type IntHeap []intfunc (h IntHeap) Len() int           { return len(h) }
func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] }
func (h IntHeap) Swap(i, j int)      { h[i], h[j] = h[j], h[i] }func (h *IntHeap) Push(x interface{}) {*h = append(*h, x.(int))
}func (h *IntHeap) Pop() interface{} {old := *hn := len(old)x := old[n-1]*h = old[0 : n-1]return x
}// SmallestInfiniteSet 结构体定义
type SmallestInfiniteSet struct {currentMin int       // 当前连续整数起点heap       *IntHeap  // 存储被添加回的小值addedSet   map[int]bool // 记录已添加元素
}// 构造函数初始化
func Constructor() SmallestInfiniteSet {h := &IntHeap{}heap.Init(h)return SmallestInfiniteSet{currentMin: 1,heap:       h,addedSet:   make(map[int]bool),}
}// 弹出最小元素
func (this *SmallestInfiniteSet) PopSmallest() int {// 优先弹出已添加的最小元素if this.heap.Len() > 0 {smallest := heap.Pop(this.heap).(int)delete(this.addedSet, smallest)return smallest}// 弹出当前连续最小值并递增res := this.currentMinthis.currentMin++return res
}// 添加元素回集合
func (this *SmallestInfiniteSet) AddBack(num int) {// 只处理比当前连续最小值小且未被添加过的数if num < this.currentMin && !this.addedSet[num] {heap.Push(this.heap, num)this.addedSet[num] = true}
}/*** 使用示例:* obj := Constructor();* param_1 := obj.PopSmallest();* obj.AddBack(num);*/

二、算法分析

1. 核心思路
  • 双轨存储:用current_min表示连续整数起点,堆存储被添加回的小值
  • 最小优先:始终优先弹出被添加回的最小值,保证顺序正确性
  • 去重机制:通过集合维护已添加元素,避免重复入堆
2. 关键步骤
  1. 初始化阶段

    • current_min初始化为1,表示当前连续整数起点
    • 创建空堆added_heap和集合added_set
  2. 弹出操作

    • 优先检查堆中是否有被添加回的小值
    • 若堆为空则弹出当前current_min并递增
  3. 添加操作

    • 仅当数值小于当前连续起点且未被添加过时入堆
    • 同时更新堆和集合保证数据一致性
3. 复杂度
操作时间复杂度说明
popSmallestO(log n)堆操作主导
addBackO(log n)堆插入与集合查询共同作用

三、图解示例

在这里插入图片描述

四、边界条件与扩展

1. 特殊场景验证
  • 连续弹出后添加:验证数值重新进入堆的逻辑
  • 添加大数值:确认不会影响current_min
  • 重复添加:确保集合去重机制有效
2. 扩展应用
  • 动态阈值调整:current_min可扩展为区间管理
  • 批量操作优化:支持批量添加/弹出操作
  • 持久化存储:增加序列化/反序列化功能
3. 多语言实现
import heapqclass SmallestInfiniteSet:def __init__(self):self.current_min = 1self.added_heap = []# 维护已添加的且小于current_min的元素的最小堆self.added_set = set()      # 避免重复添加元素def popSmallest(self) -> int:if self.added_heap:smallest = heapq.heappop(self.added_heap)self.added_set.remove(smallest)return smallestelse:res = self.current_minself.current_min += 1return resdef addBack(self, num: int) -> None:if num < self.current_min and num not in self.added_set:heapq.heappush(self.added_heap, num)self.added_set.add(num)
import java.util.PriorityQueue;
import java.util.HashSet;class SmallestInfiniteSet {private int currentMin;private PriorityQueue<Integer> addedHeap;private HashSet<Integer> addedSet;public SmallestInfiniteSet() {currentMin = 1;addedHeap = new PriorityQueue<>();addedSet = new HashSet<>();}public int popSmallest() {if (!addedHeap.isEmpty()) {int smallest = addedHeap.poll();addedSet.remove(smallest);return smallest;}return currentMin++;}public void addBack(int num) {if (num < currentMin && !addedSet.contains(num)) {addedHeap.offer(num);addedSet.add(num);}}
}
class SmallestInfiniteSet {constructor() {this.currentMin = 1;this.addedHeap = [];this.addedSet = new Set();}popSmallest() {if (this.addedHeap.length > 0) {const smallest = this.addedHeap.shift();this.addedSet.delete(smallest);return smallest;}return this.currentMin++;}addBack(num) {if (num < this.currentMin && !this.addedSet.has(num)) {this.addedSet.add(num);this.addedHeap.push(num);this.addedHeap.sort((a,b) => a-b);}}
}

五、总结与优化

1. 算法对比
方法优势适用场景
堆+集合动态维护高效频繁添加/弹出操作
纯集合遍历实现简单低频操作场景
平衡树查询删除统一复杂度需要范围查询
2. 工程优化
  • 堆排序优化:使用更高效堆实现(如斐波那契堆)
  • 内存压缩:对连续区间采用位图标记
  • 延迟更新:批量处理current_min递增
3. 扩展方向
  • 区间合并:记录多个连续区间段
  • 多线程安全:添加同步锁机制
  • 历史记录:支持撤销操作功能

相关文章:

LeetCode算法题(Go语言实现)_50

题目 现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, …] 。 实现 SmallestInfiniteSet 类&#xff1a; SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。 int popSmallest() 移除 并返回该无限集中的最小整数。 void addBack(int num) 如果正整数 …...

idea报错java: 非法字符: ‘\ufeff‘解决方案

解决方案步骤以及说明 BOM是什么&#xff1f;1. BOM的作用2. 为什么会出现 \ufeff 错误&#xff1f;3. 如何解决 \ufeff 问题&#xff1f; 最后重新编译&#xff0c;即可运行&#xff01;&#xff01;&#xff01; BOM是什么&#xff1f; \ufeff 是 Unicode 中的 BOM&#xff0…...

WPF依赖注入IHostApplicationLifetime关闭程序

WPF依赖注入IHostApplicationLifetime关闭程序 使用Application.Current.Shutdown();退出会报异常 应该使用 app.Dispatcher.InvokeShutdown(); Application.Current.Shutdown();app.Dispatcher.InvokeShutdown();static App app new();[STAThread]public static void Main(…...

如何在 IntelliJ IDEA 中安装通义灵码 - AI编程助手提升开发效率

随着人工智能技术的飞速发展&#xff0c;AI 编程助手已成为提升开发效率和代码质量的强大工具。在众多 AI 编程助手之中&#xff0c;阿里云推出的通义灵码凭借其智能代码补全、代码解释、生成单元测试等丰富功能&#xff0c;脱颖而出&#xff0c;为开发者带来了全新的编程体验。…...

【力扣】两两交换链表中的节点

两两交换链表中的节点 代码&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *n…...

数据共享交换平台之文件交换

数据共享交换平台的文件交换管理功能提供部门与部门之间的文件交换通道&#xff0c;满足跨部门之间文件交换需求。文件交换需要能够按照交换业务场景对交换通道进行分类管理。文件交换管理需满足如下要求&#xff1a; 1.文件交换统计&#xff1a;支持查看本部门与其他部门之间…...

什么是全球代理?如何选择全球代理服务?

在全球化不断深化的今天&#xff0c;互联网已经成为人类沟通、工作和学习的重要纽带。而全球代理则是这一纽带上的关键技术之一&#xff0c;它赋予了我们探索不同地区网络资源的能力。今天&#xff0c;我们来聊聊什么是全球代理、它能做什么&#xff0c;以及如何选择合适的全球…...

Spring Boot整合Kafka的详细步骤

1. 安装Kafka 下载Kafka&#xff1a;从Kafka官网下载最新版本的Kafka。 解压并启动&#xff1a; 解压Kafka文件后&#xff0c;进入bin目录。 启动ZooKeeper&#xff1a;./zookeeper-server-start.sh ../config/zookeeper.properties。 启动Kafka&#xff1a;./kafka-server-…...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——USB WIFI测试 #WIFI蓝牙二合一 #RTL8733BU

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;https://www.alientek.com/Product_Details/135.html 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——USB…...

Doip功能寻址走UDP协议

目前使用 connect()函数的UDP客户端 ,这里接收数据 解析的地方 查看一下。 如果使用 bind()、sendto()、recvfrom() 组合 那么返回值 和发送要在做调整&#xff0c;&#xff0c;根据业务需要后续在调整 其余的 和原来的 逻辑都是一样的&#xff0c;只是协议变了而已。 if serv…...

硬件电路设计之51单片机(2)

声明&#xff1a;绘制原理图和PCB的软件为嘉立创EDA。根据B站尚硅谷嵌入式之原理图&PCB设计教程学习所作个人用笔记。 目录 一、原理图详解 1、TypeC接口 &#xff08;1&#xff09;TypeC接口介绍 &#xff08;2&#xff09;TypeC原理图 2、5V转3.3V 3、单片机电源开…...

Deeplizard 深度学习课程(一)—— Pytorch 和 Tensor 简介

前言 该pytorch笔记参考deeplizard官方网站课程&#xff0c;有相应视频和博客&#xff0c;链接如下&#xff1a; deeplizardhttps://deeplizard.com/learn/video/v5cngxo4mIg 1.Pytorch 简介 PyTorch 是一个深度学习框架和一个科学计算包。PyTorch 的科学计算方面主要是 PyTo…...

Delphi HMAC算法

1. 前言 今天做一个三方接口&#xff0c;接口文档描述签名采用MD5&#xff0c;但是实际测试过程中&#xff0c;始终校验不通过&#xff0c;经过和三方沟通&#xff0c;才知道采用的是HMAC-MD5。由于Delphi7没有对HMAC的支持&#xff0c;则采用XE版本来支持。本次使用Delphi XE …...

Ubuntu服务器性能调优指南:从基础工具到系统稳定性提升

一、性能监控工具的三维应用 1.1 监控矩阵构建 通过组合工具搭建立体监控体系&#xff1a; # 实时进程监控 htop --sort-keyPERCENT_CPU# 存储性能采集 iostat -dx 2# 内存分析组合拳 vmstat -SM 1 | awk NR>2 {print "Active:"$5"MB Swpd:"$3"…...

深度解析C++开源OCR引擎:架构、编译优化与工业级部署指南

1. 引言:OCR技术演进与现状分析 光学字符识别(OCR)技术经历了从传统模式识别到深度学习的三代发展: 第一代:基于模板匹配(1970s-1990s) 第二代:特征提取+分类器(1990s-2010s) 第三代:端到端深度学习(2010s-至今) 当前工业界主流方案呈现"双轨制"发展态势…...

关于Newtonsoft.Json

历史 Newtonsoft.Json&#xff08;也称为 Json.NET&#xff09;是由 James Newton - King 开发的一个开源的 JSON 处理库&#xff0c;它于 2007 年首次发布。在早期&#xff0c;.NET 平台缺乏一个强大且灵活的 JSON 处理工具&#xff0c;Newtonsoft.Json 应运而生&#xff0c;…...

Spark-Sql编程(三)

一、数据加载与保存 通用方式&#xff1a;使用spark.read.load和df.write.save&#xff0c;通过format指定数据格式&#xff08;如csv、jdbc、json等&#xff09;&#xff0c;option设置特定参数&#xff08;jdbc格式下的url、user等&#xff09;&#xff0c;load和save指定路…...

CTF--好像需要管理员

一、原网页&#xff1a; 二、步骤&#xff1a; 1.扫描&#xff1a; 发现&#xff1a;robots.txt 2.打开robots.txt&#xff1a; 3.打开resul.php&#xff1a; 4.代码解析&#xff1a; if ($_GET[x]$password) //检查通过 URL 参数 x 传递的值是否等于变量 $password 的值 详…...

耀圣控制设备有限公司总经理李雨蔓的创业之路

破浪者李雨蔓&#xff1a;从零到行业标杆的铿锵之路 在浙江永嘉这片被誉为“中国泵阀之乡”的热土上&#xff0c;一位86年出生的女性企业家&#xff0c;用十年光阴书写了一段白手起家的传奇。她&#xff0c;是一曲关于勇气、智慧与匠心的赞歌。从技术员到行业标杆的缔造者&…...

Spring Boot JPA 开发之Not an entity血案

项目状况介绍 项目环境 JDK 21Spring Boot 3.4.3Hibernate: 6.6.13.Final项目描述 因为是微服务架构,项目层级如下 project-parent project-com project-A … project-X 其中: project-parent定义依赖库的版本project-com 定义了一些公用的方法和配置,包括持久层的配置。…...

什么是车规级MCU?STM32也能上车规级场景?

一、车规级MCU的定义 车规级MCU&#xff08;Microcontroller Unit&#xff09;是专为汽车电子系统设计的微控制器芯片&#xff0c;集成CPU、存储器、外设接口等功能模块&#xff0c;用于实现车辆控制、数据处理和实时响应。其核心特点包括&#xff1a; 高可靠性&#xff1a;需在…...

vue3.2 + element-plus 实现跟随input输入框的弹框,弹框里可以分组或tab形式显示选项

效果 基础用法&#xff08;分组选项&#xff09; 高级用法&#xff08;带Tab栏&#xff09; <!-- 弹窗跟随通用组件 SmartSelector.vue --> <template><div class"smart-selector-container"><el-popover :visible"visible" :w…...

go 指针接收者和值接收者的区别

go 指针接收者和值接收者的区别 指针接收者和值接收者的区别主要有两点&#xff1a; Go 中函数传参是传值&#xff0c;因此指针接收者传递的是接收者的指针拷贝&#xff0c;值接收者传递的是接收者的拷贝---在方法中指针接收者的变量会被修改&#xff0c;而值接收者的成员变量…...

部署qwen2.5-VL-7B

简单串行执行 from transformers import Qwen2_5_VLForConditionalGeneration, AutoProcessor from qwen_vl_utils import process_vision_info import torch, time, threadingdef llm(model_path,promptNone,imageNone,videoNone,imagesNone,videosNone,max_new_tokens2048,t…...

Go:测试

go test 工具 go test是 Go 语言包的测试驱动程序 &#xff0c;包依据特定约定组织 。包目录中以_test.go结尾的文件是go test编译对象&#xff0c;而非go build的编译目标 。 特殊测试函数 在*_test.go文件中有三种特殊函数 &#xff1a; 功能测试函数&#xff1a;以Test为…...

用微信小程序制作一个性行为同意协议系统

用微信小程序制作一个性行为同意协议系统 用微信小程序制作一个性行为同意协议系统&#xff0c;具备查询、修改、增加和演示的Web功能。首先&#xff0c;我需要明确这个系统的核心功能和法律合规性。性同意是一个敏感且法律相关的话题&#xff0c;必须确保系统的设计符合法律法…...

leetcode 122. Best Time to Buy and Sell Stock II

题目描述 这道题可以用贪心思想解决。 本文介绍用动态规划解决。本题分析方法与第121题一样&#xff0c;详见leetcode 121. Best Time to Buy and Sell Stock 只有一点区别。第121题全程只能买入1次&#xff0c;因此如果第i天买入股票&#xff0c;买之前的金额肯定是初始金额…...

FairyGUI图标文字合批失败的原因

1&#xff09;FairyGUI图标文字合批失败的原因 2&#xff09;为什么Cubemap的内存占用超高 3&#xff09;如何找到网格某个切面的中心点 4&#xff09;为什么SafeZone在倒屏后方向相反 这是第428篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;涵盖了…...

C/C++ 通用代码模板

✅ C 语言代码模板&#xff08;main.c&#xff09; 适用于基础项目、算法竞赛或刷题&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <math.h>// 宏定义区 #define MAX_N 1000 #defi…...

void MainWindow::on_btnOutput_clicked()为什么我在QT里面没有connect,也能触发点击效果

在 Qt 中&#xff0c;即使你没有显式调用 connect 函数&#xff0c;某些信号&#xff08;如按钮的 clicked() 信号&#xff09;仍然可以触发槽函数。这是因为 Qt 提供了一种自动连接机制&#xff0c;称为 自动连接&#xff08;Auto-Connection&#xff09;。以下是可能的原因和…...

基于YOLO11的车牌识别分析系统

【包含内容】 【一】项目提供完整源代码及详细注释 【二】系统设计思路与实现说明 【三】系统数据统计与可视化分析支持 【技术栈】 ①&#xff1a;系统环境&#xff1a;Windows/macOS/Linux ②&#xff1a;开发环境&#xff1a;Python 3.8 ③&#xff1a;技术栈&#x…...

openwebui搭建mcp

1、升级ollama https://github.com/ollama/ollama/blob/main/docs/faq.md curl -fsSL https://ollama.com/install.sh | shOllama 启动后&#xff0c;设置外网访问_ollama 外部访问-CSDN博客 ubuntu安装deepseek-CSDN博客 sudo vim /etc/systemd/system/ollama.serviceEnvi…...

邀请函 | 知从科技邀您共赴2025上海车展

2025上海车展将于4月23日至5月2日在国家会展中心&#xff08;上海&#xff09;盛大举行。本届车展以 “科技智驾未来”为主题&#xff0c;共同展示新能源汽车、智能驾驶等领域的最新技术与成果。 知从科技将携行业领先的软件产品与技术服务亮相于本次展览会&#xff0c;全方位…...

ESP32开发工具链选择指南:ESP-IDF vs PlatformIO vs Arduino

1. 引言 ESP32作为乐鑫&#xff08;Espressif&#xff09;推出的一款高性能Wi-Fi & Bluetooth双模芯片&#xff0c;凭借其强大的性能和丰富的生态&#xff0c;在物联网&#xff08;IoT&#xff09;领域广受欢迎。然而&#xff0c;开发ESP32时面临的一个关键问题是&#xf…...

【JAVA】bat文件启动jar场景获取bat文件路径的方法

一、推荐方案&#xff1a;参数传递法 步骤1&#xff1a;修改BAT脚本 echo off java -jar -Dbat.file"%~f0" your-app.jar %*关键参数说明&#xff1a; %~f0&#xff1a;获取BAT文件的完整路径%*&#xff1a;传递所有原始参数 步骤2&#xff1a;Java代码获取参数 …...

OpenLayers:extent与view extent 介绍

一、范围的概念 1.什么是范围&#xff1f; 在Openlayers中范围&#xff08;Extent&#xff09;是用于表示地理空间区域的一种概念。它通常由一个数字数组构成&#xff0c;数组中的内容为&#xff1a;[最小x坐标&#xff0c;最小y坐标&#xff0c;最大x坐标&#xff0c;最大y坐…...

Python开发一个简单的软件系统

用Python语言实现&#xff0c;具备录入学生成绩、查询成绩和显示所有成绩等基本功能。以下是代码&#xff1a; # 用于存储学生成绩的字典&#xff0c;键是学生姓名&#xff0c;值是成绩 student_scores {} # 录入学生成绩的函数 def input_scores(): name input("…...

小草GrassRouter多5G聚合路由设备在应急公安消防行业的解决方案及重要作用

小草GrassRouter多5G聚合路由设备在应急、公安、消防等行业的解决方案及重要作用主要体现在以下几个方面&#xff0c;这些领域对通信的高可靠性、高带宽、低时延需求尤为突出&#xff0c;尤其在复杂环境或突发事件中需要保障指挥调度的实时性和稳定性&#xff1a; ** 一、行业…...

冒泡排序、插入排序、快速排序、堆排序、希尔排序、归并排序

目录 冒泡排序插入排序快速排序(未优化版本)快速排序(优化版本)堆排序希尔排序归并排序各排序时间消耗对比 冒泡排序 冒泡排序核心逻辑就是对数组从第一个位置开始进行遍历&#xff0c;如果发现该元素比下一个元素大&#xff0c;则交换位置&#xff0c;如果不大&#xff0c;就…...

JVM知识

JVM 内存模型 JVM的内存模型介绍一下 根据 JVM8 规范&#xff0c;JVM 运行时内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 JVM的内存结构主要分为以下几个部分&#xff1a; 方法区&#xff1a;存放类对象 Java 虚拟机栈&#xff1a;存放方法之间的调…...

Docker 中多个容器之间的通信

在 Docker 中&#xff0c;多个容器之间的通信可以通过以下几种主要方式实现&#xff0c;具体选择取决于网络需求、隔离性及管理复杂度&#xff1a; 一、自定义 Bridge 网络&#xff08;推荐&#xff09; 通过创建自定义的 Docker 网络&#xff0c;容器可以加入同一网络并通过容…...

docker desktop for windows 登录国内镜像仓库

在使用 Docker Desktop for Windows 时&#xff0c;如果你希望连接到国内的 Docker 镜像仓库&#xff08;例如阿里云、腾讯云等&#xff09;&#xff0c;你可以通过配置 Docker 镜像加速器来实现。以下是一些步骤和示例&#xff0c;帮助你设置 Docker Desktop for Windows 以使…...

【blender小技巧】使用blender的Cats Blender Plugin插件将3D人物模型快速绑定或者修复为标准的人形骨骼

文章目录 前言绑定或者修复人形骨骼1、下载模型2、导入模型到blender中3、删除无用的相机和灯光3、导出模型并在unity中使用 专栏推荐完结 前言 有时候我们下载的3D人物模型&#xff0c;可能不带骨骼信息&#xff0c;或者带一些错乱的骨骼信息。这时候我们就可以使用blender将…...

视频压缩技术学习(不高明版本)

1. 压缩的本质与核心目标​​ 视频压缩的核心在于​​去除冗余信息​​&#xff0c;包括空间冗余&#xff08;相邻像素相关性&#xff09;、时间冗余&#xff08;连续帧相似性&#xff09;以及视觉冗余&#xff08;人眼感知特性&#xff09;。通过算法优化&#xff0c;在保持可…...

在Vue项目中查询所有版本号为 1.1.9 的依赖包名 的具体方法,支持 npm/yarn/pnpm 等主流工具

以下是 在Vue项目中查询所有版本号为 1.1.9 的依赖包名 的具体方法&#xff0c;支持 npm/yarn/pnpm 等主流工具&#xff1a; 一、使用 npm 1. 直接过滤依赖树 npm ls --depth0 | grep "1.1.9"说明&#xff1a; npm ls --depth0&#xff1a;仅显示直接依赖&#xf…...

【Web前端技术】第一节—HTML简介

做出一个属于自己的网站&#xff01; 云边有个稻草人-个人主页 为你&#xff0c;千千万万遍 ——哈桑 目录 一、网页 1.什么是网页&#xff1f; 2. 什么是 HTML&#xff1f; 3. 网页的形成 二、常用浏览器 1. 常用浏览器 2. 浏览器内核 三、Web标准&#xff08;重点&…...

LINUX 416 路由转发1

那干脆先配置一下 boot目录必然是标准分区 配路由转发实验 路由器 计划新建3个虚拟机&#xff0c;分别是主机、节点a、节点b&#xff0c;都时间仅主机模式 路由器网卡IP: 节点a路由表 这次装载了附件&#xff0c;桌面安装模式&#xff0c;不用像 最小化安装模式那样折…...

【音视频开发】第四章 SDL音视频渲染

【音视频开发】第四章 SDL音视频渲染 文章目录 【音视频开发】第四章 SDL音视频渲染一、简介1.什么是 SDL 二、Windows 环境搭建三、SDL 子系统四、Window 显示1.SDL 视频显示函数简介2.窗口渲染结构体 五、SDL 事件1.通用事件结构体 SDL_Event2.事件类型 六、SDL 线程1.常用线…...

音频基础概念

声音 物体在一定的振动频率下产生了声音。声音可以被分解为不同频率不同强度正弦波的叠加。 声音三要素 声调 音调: 由发声体振动的频率决定&#xff0c;频率越高&#xff08;振动越快&#xff09;则音调越高&#xff0c;听起来就越“刺耳”&#xff0c;反之音调越低、听起…...

rust编程学习(二):复合数据类型

复合数据类型是由其他类型组合而成的类型。Rust的复合数据类型有元组、数组、结构体、枚举等&#xff0c; 通过一些简单的例子帮助大家快速了解Rust复合类型。 1 元组类型 元组类型是由一个或多个类型的元素组合成的复合类型&#xff0c;使用小括号“()”把所有元素放在一起。…...