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

【LeetCodehHot100_0x01】

LeetCodeHot100_0x01

1. 两数之和

解题思路: 暴力枚举法、哈希法
【暴力枚举】

class Solution {public int[] twoSum(int[] nums, int target) {int n = nums.length;for(int i=0;i<n;i++) {for(int j=i+1;j<n;j++) {if(nums[i] + nums[j] == target) {return new int[] {i,j};}}}return new int[0];}
}

【哈希法】要找 x + y = targer,则对于每一个x,只需要用哈希判断存不存在 y = targer - x;

class Solution {public int[] twoSum(int[] nums, int target) {// 存储值(键) + 下标Map<Integer,Integer> hs = new HashMap<>();for(int i=0;i<nums.length;i++) {// containsKey 方法用于寻找键是否存在if(hs.containsKey(target-nums[i])) {return new int[]{i,hs.get(target-nums[i])};}// 将当前映射哈希表hs.put(nums[i],i);}return new int[0];}
}

复习: HashMap数据结构、常用方法、使用场景

一、底层数据结构

  • HashMap 的底层由 数组 + 链表 + 红黑树 组成,核心设计目标是解决哈希冲突并保证高效操作。
  • 数组:默认长度16,长度始终是2的幂次方,每个元素都是一个桶,上面连接着链表或红黑树
  • 链表:解决哈希冲突,使用链地址法(尾插法避免并发场景死循环)
  • 红黑树:链表长度大于8转换,小于6退化。用于优化查询效率:O(n) —> O(logn)

二、常用方法

Map<R,V> hs = new HashMap<R,V>(); // 声明
put(K key, V value)     // 添加键值对
get(K key)                   // 获取值
containsKey(K key)      // 判断键是否存在
keySet()                // 获取所有键的集合
values()                // 获取所有值的集合
entrySet()              // 获取所有键值对
getOrDefault(K key, V defaultValue) // 安全获取值

三、使用场景: 快速插入/查询、统计频率


2. 字母异位词分词

解题思路: 将字符串排序后作为哈希的键,值则为已经符合的字符串列表
【哈希法】关键在于如何对字符串进行排序、如何更新已有的字符串列表

class Solution {public List<List<String>> groupAnagrams(String[] strs) {// 排序后作为哈希的键,值为存储相同的字符串列表Map<String,List<String>> hs = new HashMap<>();for(String str : strs) {// 取出字符串进行排序char[] str_ = str.toCharArray();Arrays.sort(str_);String key = new String(str_);// 取出该键中已有的字符串列表// 这里犯了一个错,这个列表可能是空的,后面会报错,需要用getOrDefault方法安全取值// List<String> str_list = hs.get(key);List<String> str_list = hs.getOrDefault(key,new ArrayList<>());str_list.add(str);hs.put(key,str_list);}List<List<String>> resList = new ArrayList<>(hs.values());return resList;}
}

复习: 对字符串进行排序思路

对字符串内的字符排序(例如将 “cab” 排序为 “abc”)
方法 1:字符数组排序(最常用)

String str = "cab";
char[] chars = str.toCharArray();
Arrays.sort(chars); // 默认升序排序
String sortedStr = new String(chars); // "abc"

方法 2:使用 Java 8 Stream API

String str = "cab";
String sortedStr = str.chars() // 转为 IntStream.sorted() // 对字符的 Unicode 值排序.collect(StringBuilder::new,StringBuilder::appendCodePoint,StringBuilder::append
).toString(); // "abc"

方法 3:转换为列表排序

String str = "cab";
List<Character> charList = new ArrayList<>();
for (char c : str.toCharArray()) {charList.add(c);
}
Collections.sort(charList); // 升序排序
StringBuilder sb = new StringBuilder();
for (Character c : charList) {sb.append(c);
}
String sortedStr = sb.toString(); // "abc"

3. 最长连续序列

解题思路: 用哈希存下来,然后遍历哈希列表,找到最长连续的序列,其长度就是答案
【哈希法】

class Solution {public int longestConsecutive(int[] nums) {// 哈希 ---> Set版去重Set<Integer> hs = new HashSet<>();for(int num : nums) {// 加入哈希hs.add(num);}int res = 0;    // 记录答案for(int num : hs) {// 查看hs中有多少个连续的值if(!hs.contains(num-1)) { // 重新规划起点int currN = num;int currC = 1;// 开始匹配while(hs.contains(currN + 1)) {currN ++;currC ++;}res = Math.max(res,currC);} }return res;}
}

【动态规划法】定义动规:fn[i] : 以第i个元素结尾的最大值,转移存在以下关系:

  • ==1 : fn[i] = fn[i-1] + 1;
  • ==0 : fn[i] = fn[i-1];
  • order : fn[i] = 1;
class Solution {public int longestConsecutive(int[] nums) {// 排序 + 动态规划//1. 排除边界值if(nums.length == 1) return 1;if(nums.length == 0) return 0;//2. 排序Arrays.sort(nums);//3. 定义动规方程意义(fn[i] 以第i个元素结尾中最大的连续值长度)int []fn = new int[nums.length];//4. 初始化值fn[0] = 1;int res = fn[0];//5. 遍历更新方程for(int i=1;i<nums.length;i++) {if(nums[i] - nums[i-1] == 1) {fn[i] = fn[i-1] + 1; }else if(nums[i] == nums[i-1]) {fn[i] = fn[i-1];}else {fn[i] = 1;}res = Math.max(res,fn[i]);}return res;} 
}

复习: HashSet常用方法

HashSet(基于 HashMap)
特点:无序,插入/查询 O(1)
常用方法

add(E e)                // 添加元素
remove(Object o)        // 删除元素
contains(Object o)      // 是否包含元素

  1. TreeSet(基于 TreeMap)
    特点:元素有序(自然排序或自定义 Comparator),插入/查询 O(log n)
    特有方法
first(), last()         // 最小/最大元素
ceiling(E e), floor(E e) // 类似 TreeMap

4. 移动零

解题思路: 整体向前偏移,在最后补若干零

class Solution {public void moveZeroes(int[] nums) {// 整体偏移int i = 0;  // 记录非零值指针// 将前面变成非零,后面变成0for(int j=0;j<nums.length;j++) {if(nums[j] != 0) nums[i++] = nums[j];}for(int k = i;k<nums.length;k++) {nums[k] = 0;}}
}

5、盛最多水的容器

解题思路: 双指针,不断缩小容器宽度,记录过程中的最优解
【双指针法】:关键:移动策略:哪边短移动哪边。

class Solution {public int maxArea(int[] height) {// 认识:(长 * 宽)Max、木桶效应// 双端指针,靠近过程必然宽会变小,长要扩大才有最优// 移动那边?肯定是短板的一端移动更优int len = height.length;int res = (len-1) * Math.min(height[0] ,height[len-1]);int i=0,j=len-1;while(i<j) {if(height[i] >= height[j]) j--;else i++;int temp = (j-i)*Math.min(height[i],height[j]);res = Math.max(res,temp);}return res;}
}

6、三数之和(不熟)

解题思路: 使用暴力法无法通过,遇到了时间复杂度问题过高。正确的做法因该是用双指针
【暴力法】超出时间限制 308 / 313 个通过的测试用例

  • 首先通过排序将重复项聚集,便于后续去重;接着通过三重循环枚举所有不重复的三元组。
class Solution {public List<List<Integer>> threeSum(int[] nums) {// 排序 + 暴力枚举所有可能List<List<Integer>> reslist = new ArrayList<>();Arrays.sort(nums);for(int i=0;i<nums.length-2;i++) {// 去重1:if(i>0 && nums[i] == nums[i-1])continue;for(int j=i+1;j<nums.length-1;j++) {// 去重2:if(j>i+1 && nums[j] == nums[j-1]) continue;for(int k=j+1;k<nums.length;k++) {// 去重3:if(k >j+1 && nums[k] == nums[k-1]) continue;if(nums[i] + nums[j] + nums[k] == 0) {reslist.add(Arrays.asList(nums[i],nums[j],nums[k]));} }}}return reslist;}
}

【双指针法】

  • 三重循环枚举a+b+c==0,在确定a、b后,c只有唯一的一个值
  • 在确定a后,那么 b + c = -a,也就是说b越大,c越小,两者存在一个关系
  • 于是对于第二重循环和第三重循环,我们可以利用双端指针来寻找在a固定下符合的所有b、c集合
class Solution {public List<List<Integer>> threeSum(int[] nums) {// 排序+ 双指针枚举List<List<Integer>> reslist = new ArrayList<>();Arrays.sort(nums);int n = nums.length;for(int a=0;a<n;a++) {// 去重if(a>0 && nums[a] == nums[a-1]) continue;for(int b=a+1,c=n-1;b<n-1;b++){// 去重if(b > a+1 && nums[b] == nums[b-1])continue;// 枚举符合条件的c(c是从大到小枚举的,界限是直到小于就不符合了)while(c>b && nums[b] + nums[c] > -nums[a])c--;if(c==b)break;  // 找不到if(nums[a] + nums[b] + nums[c] ==0)reslist.add(Arrays.asList(nums[a],nums[b],nums[c]));}}return reslist;}
}

7、接雨水(不会)

求解思路: 提前预处理出当前位置的左边最高高度、右边最高高度,然后与当前位置高度差就是当前位置能够储存水的量。再求和。

class Solution {public int trap(int[] height) {// 这道题目理解完其实不难了,关键你要明白一个问题:i位置的雨水量怎么算?// 取决于(i左边最高 ,i右边最高)min【木桶效应】,记为H// i位置的高度h// i位置能储水 H-h// 所以关键在于如何快速的找到i左边、右边的最高高度---提前预处理出来int n = height.length;if(n==0) return 0;int[] leftMax = new int[n];int[] rightMax = new int[n];leftMax[0] = height[0];rightMax[n-1]=height[n-1];for(int i=1;i<n;i++) {leftMax[i] = Math.max(leftMax[i-1],height[i]);}for(int i=n-2;i>=0;i--){rightMax[i] = Math.max(rightMax[i+1],height[i]);}// 计算每一格可以存水量int res = 0;for(int i=0;i<n;i++) {res += Math.min(leftMax[i],rightMax[i]) - height[i];}return res;}
}

8、无重复字符的最长子串

解题思路: 遍历枚举开头,用哈希表判断过程中符合的最长子串
【哈希法】O(N^2)复杂度,还是不太优美

class Solution {public int lengthOfLongestSubstring(String s) {// 用哈希来判断字符串有没有重复if(s.length() < 2) return s.length();int res = 1;for(int i=0;i<s.length();i++) {//	每次循环都定义一个哈希表,用来判断什么时候出现重复的字符,则该长度终止Map<Character,Boolean> hm = new HashMap<>();hm.put(s.charAt(i),true);int temp = 1;for(int j=i+1;j<s.length();j++) {// 判断是否存在当前键if(hm.containsKey(s.charAt(j))) {break;}else {temp++;hm.put(s.charAt(j),true);}}res = Math.max(res,temp);}return res;}
}

【滑动窗口法】优化思路:假设从k到第rk个元素才发生重复冲突,那么k+1到第rk元素定然没有冲突,我们就可以继续向右扩展,直到出现冲突。重复以往。这个思路的好处是利用公共并不冲突的位置减少了很多判断过程,类似一个滑动的窗口一样。只需要一次遍历就可以得到答案。

class Solution {public int lengthOfLongestSubstring(String s) {int n = s.length();if(n<2)return n;// 滑动窗口Set<Character> hs = new HashSet<>();int j = 0, res = 1; // 定义右指针,初始值为-1for(int i=0;i<n;i++) {// 左边指针右移,跳一个 if(i != 0) {hs.remove(s.charAt(i-1));}// 右移指针直到出现冲突while(j<n && !hs.contains(s.charAt(j))) {hs.add(s.charAt(j));j++;}// 更新答案res = Math.max(res,j-i);}return res;}
}

9、找到字符串中所有字母异位词 (不熟)

解题思路: 这题的解题思路几乎和我想的一样,滑动窗口 + 哈希表维护。需要学习的是它的代码思路,通过Arrays工具类中的equals方法可以快速判断两个数列是否完全相同,真是让我学了一招,这样的话,我们利用数组将字符串p中的字符组成拷贝下来,在维护窗口的过程中,判断更新的s的子串是否也是与p相同的字符组成,是则代表该字符串的开头就是一个答案。

class Solution {public List<Integer> findAnagrams(String s, String p) {// 滑动窗口 + 数组哈希int[] Scnt = new int[26];int[] Pcnt = new int[26];int size = p.length();int n = s.length();if(n < size) return new ArrayList<Integer>();List<Integer> res = new ArrayList<>();for(int i=0;i<size;i++) {Scnt[s.charAt(i)-'a']++;Pcnt[p.charAt(i)-'a']++;}// (不要漏了!!)判断开头是不是原本就符合要求的if(Arrays.equals(Scnt,Pcnt)) {res.add(0);}for(int i=0;i<n-size;i++) { // 枚举当前需要删除的窗口左值Scnt[s.charAt(i)-'a']--;    // 滑动窗口维护左边的字符对应的数量减少Scnt[s.charAt(i+size)-'a']++; // 窗口右侧对应的字符数量增加// 判断字符组成是否完全相同if(Arrays.equals(Scnt,Pcnt)) {res.add(i+1);}}return res;}
}

10、和为K的子数组

求解思路: 暴力两层循环直接过了,不懂
【暴力法】

class Solution {public int subarraySum(int[] nums, int k) {int res = 0;int n = nums.length;// 左边界for(int i=0;i<n;i++) { int sum = nums[i];// 不要漏if(sum == k) {res += 1;// continue;    这个是错误的,虽然已经相等了,但是不能忘记后面可能会有+0的情况}// 右边界for(int j=i+1;j<n;j++) {sum += nums[j];if(sum == k) {res += 1;// break; 这个是错误的,虽然已经相等了,但是后面可能还有 +0 或 正负和为0}}}return res;}
}

11、总结

今天的题目对于我这个小菜鸡来说还是有点难度的。不过每一题都给我学到了一些东西。总体上涉及到哈希表的常用方法和场景、Arrays工具类、动态规划、双指针、滑动窗口等知识点。过两天需要复习巩固!

相关文章:

【LeetCodehHot100_0x01】

LeetCodeHot100_0x01 1. 两数之和 解题思路&#xff1a; 暴力枚举法、哈希法 【暴力枚举】 class Solution {public int[] twoSum(int[] nums, int target) {int n nums.length;for(int i0;i<n;i) {for(int ji1;j<n;j) {if(nums[i] nums[j] target) {return new in…...

Qt::MouseButtons解析

一 问题 今天想自定定义一个QMouseEvent变量,变量的的初始化参数有Qt::MouseButtons,这是个啥?查看类型为QFlags<Qt::MouseButton>。 二 Qt::MouseButton Qt::MouseButton 是 Qt 框架中定义的一个枚举类型(enum),用于表示鼠标事件中的物理按钮。它是 Qt 事件处理…...

跨域问题解释及前后端解决方案(SpringBoot)

一、问题引出 有时,控制台出现如下问题。 二、为什么会有跨域 2.1浏览器同源策略 浏览器的同源策略 &#xff08; Same-origin policy &#xff09;是一种重要的安全机制&#xff0c;用于限制一个源&#xff08; origin &#xff09;的文档或 脚本如何与另一个源的资源进行…...

4-知识图谱的抽取与构建-4_2实体识别与分类

&#x1f31f; 知识图谱的实体识别与分类&#x1f525; &#x1f50d; 什么是实体识别与分类&#xff1f; 实体识别&#xff08;Entity Recognition&#xff09;是从文本中提取出具体的事物&#xff0c;如人名、地名、组织名等。分类&#xff08;Entity Classification&#x…...

腾讯云大模型知识引擎×DeepSeek赋能文旅

腾讯云大模型知识引擎DeepSeek赋能文旅 ——以合肥文旅为例的技术革新与实践路径 一、技术底座&#xff1a;知识引擎与DeepSeek的融合逻辑 腾讯云大模型知识引擎与DeepSeek模型的结合&#xff0c;本质上是**“知识库检索增强生成&#xff08;RAG&#xff09;实时联网能力”**…...

TMDS视频编解码算法

因为使用的是DDR进行传输&#xff0c;即双倍频率采样&#xff0c;故时钟只用是并行数据数据的5倍&#xff0c;而不是10倍。 TMDS算法流程&#xff1a; 视频编码TMDS算法流程实现&#xff1a; timescale 1 ps / 1ps //DVI编码通常用于视频传输&#xff0c;将并行数据转换为适合…...

C++程序员内功修炼——Linux C/C++编程技术汇总

在软件开发的宏大版图中&#xff0c;C 语言宛如一座巍峨的高山&#xff0c;吸引着无数开发者攀登探索。而 Linux 操作系统&#xff0c;以其开源、稳定、高效的特性&#xff0c;成为了众多开发者钟爱的开发平台。将 C 与 Linux 相结合&#xff0c;就如同为开发者配备了一把无坚不…...

【数据结构】链表中快指针和慢指针

目录 一、找出并返回链表的中间结点 二、输出链表中倒数第k个结点 三、判断链表中是否有环 四、两个单链表相交 一、找出并返回链表的中间结点 给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 要求&#xff1a;只遍历…...

6_zookeeper集群配置

配置 一、配置myid文件 # 进入解压好的文件夹下面 touch myid vim myid # master节点写0&#xff0c;slave1节点写1&#xff0c;slave2节点写2二、配置zoo.cfg文件 1.在master节点编辑zookeeper配置文件 # 进入解压好的文件夹下面 cd conf/ cp zoo_sample.cfg zoo.cfg vim …...

Docker核心概念

容器介绍 Docker 是世界领先的软件容器平台&#xff0c;所以想要搞懂 Docker 的概念我们必须先从容器开始说起。 什么是容器? 先来看看容器较为官方的解释 一句话概括容器&#xff1a;容器就是将软件打包成标准化单元&#xff0c;以用于开发、交付和部署。 容器镜像是轻量…...

LD_PRELOAD 绕过 disable_function 学习

借助这位师傅的文章来学习通过LD_PRELOAD来绕过disable_function的原理 【PHP绕过】LD_PRELOAD bypass disable_functions_phpid绕过-CSDN博客 感谢这位师傅的贡献 介绍 静态链接&#xff1a; &#xff08;1&#xff09;举个情景来帮助理解&#xff1a; 假设你要搬家&#x…...

如何用JAVA实现布隆过滤器?

目录 引言 布隆过滤器的原理 1. 核心思想 2. 优缺点 布隆过滤器的使用场景 Java 实现布隆过滤器 1. 实现步骤 2. 代码实现 3. 代码说明 4. 测试结果 布隆过滤器的优化 总结 引言 布隆过滤器&#xff08;Bloom Filter&#xff09;是一种高效的概率数据结构&#xff0…...

游戏开发 游戏开始界面

目录 前言 一 游戏初始化界面的分析 二 游戏的大概框架 三 显示界面的开发 四 完整代码 总结 我们可以来看看游戏初始界面是什么样的 勇士游戏样例 前言 这里是开发游戏的初始界面 一 游戏初始化界面的分析 我们需要一个背景图&#xff0c;开始游戏图标&#xff0…...

Python解析 Flink Job 依赖的checkpoint 路径

引言 Apache Flink 是一个强大的分布式处理框架&#xff0c;广泛用于批处理和流处理任务。其 checkpoint 机制是确保容错的关键功能&#xff0c;允许在计算过程中保存状态&#xff0c;以便在故障时从最近的 checkpoint 恢复。本文详细探讨了一个 Python 脚本&#xff0c;该脚本…...

Javascript网页设计案例:通过PDFLib实现一款PDF分割工具,分割方式自定义-完整源代码,开箱即用

功能预览 一、工具简介 PDF 分割工具支持以下核心功能: 拖放或上传 PDF 文件:用户可以通过拖放或点击上传 PDF 文件。两种分割模式: 指定范围:用户可以指定起始页和结束页,提取特定范围的内容。固定间距:用户可以设置间隔页数(例如每 5 页分割一次),工具会自动完成分…...

计算机视觉算法实战——产品分拣(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ 1. 领域简介✨✨ 产品分拣是工业自动化和物流领域的核心技术&#xff0c;旨在通过机器视觉系统对传送带上的物品进行快速识别、定位和分类&a…...

汽车软件︱AUTO TECH China 2025 广州国际汽车软件与安全技术展览会:开启汽车科技新时代

在汽车产业智能化与网联化飞速发展的当下&#xff0c;汽车软件与安全技术已然成为行业变革的核心驱动力。2025年11月20 - 22日&#xff0c;AUTO TECH China 2025 广州国际汽车软件与安全技术展览会将在广州保利世贸博览馆盛大开幕&#xff0c;这场展会将汇聚行业前沿成果&#…...

Visual Studio打开文件后,中文变乱码的解决方案

文件加载 使用Unicode&#xff08;UTF-8&#xff09;编码加载文件 C:\WorkSpace\Assets\Scripts\UI\View\ExecuteComplateView.cs时&#xff0c;有些字节已用Unicode替换字符替换。保存该文件将不会保留原始文件内容。...

Python爬虫selenium验证-中文识别点选+图片验证码案例

1.获取图片 import re import time import ddddocr import requests from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.wait import WebDriverWait from …...

MySQL后端返回给前端的时间变了(时区问题)

问题&#xff1a;MySQL里的时间例如为2025-01-10 21:19:30&#xff0c;但是返回到前端就变成了2025-01-10 13:19:30&#xff0c;会出现小时不一样或日期变成隔日的问题 一般来说设计字段时会使用datetime字段类型&#xff0c;这是一种用于时间的字段类型&#xff0c;而这个类型…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...

深度解析:etcd 在 Milvus 向量数据库中的关键作用

目录 &#x1f680; 深度解析&#xff1a;etcd 在 Milvus 向量数据库中的关键作用 &#x1f4a1; 什么是 etcd&#xff1f; &#x1f9e0; Milvus 架构简介 &#x1f4e6; etcd 在 Milvus 中的核心作用 &#x1f527; 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...

基于Python的气象数据分析及可视化研究

目录 一.&#x1f981;前言二.&#x1f981;开源代码与组件使用情况说明三.&#x1f981;核心功能1. ✅算法设计2. ✅PyEcharts库3. ✅Flask框架4. ✅爬虫5. ✅部署项目 四.&#x1f981;演示效果1. 管理员模块1.1 用户管理 2. 用户模块2.1 登录系统2.2 查看实时数据2.3 查看天…...