leetcode-hot-100(哈希)
写在前面
这部分官方标记为哈希,下面的代码使用的都是 C++ 进行实现,说到 C++ 中的哈希,需要了解一下 C++ 中的 hashtable(std::unordered_map或std::unordered_set)。
std::unordered_map
std::unordered_map 是一个存储键值对的容器,它允许通过键快速访问元素。这里的“快速”是指平均情况下常数时间复杂度O(1)的操作,因为它是基于哈希表实现的。
std::unordered_set
std::unordered_set与std::unordered_map类似,但它只存储键而不存储对应的值,适用于需要唯一键的场景。
1. 两数之和
题目链接:两数之和
题目描述:
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
解答:
第一种,暴力破解:
对于这种题目,第一的想法就是上双重循环,然后进行判断,也就是上双重循环,然后设置两个指针,进行查找,对应的代码如下:
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int len = nums.size();for (int i = 0; i < len; i++) {for (int j = i + 1; j < len; j++) {if (nums[i] + nums[j] == target)return {i, j};}}return {}; // 没找到时返回空数组}
};
显然,要是学过数据结构的知道,这样的话,时间复杂度就比较的高。
复杂度分析
- 时间复杂度: O ( N 2 ) O(N^2) O(N2),其中 N N N 是数组中的元素数量。最坏情况下数组中任意两个数都要被匹配一次。
- 空间复杂度: O ( 1 ) O(1) O(1)。
第二种,排序后求解
第一种的结果虽然可行,但是其时间复杂度比较高,因此我们还需优化,于是我们不得不考虑其他的方式了,学过排序的我们又想到一种方式,能不能使用高效的排序将 vector& nums 中的数据进行排序后再操作啊?,好,于是基于上述思想,编写代码如下:
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {sort(nums.begin(), nums.end()); // 排序int left = 0;int right = nums.size() - 1;while (left < right) {if (nums[left] + nums[right] == target)return {left, right};else if (nums[left] + nums[right] < target)left++;elseright--;}return {};}
};
嗯,逻辑非常清晰,但是结果提交,发现,错了!!?
为啥,我们看题目,发现需要返回的是原数组的原始下标,但是结果你上述将数组中数据的位置给改变了,虽然相加确实等于目标值,但是在原数组中的位置就被改变了。
要是我们还是想使用这个排序,又该当如何呢?
答:可以先将每个元素及其原始索引保存为一个 pair,然后排序这些 pair,再用双指针找答案
如下:
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {vector<pair<int, int>> pairs; // {value, index}for (int i = 0; i < nums.size(); ++i) {pairs.push_back({nums[i], i});}// 按照数值排序 pairs,原始的 nums 不能动sort(pairs.begin(), pairs.end());int left = 0, right = nums.size() - 1;while (left < right) {int sum = pairs[left].first + pairs[right].first;if (sum == target) {return {pairs[left].second, pairs[right].second};} else if (sum < target) {left++;} else {right--;}}return {};}
};
上述代码就可以了。下面大致看看复杂度:
- 时间复杂度: O ( n l o g n ) O(n log n) O(nlogn): 整体的时间复杂度主要由排序步骤决定
- 空间复杂度: O ( n ) O(n) O(n) : 需要额外的 O ( n ) O(n) O(n) 空间来存储 p a i r s pairs pairs 向量
第三种,哈希
OK,要是你的要求比较高,觉得上述 O ( n l o g n ) O(n log n) O(nlogn) 时间复杂度还是高了,那有没有更低的时间复杂度?有的,兄弟,下面就是最主要的解题方式了。
可以利用一个 哈希表(unordered_map) 来存储已经访问过的数值及其对应的索引.
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> map; // 存储值 -> 下标的映射for (int i = 0; i < nums.size(); ++i) {int complement = target - nums[i];if (map.count(complement)) {return {map[complement], i};}map[nums[i]] = i;}return {}; // 没找到}
};
官方的实现也差不多:
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> hashtable;for (int i = 0; i < nums.size(); ++i) {auto it = hashtable.find(target - nums[i]);if (it != hashtable.end()) {return {it->second, i};}hashtable[nums[i]] = i;}return {};}
};
比较一下上述编写的三种方式及适用场景:
场景 | 是否需要排序 | 返回原始索引? | 使用方法 |
---|---|---|---|
只需值 | 是 | 否 | 直接排序+双指针 |
需要原始索引 | 是 | 是 | 先存成 pair 再排序 |
不允许修改原数组 | 否 | 是 | 建立副本或哈希表 |
2. 字母异位词分组
题目链接:字母异位词分组
题目描述:
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
解答:
看到这题,我首先想到的思路就是将每个字符串中的字符按照从 a a a 到 z z z 的先后顺序进行排列。(当然这个排列也是不能再原来的数据结构上进行操作的,需要复制原来的数据结构,然后在复制好的基础上进行操作。),然后要是排列后字符串相同的就放在一起。
但是,思想有了,不知道如何编码,哎。
别急,要是我们实在是不会,可以看看官方的题解,只要将官方的题解吃透,也就是相当于算法是我们想出来的。
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {// 创建一个哈希表(unordered_map),键是排序后的字符串,值是一个字符串向量,// 用于存储所有字母相同但顺序不同的字符串(即异位词)。unordered_map<string, vector<string>> mp;// 遍历输入的字符串数组for (string& str : strs) {// 复制当前字符串,避免对原有的数据结构进行操作string key = str;// 对复制的字符串进行排序,这样所有的异位词在排序后都会变成相同的字符串。sort(key.begin(), key.end());// 将原始字符串添加到哈希表中对应的排序字符串的列表里。// 这样,所有排序结果相同的字符串将被分组在一起。mp[key].emplace_back(str);}// 创建一个二维字符串向量,用于存储最终的结果。vector<vector<string>> ans;// 遍历哈希表中的所有元素for (auto it = mp.begin(); it != mp.end(); ++it) {// 将每组异位词(即哈希表中每个键对应的值)添加到结果向量中。// emplace_back 直接构造并插入,避免不必要的拷贝或移动操作。ans.emplace_back(it->second);}// 返回最终的分组结果return ans;}
};
官方还给出来计数这一解题方法:
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {// 自定义对 array<int, 26> 类型的哈希函数auto arrayHash = [fn = hash<int>{}] (const array<int, 26>& arr) -> size_t {return accumulate(arr.begin(), arr.end(), 0u, [&](size_t acc, int num) {return (acc << 1) ^ fn(num);});};unordered_map<array<int, 26>, vector<string>, decltype(arrayHash)> mp(0, arrayHash);for (string& str: strs) {array<int, 26> counts{};int length = str.length();for (int i = 0; i < length; ++i) {counts[str[i] - 'a'] ++;}mp[counts].emplace_back(str);}vector<vector<string>> ans;for (auto it = mp.begin(); it != mp.end(); ++it) {ans.emplace_back(it->second);}return ans;}
};
根据其思想写的代码如下:
下面的代码原理就是构造类似于
“aab” -> a2b1
“abc” -> a1b1c1
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string, vector<string>> map;for (string& str : strs) {int counts[26] = {0};for (char c : str) {counts[c - 'a']++;}// 构造 key:包含字符和其数量string key;for (int i = 0; i < 26; ++i) {if (counts[i] > 0) {key += ('a' + i);key += to_string(counts[i]);}}map[key].push_back(str);}vector<vector<string>> ans;for (auto& p : map) {ans.push_back(p.second);}return ans;}
};
因为要是只是简单的编写如下这样的代码:
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string, vector<string>> map;for (string str : strs){int counts[26] = {0};for (char c : str){counts[c - 'a']++;}string key = "";for (int i = 0; i < 26; i++){if (counts[i] != 0){key.push_back(i + 'a');}}map[key].push_back(str);}vector < vector<string>> ans;for (auto &p : map){ans.push_back(p.second);}return ans;}
};
错误发生的位置:构造 key 的方式不对,如下
int counts[26] = {0};
for (char c : str) {counts[c - 'a']++;
}
string key = "";
for (int i = 0; i < 26; i++) {if (counts[i] != 0) {key.push_back(i + 'a');}
}//"aba" 和 "baa" 都会变成 "ab"
//"aab" 也会变成 "ab"
//这会导致不同的异位词被错误地归为一组!
因此,还是第一种直接使用字符排序法更加的方便与简洁。
3. 最长连续序列
题目链接:字母异位词分组
题目描述:给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
解答
这道题目好像是放在哈希里面的,但是我一开始想到的解决当时居然不是哈希,而是通过动态规划进行求解。具体的思路就是将原来的数组进行排序,然后在依次比较对应位置的值,当然,注意边界处理即可。具体代码如下:
class Solution {
public:int longestConsecutive(vector<int>& nums) {if (nums.size() <= 1)return nums.size();sort(nums.begin(), nums.end());int maxLen = 1;int currLen = 1;for (int i = 0; i < nums.size() - 1; ++i) {if (nums[i] == nums[i + 1] - 1) {currLen++;maxLen = max(maxLen, currLen);} else if (nums[i] != nums[i + 1]) { // 跳过重复数字currLen = 1;}// 如果是重复数字(nums[i] == nums[i+1]),不做任何操作,继续循环}return maxLen;}
};
但是呢,要是实在是想使用哈希的话,我试一下看看,
class Solution {
public:int longestConsecutive(vector<int>& nums) {// 将输入数组中的所有元素存入一个哈希集合中// unordered_set 支持 O(1) 时间复杂度的查找操作unordered_set<int> numSet(nums.begin(), nums.end());// 用于记录当前找到的最长连续序列的长度int longest = 0;// 遍历集合中的每一个数字for (int num : numSet) {// 判断当前数字是否是某个连续序列的起点// 如果 num - 1 不在集合中,则说明 num 是一个连续序列的起点if (numSet.find(num - 1) == numSet.end()) {int currentNum = num; // 当前连续序列的起始数字int length = 1; // 当前连续序列的长度,初始为 1// 向后查找连续递增的整数// 只要 currentNum + 1 存在于集合中,就继续扩展序列while (numSet.find(currentNum + 1) != numSet.end()) {currentNum++; // 移动到下一个连续整数length++; // 序列长度加一}// 比较并更新全局最长连续序列长度longest = max(longest, length);}}// 返回最终找到的最长连续序列的长度return longest;}
};
说实话,差不多,还是需要动态规划。
关于哈希的好像就这三道题。
相关文章:
leetcode-hot-100(哈希)
写在前面 这部分官方标记为哈希,下面的代码使用的都是 C 进行实现,说到 C 中的哈希,需要了解一下 C 中的 hashtable(std::unordered_map或std::unordered_set)。 std::unordered_map std::unordered_map 是一个存储…...
音频类网站或者资讯总结
我爱音频网: 我爱音频网 - 我们只谈音频,丰富的TWS真无线蓝牙耳机拆解报告 (52audio.com) 其他更多资讯 音频行业全品类深度剖析,2024市场趋势解读汇总-EDN 电子技术设计 (ednchina.com)...
优选算法——前缀和
目录 1. 数组的中心下标 2. 除自身以外数组的乘积 3. 和为k的子数组 4. 和可被K整除的子数组 5. 连续数组 6. 矩阵区域和 1. 数组的中心下标 题目链接:724. 寻找数组的中心下标 - 力扣(LeetCode) 题目展示: 题目分析&am…...
VScode密钥(公钥,私钥)实现免密登录【很细,很全,附带一些没免密登录成功的一些解决方法】
一、 生成SSH密钥对 ssh-keygen 或者 ssh-keygen -t rsa -b 4096区别:-t rsa可以明确表示生成的是 RSA 类型的密钥-b参数将密钥长度设置为 4096 位默认:2048 位密钥不指定-t参数,ssh -keygen默认也可能生成 RSA 密钥【确保本机安装ssh&#…...
MySQL进阶篇2_SQL优化、锁
文章目录 1 SQL优化1.1插入数据优化1.2主键优化页分裂页合并主键设计原则 1.3order by设计优化1.4group by设计优化小理解 1.5limit设计优化顺序IO和随机IO小疑惑 1.6count设计优化1.7update优化关于隐式事务事务的DML操作 锁全局锁表级锁表锁元数据锁意向锁 行级锁锁的释放条件…...
Yocto项目实战经验总结:从入门到高级的全面概览
本文面向开发者和实际项目经验者,分享经过大量实战积累的 Yocto 项目工程经验和基础技巧。本文简明但精彩,应用和观察相结合,充分适合做为全面进阶 Yocto 项目开发的实用指南。 一、入门理解:Yocto 是什么?规划如何开始…...
关于web3
主流看法,集合当前网络上的大部分资料的看法? 基于区块链运行的交易系统?面向的交易市场是基于世界的,由于将整个世界的交易联系起来,所以底层区块链就类似于一个非常大的分布式系统,由于需要在各个地区都…...
以影像为笔,劳润智在世界舞台上书写艺术之路
在光影交织中,摄影师劳润智的镜头仿佛能穿透喧嚣,捕捉人类情感最细腻的脉动。从疫情下洛杉矶裁缝日常的温馨瞬间,到象征自由与解脱的飞鸟影像,再到探索时间与空间交错的抽象作品,每一幅作品都展现了他对艺术的深度追求与对生活的温柔洞察。 劳润智的作品为他赢得了多个国际奖项…...
2025python学习笔记
一.Python语言基础入门 第一章 01.初识Python Python的起源: 1989年,为了打发圣诞节假期,Gudio van Rossum吉多范罗苏姆(龟叔)决心开发一个新的解释程序(Python维形)1991年,第一个…...
数学相关使用笔记
1、样本标准差计算步骤整理 1. 基础数据 数据样本:[44.530, 44.023, 43.837, 44.213, 44.498] 样本量:n5 2. 计算步骤 (1) 求均值 总和 44.53044.02343.83744.21344.498 221.101 均值 221.101/5 44.2202 (2) 求平方差 ① (44.530-44.2202) 0.3…...
0.环境初始化
容器化部署 Nginx 前端文件在 html\hmdp 下,挂载到 /usr/share/nginx/html 下 所以要求 nginx.conf : root /usr/share/nginx/html; index index.html; 反向代理:proxy_pass http://host.docker.internal:8081; listen 80; 因为容器内端…...
数仓-范式建模、维度建模、雪花模型、星型模型对比及其适用范围
1. 范式建模 定义 范式建模是一种基于关系型数据库设计的建模方法,遵循数据库的范式规则(如第一范式、第二范式、第三范式等),通过消除数据冗余、规范化字段和表结构来优化存储。数据被分解为多个表,通过外键关系进行…...
批量导出docker镜像
#!/bin/bash # 创建备份目录 BACKUP_DIR"docker_images_single_backup" mkdir -p "$BACKUP_DIR" # 遍历所有镜像 docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" | while read -r line; do # 提取镜像名称和ID REPO_TAG$(echo …...
棒球裁判员学习指南·棒球1号位
针对棒球裁判员的规则学习与能力提升指南,包含系统性学习路径和实践建议,帮助裁判员高效掌握规则并提升执法水平: 一、基础规则体系构建 1. 官方规则精读 核心文件:完整研读《世界棒垒球联盟(WBSC)官方规…...
vue注册用户使用v-model实现数据双向绑定
定义数据模型 Login.vue //定义数据模型 const registerData ref({username: ,password: ,confirmPassword: })使用 v-model 实现数据模型的key与注册表单中的元素之间的双向绑定 <!-- 注册表单 --><el-form ref"form" size"large" autocompl…...
BM14 链表的奇偶重排
20250510 题目我的解法❗️问题描述:为什么会报 OutOfMemoryError?🔍详细分析✅如何修复?✅推荐修改方案(正确版本)✅为什么这样改有效?🧪测试示例✅总结 修改 题目 我的解法 impor…...
Client 和 Server 的关系理解
client.py 和 server.py 是基于 MCP(Multi-Component Protocol)协议的客户端-服务端架构,二者的关系如下: 1. 角色分工 server.py:服务端,负责注册和实现各种“工具函数”(如新闻检索、情感分…...
Checkmk实战指南:从零构建企业级监控系统
在当今复杂的IT环境中,监控系统如同运维团队的"眼睛"和"耳朵",而Checkmk正是一款能够帮助企业实现全方位监控的开源利器。本文将带您从零开始,通过8个关键步骤构建一个功能完备的监控系统,涵盖从安装部署到高级优化的完整流程。 一、为什么选择Checkm…...
多模态大模型中的视觉分词器(Tokenizer)前沿研究介绍
文章目录 引言MAETok背景方法介绍高斯混合模型(GMM)分析模型架构 实验分析总结 FlexTok背景方法介绍模型架构 实验分析总结 Emu3背景方法介绍模型架构训练细节 实验分析总结 InternVL2.5背景方法介绍模型架构 实验分析总结 LLAVA-MINI背景方法介绍出发点…...
车载电子电器架构 --- 汽车网关概述
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
JVM对象创建内存分配
对象创建的主要流程: 检查加载类–》分配内存–》初始化–》设置对象头–》实例化,执行init方法。 在内存分配中,虚拟机将为新生对象内存分配 Minor GC : 新生代垃圾收集,特点是频繁,回收速度快; Full GC …...
project从入门到精通(五)
目录 创建资源的基本信息 在project中创建资源工作表 编辑信息详解 最大单位 标准费率与加班费率 每次使用成本 成本累算 基准日历 三类资源工作表的总结——不同的资源必须要设置的属性 除了资源名称是必须设置的之外,剩余的资源的可设置选项如下图所…...
研发效率破局之道阅读总结(5)管理文化
研发效率破局之道阅读总结(5)管理文化 Author: Once Day Date: 2025年5月10日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 程序的艺术_Once-Day…...
Java常用类概述
Java常用类概述 一、字符串三剑客1. String(不可变字符串)2. StringBuilder(可变,线程不安全)3. StringBuffer(可变,线程安全) 二、日期时间类(重点掌握新版APIÿ…...
202535| Kafka架构与重要概念+幂等性+事务
好的!以下是关于 Kafka 架构 以及其 重要概念 的详细介绍,结合 Mermaid 图形 和 表格,帮助你更好地理解各个概念的关系和作用。 Kafka 架构与重要概念 Kafka 是一个分布式消息系统,广泛应用于日志收集、流处理、事件驱动架构等场…...
MySQL 索引和事务
目录 一、MySQL 索引介绍 1、索引概述 2、索引作用 3、索引的分类 (1)普通索引 (2)唯一索引 (3)主键索引 (4)组合索引(最左前缀) (5&…...
IPFS与去中心化存储:重塑数字世界的基石
引言 在数据爆炸式增长的数字时代,中心化存储的弊端日益凸显——数据垄断、隐私泄露、单点故障等问题频发。IPFS(InterPlanetary File System) 作为一种去中心化存储协议,正与区块链技术共同推动一场存储革命。本文将深入解析IPF…...
Web3 学习全流程攻略
目录 🧭 Web3 学习全流程攻略 🌱 第一阶段:打好基础(Web3 入门) 🧠 目标: 📚 学习内容: ✅ 推荐资源: 🧑💻 第二阶段:技术栈搭建(成为 Web3 开发者) 🧠 目标: 📚 学习内容: ✅ 推荐资源: 🌐 第三阶段:构建完整 DApp(去中心化应用)…...
AUTODL Chatglm2 langchain 部署大模型聊天助手
资源申请 注册登录 进入下面的链接 AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDLAutoDL为您提供专业的GPU租用服务,秒级计费、稳定好用,高规格机房,7x24小时服务。更有算法复现社区,一键复现算法。https://autodl.com/ho…...
牛客练习赛138
牛客练习赛138 A.小s的签到题 思路:过题人数最多的就是签到题 #include <bits/stdc.h> using namespace std; typedef long long ll; typedef pair<int, char> PII;bool cmp(PII a, PII b) {return a.first > b.first; }void solve() {int n;cin …...
【脑机接口临床】脑机接口手术的风险?脑机接口手术的应用场景?脑机接口手术如何实现偏瘫康复?
脑机接口的应用 通常对脑机接口感兴趣的两类人群,一类是适应症患者 ,另一类是科技爱好者。 1 意念控制外部设备 常见的外部设备有:外骨骼、机械手、辅助康复设备、电刺激设备、电脑光标、轮椅。 2 辅助偏瘫康复或辅助脊髓损伤患者意念控制…...
普通IT的股票交易成长史--股价起伏的真相-缺口(2)
声明:本文章的内容只是自己学习的总结,不构成投资建议。价格行为理论学习可参考简介中的几位,感谢他们的无私奉献。 送给自己的话: 仓位就是生命,绝对不能满仓!!!!&…...
基于NI-PXI的HIL系统开发
基于NI-PXI平台的汽车电控单元HIL系统开发全解析 引言:HIL系统如何成为汽车电控开发的“效率倍增器”? 某车企通过基于NI-PXI的HIL系统,将悬架控制器的测试周期从3个月压缩至2周,故障检出率提升65%。这背后是硬件在环技术对汽车电…...
IOC和Bean
IOC IOC将对象的创建,依赖关系的管理和生命周期的控制从应用程序代码中解耦出来了 IOC容器的依赖注入(DI) 在程序运行过程中动态的向某个对象中注入他所需要的其他对象 依赖注入是基于反射实现的 Spring IOC 容器使用的是Map(concorrentMapÿ…...
助力你的Neovim!轻松管理开发工具的魔法包管理器来了!
在现代编程环境中,Neovim 已经成为许多开发者的编辑器选择。而针对 Neovim 的各种插件与功能扩展,则是提升开发体验的重要手段。今天我们要介绍的就是一个强大而便捷的开源项目——mason.nvim,一个旨在简化和优化 Neovim 使用体验的便携式包管…...
AI与机器人学:从SLAM到导航的未来
AI与机器人学:从SLAM到导航的未来 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 AI与机器人学:从SLAM到导航的未来摘要引言技术路线对比1. 传感器融合架构:纯激光 vs 多模态2. …...
C++学习之模板初阶学习
今天我们来学习C中模板的学习。但是模板是C中比较难的部分,因此本节我们直接出相对比较初阶的部分。 目录 泛型编程 函数模板 函数模板格式 函数模板的原理 函数模板的特性 函数模板的实例化 模板参数的匹配原则 类模板 类模板定义格式 类模板实例化 泛型…...
专业级软件卸载工具:免费使用,彻底卸载无残留!
在数字生活节奏日益加快的今天,我们的电脑就像每天都在"吃进"各种软件。但您是否注意到,那些看似消失的程序其实悄悄留下了大量冗余文件?就像厨房角落里积攒的调味瓶空罐,日积月累就会让系统变得"消化不良"。…...
JSON|cJSON 介绍以及具体项目编写
一、JSON介绍 JSON(JavaScript Object Notation 即JavaScript对象表示法)是一种轻量级的数据交换格式。采用完全独立于编程语言的文本格式来存储和表示数据。 JSON是一种数据交换格式.JSON独立于编程语言(你不必学习JavaScript).JSON表达数据的方式对通…...
Cell | 大规模 单细胞图谱 揭示非小细胞肺癌抗PD-1治疗后的免疫微环境异质性
–https://doi.org/10.1016/j.cell.2025.03.018 A single-cell atlas reveals immune heterogeneity in anti-PD-1-treated non-small cell lung cancer 留意更多内容:组学之心 研究简介 背景与问题 非小细胞肺癌(NSCLC)术后复发率高。新…...
光流 | 基于深度学习的光流估计算法汇总,原理,公式,流程图,代码
基于深度学习的光流算法 一、光流估计的基本原理二、基于深度学习的光流估计算法1. **FlowNet系列**2. **FlowNet 2.0**3. **PWC-Net**4. **RAFT(Recurrent All-Pairs Field Transformers)**5. **LiteFlowNet系列**三、算法流程图示例FlowNet2.0架构PWC-Net金字塔处理流程四、…...
常见的算法介绍
算法概述线性回归(Linear Regression)线性回归是一种通过属性的线性结合来进行预测的线性模型, 其目的是找到一条直线, 一个平面或者更高维的超平面, 使预测值和真实值之间的误差最小化逻辑回归(Logistic Regression)逻辑回归是一种分类模型, 入二分类公式 P ( Y 1 ∣ X ) e …...
【基于 LangChain 的异步天气查询1】异步调用 Open-Meteo API 查询该城市当前气温
目录 一、功能概述 二、文件结构 三、城市天气实时查询(运行代码) weather_runnable.py main.py 运行结果 四、技术亮点 五、使用场景 一、功能概述 它实现了以下主要功能: 用户输入地点(城市名) 构造提示词…...
深入解析JavaScript变量作用域:var、let、const全攻略
在JavaScript中,变量作用域是一个核心概念,它决定了变量的可访问性和生命周期。理解变量作用域对于编写清晰、高效且无错误的代码至关重要。本文将深入探讨JavaScript中不同类型的变量声明方式(var、let、const等),分析…...
C33-函数嵌套及编码实战
我们以一个编程题目的实践来学习此部分内容 题目:输入四个数,以函数的方式找出最大值 思维:使用两个数找出较大值→较大值与第三个数比较得出新的较大值→新的较大值与第四个数比较得出最大值 代码 #include <stdio.h>//内层函数的封装int GetMaxFromTwoNums(int a,int…...
clangd与clang-tidy
Clangd是基于Clang的Language Server,主要用于提供代码补全、跳转定义、错误提示等IDE功能。而Clang-Tidy则是静态代码分析工具,用于检查代码中的潜在问题,比如风格违规、潜在bug等。 clangd 核心工作原理 1. 基于编译器的精准解析 底层引擎…...
【Linux】冯诺依曼体系结构和操作系统的理解
目录 冯诺依曼体系结构一个例子来深入理解 初识操作系统操作系统的作用设计操作系统的目的操作系统之上和之下分别有啥 管理的精髓,先描述,再组织 冯诺依曼体系结构 我们知道,计算机这个东西发明出来就是帮助人们快速解决问题的。那如果我们想…...
Windows系统Jenkins企业级实战
目标 在Windows操作系统上使用Jenkins完成代码的自动拉取、编译、打包、发布工作。 实施 1.安装Java开发工具包(JDK) Jenkins是基于Java的应用程序,因此需要先安装JDK。可以从Oracle官网或OpenJDK下载适合的JDK版本。推荐java17版本&#x…...
服务预热原理
Java、Spring、Springboot工程启动后,第一次访问比较慢,而从第二次访问开始就快很多,这通常是由以下几个原因导致的: 类加载与初始化开销 类加载过程:Java程序在启动时需要加载大量的类文件到内存中,包括…...
Python核心编程深度解析:作用域、递归与匿名函数的工程实践
引言 Python作为现代编程语言的代表,其作用域管理、递归算法和匿名函数机制是构建高质量代码的核心要素。本文基于Python 3.11环境,结合工业级开发实践,深入探讨变量作用域的内在逻辑、递归算法的优化策略以及匿名函数的高效应用,…...