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

【基础算法总结】哈希表/set/map篇

目录

  • 一,哈希表简介
  • 二,算法原理和代码实现
    • 1.两数之和
    • 349.两个数组的交集
    • 面试题01.02.判断是否互为字符重排
    • 217.存在重复元素
    • 219.存在重复元素II
    • 692.前k个高频单词
    • 45.字母异位词分组
  • 三,算法总结

一,哈希表简介

哈希思想是算法中一个十分重要的思想,体现的是一种映射关系,而哈希表就是基于哈希思想实现的存储数据的容器。哈希表的作用是快速查找某个元素,时间复杂度为O(1),时间复杂度为O(n)

使用哈希一般有两种方式:
(1) STL中的 unordered系列容器
(2) 用数组模拟简易哈希表。这种情况一般用于处理字符串中的"字符"或是当数据范围很小的时候使用。

下面将通过若干道题目进一步体会哈希表的使用

二,算法原理和代码实现

1.两数之和

在这里插入图片描述
在这里插入图片描述

算法原理:

(1) 如果我们可以事先将数组内的元素和下标绑定在⼀起存⼊哈希表中,然后直接在哈希表中查找每⼀个元素的 target - nums[i] ,就能快速的找到⽬标和的下标
(2) 这⾥有⼀个⼩技巧,我们可以不⽤将元素全部放⼊到哈希表之后,再来⼆次遍历(因为要处理元素相同的情况)。⽽是在将元素放⼊到哈希表中的同时,直接来检查表中是否已经存在当前元素所对应的⽬标元素(即 target - nums[i] )。如果它存在,那我们已经找到了对应解,并⽴即将其返回。⽆需将元素全部放⼊哈希表中,提⾼效率
(3) 因为哈希表中查找元素的时间复杂度是 O(1) ,遍历⼀遍数组的时间复杂度为 O(N) ,因此可以将时间复杂度降到 O(N)

代码实现:

class Solution 
{
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> hash; // 存元素和对应的下标for(int i = 0; i < nums.size(); i++){// 检查在该元素之前是否存在一个数等于target-nums[i]int x = target - nums[i];if(hash.count(x)) return {hash[x], i};hash[nums[i]] = i; // 不存在就插入}return {-1, -1};}
};

349.两个数组的交集

在这里插入图片描述
在这里插入图片描述

算法原理:

解法1:使用哈希表
定义两个哈希表 hash1 和 hash2 ,把两个数组都扔进哈希表中进行去重,遍历 hash1 中的每个元素,在 hash2 中查找是否存在,若存在就是交集。把交集存入数组里即可

代码实现:

class Solution 
{
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {// 去重unordered_set<int> s1(nums1.begin(), nums1.end());unordered_set<int> s2(nums2.begin(), nums2.end());// 遍历s1,在s2中查找是否存在,若存在就是交集vector<int> ret;for(auto x : s1)if(s2.find(x) != s2.end())ret.push_back(x);return ret;}
};

解法2:使用 set 排序+去重。
这种解法不仅能找出交集,也能找到差集。
把两个数组都扔进 set 容器达到排序+去重的效果,再依次比较两个 set 里的元素,谁小谁++,相等时再同时++,此时相等的元素就是交集,较小的元素就是差集,直到其中一个 set 走完了,另一个 set 剩下的元素也是差集

代码实现:

class Solution
{
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2){// 排序+去重set<int> s1(nums1.begin(), nums1.end());set<int> s2(nums2.begin(), nums2.end());// 依次比较,谁小谁++,相等的就是交集,再同时++auto it1 = s1.begin(), it2 = s2.begin();vector<int> ret;while (it1 != s1.end() && it2 != s2.end()){if (*it1 < *it2) ++it1;else if (*it1 > *it2) ++it2;else ret.push_back(*it1), ++it1, ++it2;}return ret;}
};

面试题01.02.判断是否互为字符重排

在这里插入图片描述
在这里插入图片描述

算法原理:

(1) 当两个字符串的⻓度不相等的时候,是不可能构成互相重排的,直接返回 false
(2) 如果两个字符串能够构成互相重排,那么每个字符串中各个字符出现的次数⼀定是相同的。因此,我们可以分别统计出这两个字符串中各个字符出现的次数,然后逐个⽐较是否相等即可。所以可以选择哈希表来统计字符串中字符出现的次数

代码实现:

class Solution 
{
public:bool CheckPermutation(string s1, string s2) {// 长度不相等,直接返回falseif(s1.size() != s2.size()) return false;int hash1[26] = {0}, hash2[26] = {0};// 先统计s1和s2中每个字符出现得到次数for(auto ch : s1) hash1[ch - 'a']++;for(auto ch : s2) hash2[ch - 'a']++;// 再比较两个哈希表中每个字符出现的次数是否相同for(char ch = 'a'; ch <= 'z'; ch++)if(hash1[ch - 'a'] != hash2[ch - 'a'])return false;return true;}
};

优化:只使用一个哈希表
用一个哈希表先统计s1中每个字符出现的个数,再遍历s2时把s2中出现的字符在哈希表中-1。如果构成重排列,则最后哈希表中的个数都为0,否则不构成

代码实现:

class Solution 
{
public:bool CheckPermutation(string s1, string s2) {// 长度不相等,直接返回falseif(s1.size() != s2.size()) return false;int hash[26] = {0};// 统计s1中字符出现的次数for(auto ch : s1) hash[ch - 'a']++;// 再遍历s2,出现的字符-1for(auto ch : s2) hash[ch - 'a']--;// 最后检查hash里是否都为0for(int i = 0; i < 26; i++)if(hash[i] != 0)return false;return true;}
};

217.存在重复元素

在这里插入图片描述
在这里插入图片描述

算法原理:
这道题和第一题的做法基本类似。

分析⼀下题⽬,出现⾄少两次的意思就是数组中存在着重复的元素,因此我们可以⽆需统计元素出现的数⽬。仅需在遍历数组的过程中,检查当前元素是否在之前已经出现过即可
因此我们可以利⽤哈希表,仅需存储数组内的元素。在遍历数组的时候,⼀边检查哈希表中是否已经出现过当前元素,⼀边将元素加⼊到哈希表中

代码实现:

class Solution 
{
public:bool containsDuplicate(vector<int>& nums) {unordered_set<int> hash;for(auto x : nums) if(hash.count(x)) return true;else hash.insert(x);return false;}
};

219.存在重复元素II

在这里插入图片描述
在这里插入图片描述

算法原理:

这道题和上一题基本一样,只不过除了要两个元素相等之外,还需要判断相等元素的下标差的绝对值是否小于等于k。所以本题的哈希表要把元素值和对应下标绑定

细节问题:

如果数组内存在⼤量的重复元素,⽽我们判断下标差的绝对值不符合要求时,在插入相同元素的下标,会覆盖掉原来的下标,那结果还正确吗,怎么处理?
结果依然是正确的,可以大胆的覆盖掉!
在这里插入图片描述
原因:
我们按照下标从⼩到⼤的顺序遍历数组,当遇到两个元素相同,并且⽐较它们的下标时,这两个下标⼀定是距离最近的,因为:
(1) 如果当前判断符合条件直接返回 true ,⽆需继续往后查找。
(2) 如果不符合条件,那么前⼀个下标⼀定不可能与后续相同元素的下标匹配(因为下标在逐渐变大),那么我们可以大胆舍去前⼀个存储的下标,转⽽将其换成新的下标,继续匹配

代码实现:

class Solution 
{
public:bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_map<int, int> hash; // 绑定元素和下标for(int i = 0; i < nums.size(); i++){if(hash.count(nums[i])){if(abs(hash[nums[i]] - i) <= k)return true;}hash[nums[i]] = i;}return false;}
};

692.前k个高频单词

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

算法原理:

解法:使用 map + 稳定排序函数
先用map统计出每个单词出现的次数,map中是按照单词的字典序排序的,所以还需要用排序函数对次数进行排降序,最后提取出前 k 个出现最多的字符串

魔鬼细节问题:

对次数再排序时有以下几个注意点:
(1) 排序函数一定要使用稳定排序! 算法库中的 sort 是不稳定的,但是 stable_sort 是稳定的。
因为如果使用不稳定的排序,则出现次数相同的字符串顺序又会被打乱(map 中已经是按单词的字典序排序的),不符合题意
(2) 使用排序函数之前要把 map 中的元素先导入 vector 中,再传递 vector 的迭代器给 stable_sort
因为 stable_sort 只能传递随机迭代器,而 map 的迭代器是双向迭代器,vector 的迭代器是随机迭代器
(3) stable_sort 的第三个参数:一个可调用的比较函数和函数对象

代码实现:

class Solution 
{struct kvcmp{bool operator()(const pair<string, int>& kv1, const pair<string, int>& kv2){return kv1.second > kv2.second;}};
public:vector<string> topKFrequent(vector<string>& words, int k) {// 统计每个字符串出现的次数map<string, int> mapCnt;for(auto& s : words) mapCnt[s]++;vector<pair<string, int>> v(mapCnt.begin(), mapCnt.end());// 要用稳定排序对字符串出现的次数排降序stable_sort(v.begin(), v.end(), kvcmp());// 提取出前 k 个出现次数最多的单词vector<string> ret;for(int i = 0; i < k; i++)ret.push_back(v[i].first);return ret;}
};

45.字母异位词分组

在这里插入图片描述
在这里插入图片描述

算法原理:

这道题要解决两个问题:
(1) 判断两个字符串是否是字母异位词。
我们可以使用上面题目中的做法用哈希表统计字符出现的个数再进行判断。这里用另一种更简洁的方法,排序,但是时间复杂度更高。把每个字符串按字典序进行排序,若是字母异位词,则排完序后字符串相等,否则不相等

(2) 如何把字母异位词分组。
我们可以这样定义哈希表,把 key 定义为 string,把 value 定义为字符串数组 vector< string >

把每个字符串排序后再去哈希表中查找,如果存在,就把它绑定到对应的字符串数组中
在这里插入图片描述

代码实现:

class Solution 
{
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string, vector<string>> hash;// 把所有的字母异位词分组for(auto& s : strs){string tmp = s;sort(tmp.begin(), tmp.end());hash[tmp].push_back(s);}// 提取结果vector<vector<string>> ret;for(auto& [x, y] : hash)ret.push_back(y);return ret;}
};

三,算法总结

通过上面的若干道题目可以发现,哈希容器/map/set是非常强大的,能够快速的查找数据是否存在,统计数据个数,去重,排序

相关文章:

【基础算法总结】哈希表/set/map篇

目录 一&#xff0c;哈希表简介二&#xff0c;算法原理和代码实现1.两数之和349.两个数组的交集面试题01.02.判断是否互为字符重排217.存在重复元素219.存在重复元素II692.前k个高频单词45.字母异位词分组 三&#xff0c;算法总结 一&#xff0c;哈希表简介 哈希思想是算法中一…...

数字逻辑理论题目+知识点复习

昨天考完的数字逻辑理论考试&#xff0c;啊啊啊还有实验&#xff0c;生活不易&#xff0c;且行且珍惜。 请以最大的善意对待生活(,,>᎑<,,)。...

证明网络中的流形成一个凸集

证明网络中的流形成一个凸集 步骤1&#xff1a;定义和符号步骤2&#xff1a;线性组合步骤3&#xff1a;验证容量限制步骤4&#xff1a;验证流量守恒结论示例代码&#xff08;C语言&#xff09; 在网络流理论中&#xff0c;一个流 f f f 是定义在网络图的边集上的一种函数&…...

SpringBoot3

1. 配置文件 1. 基本使用 使用 配置文件classpath:application.properties spring.jdbc.drivercom.mysql.cj.jdbc.Driver spring.jdbc.urljdbc:mysql://localhost:3306/batis spring.jdbc.usernameroot spring.jdbc.password123456使用配置文件的值&#xff1a;Value("…...

Linux之线程概念,理解和控制

Linux之线程概念&#xff0c;理解和控制 一.线程1.1线程的概念1.2线程的理解1.3线程的优缺点&#xff0c;异常和用途1.4线程和进程1.5线程的控制1.4.1线程的创建1.4.2线程的终止1.4.3线程的等待1.4.4线程的分离 一.线程 1.1线程的概念 在我们了解了进程的同时我们在学校上课时…...

系统监控——分布式链路追踪系统

摘要 本文深入探讨了分布式链路追踪系统的必要性与实施细节。随着软件架构的复杂化&#xff0c;传统的日志分析方法已不足以应对问题定位的需求。文章首先解释了链路追踪的基本概念&#xff0c;如Trace和Span&#xff0c;并讨论了其基本原理。接着&#xff0c;文章介绍了SkyWa…...

【Leetcode Top 100】146. LRU 缓存

问题背景 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 c a p a c i t y capacity capacity 初始化 LRU 缓存int get(int key) 如果关键字 k e y key key 存在于缓存中&…...

Ubuntu Server 22.04.5 LTS重启后IP被重置问题

Ubuntu Server 22.04.5 LTS重启后IP被重置问题 最近在使用Ubuntu Server 22.04做项目开发测试时发现每次重启和关机后&#xff0c;所设置的静态IP地址都会回复到安装系统时所设置的ip Ubuntu Server 22.04 官网下载地址&#xff1a;Ubuntu官方下载地址 对虚拟机下安装Ubuntu感…...

电机功率、电压与电流的换算方法

在电气工程和相关行业中&#xff0c;电机的功率、电压和电流是三个重要的基本参数。它们之间有着密切的关系&#xff0c;而理解这些关系对于电机的选型、设计和应用至关重要。本文将详细阐述这三者之间的换算关系&#xff0c;以及相关公式的应用。 一、电机功率的定义 电机功…...

【Java】反射简介

框架的核心和架构师的核心 反射和代理是重中之重 反射 反射的作用 在运行的时候由代码获取类的信息 三种获取类信息的方式&#xff1a; 对象.getClass()Class.forName("类的路径")类.class Class &#xff1a;一个用来存储类信息的类 获取类信息是获取的整体的…...

【JAVA】Java第十三节:String类(String相关方法,以及StrinBuftrer , StringBulder相关方法)

本文详细介绍了String类以及常用的String相关方法&#xff0c;以及StrinBuftrer , StringBulder相关方法的使用&#xff0c;建议有印象即可&#xff0c;不需要都记住&#xff0c;使用时去查取即可 一、创建一个String类型的变量 我们平时创建String类型的变量一般是第一种形式…...

电子信息工程自动化 基于单片机的出租车计价器设计

摘 要 出租车作为一种城市中非常重要的公共交通工具&#xff0c;他与人们的生活息息相关。所以我也设计了一款出租车计价器&#xff0c;它采用模块化设计&#xff0c;包含里程测量模块、数据存储模块、按键模块、时钟模块、显示模块、语音播报模块六大主要模块。本设计的出租车…...

CentOS 二进制安装部署MongoDB 4.0

一、安装MongoDB 1. 下载 MongoDB 二进制文件 前往 MongoDB 官方下载页面(https://www.mongodb.com/try/download/community) 选择对应版本的 tar 包。 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.28.tgz 2. 解压并移动至目标目录 解压文件&#xff…...

SQL面试题——京东SQL面试题 合并数据

京东 合并数据 几天的题目来自知名电商平台京东 已知有数据A如下,请分别根据A生成B和C。 数据A +-----+-------+ | id | name | +-----+-------+ | 1 | aa | | 2 | aa | | 3 | aa | | 4 | d | | 5 | c | | 6 | aa | | 7 | aa | | …...

windows安装使用conda

在Windows系统上安装和使用Conda的详细步骤如下&#xff1a; 一、下载Conda安装包 访问Conda的官方网站Anaconda | The Operating System for AI&#xff0c;点击“Downloads”按钮。在下载页面&#xff0c;选择适合您系统的安装包。通常&#xff0c;对于Windows系统&#xf…...

C++知识整理day4内存管理——new和delete详解

文章目录 1.C/C内存分布2.C语言中动态内存管理&#xff1a;malloc/realloc/calloc3.C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4.malloc/free和new/delete到底什么区别&#xff1f;4.1 对于自定义类型4.2 对于自定义类型4.3 总结&#xff1a;它们…...

STM32 自学笔记

摘抄于大学期间记录在QQ空间的一篇自学笔记&#xff0c;当前清理空间&#xff0c;本来想直接删除掉的&#xff0c;但是感觉有些舍不得&#xff0c;因此先搬移过来。 RAM vs ROM vs FLASH 2013-09-05记录&#xff0c;ROM和RAM指的都是半导体存储器&#xff0c;ROM是Read Only …...

spring通过RequestContextHolder获取HttpServletRequest对象

1.获取HttpServletRequest对象方法&#xff1a; public static HttpServletRequest getRequest() {ServletRequestAttributes attributes ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());assert attributes ! null;return attributes.getRequest(…...

【特殊子序列 DP】力扣1137. 第 N 个泰波那契数

泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 示例 1&#xff1a; 输入&#xff1a;n 4 输出&#xff1a;4 解释&#xff1a; T_3 0 1 1 2 T_4 1 …...

tcp连接设置一个超时时间(没在操作系统层面设置)

await asyncio.open_connection(ip, port, limit1024)代码是使用了操作系统的TCP连接&#xff0c;正常TCP连接的时候会有重试机制&#xff0c;当第一个SYN没有回复的时候&#xff0c;会再重试4次&#xff0c;每次间隔1s, 2s&#xff0c;4s, 8s&#xff0c;我觉得太慢了&#xf…...

03、Node.js安装及环境配置

1.下载node.js 下载地址&#xff1a;Node.js 2.安装 2.1 自定义安装路径&#xff08;可以选择默认&#xff09; 下图根据本身的需要进行&#xff0c;我选择了默认Node.js runtime&#xff0c;然后Next&#xff1a; Node.js runtime &#xff1a;表示运行环境 npm package mana…...

【FAQ】HarmonyOS SDK 闭源开放能力 —Remote Communication Kit

1.问题描述&#xff1a; DynamicDnsRule有没有示例&#xff1f;这个地址是怎么解析出来 https://developer.huawei.com/consumer/cn/doc/harmonyos-references/remote-communication-rcp-0000001770911890#section8160554134811 解决方案&#xff1a; ‘DynamicDnsRule’&a…...

WebStorm快捷键保持跟Idea一致

修改连续行局部多选 在WebStorm中同时按下ctrl alt s&#xff1b; 选择KeyMap 输入Column Selection Mode选择快捷键, 右键选择Add Mouse Shortcut 按下alt 鼠标左键 如果出现占用的情况&#xff0c;直接删除其他使用该快捷键的地方即可&#xff1b; 修改跨行局部多选 在…...

14、鸿蒙学习——管理通知角标

针对未读的通知&#xff0c;系统提供了角标设置接口&#xff0c;将未读通知个数显示在桌面图标的右上角角标上。 通知增加时&#xff0c;角标上显示的未读通知个数需要增加。 通知被查看后&#xff0c;角标上显示的未读通知个数需要减少&#xff0c;没有未读通知时&#xff0…...

【词向量表示】Word2Vec原理及实现

文章目录 Word2VecHow achieveLookup tableCodingPre-dataingModelNegative sameple Word2Vec 单词与单词之间的向量往往不在同一个向量空间&#xff0c;例如&#xff0c;传统的编码方式&#xff1a;one-hot编码&#xff0c;不同单词[1, 0, 0]和[0, 1, 0]之间的余弦相似度为0。…...

【C++】位图

Ⅰ、bitset的介绍 位图&#xff1a; 就是用 比特位 来标识某种状态&#xff0c;适用于海量数据&#xff0c;数据无重复的场景。通常是用来判断某个数据存不存在的。 ​ 位图的接口&#xff1a; ​ 成员函数 功能 set 设置指定位或所有位 reset 清空指定位或所有位 flip …...

性能测试需求分析(超详细总结)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、客户方提出 客户方能提出明确的性能需求&#xff0c;说明对方很重视性能测试&#xff0c;这样的企业一般是金融、电信、银行、医疗器械等&#xff1b;他们…...

React开发 - 技术总结系列二

HOC 初体验 高阶组件&#xff08;HOC&#xff09;是 React 中用于复用组件逻辑的一种高级技巧。HOC 自身不是 React API 的一部分&#xff0c;它是一种基于 React 的组合特性而形成的设计模式。 简单点说&#xff0c;就是组件作为参数&#xff0c;返回值也是组件的函数&#x…...

Spring事务实现原理

我们一般将Spring事务使用在数据库操作上面&#xff0c;用来保证数据的一致性和完整性 实现原理&#xff1a; 通过AOP和事务管理器实现的 1.AOP拦截&#xff1a; 拦截Transactional注解的方法调用 2.事务管理器&#xff1a; 负责事务的开启&#xff0c;提交和回滚 3.事务…...

云服务器部署upload-labs-docker(文件上传靶场)环境 以及相关报错问题

环境的搭建 准备&#xff1a;云服务器&#xff08;本地的linux服务器&#xff08;版本最好不要是老的不然不兼容docker&#xff09;&#xff09; f8x配置docker环境&#xff1a; https://github.com/ffffffff0x/f8x 一键配置 docker拉取file-labs靶场 https://github.com…...

Python进阶编程总结

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

【第 1 章 初识 C 语言】1.8 使用 C 语言的 7 个步骤

目录 1.8 使用 C 语言的 7 个步骤 1.8.1 第 1 步&#xff1a;定义程序的目标 1.8.2 第 2 步&#xff1a;设计程序 1.8.3 第 3 步&#xff1a;编写代码 1.8.4 第 4 步&#xff1a;编译 1.8.5 第 5 步&#xff1a;运行程序 1.8.6 第 6 步&#xff1a;测试和调试程序 1.8.…...

vue3 实现音频转文字组件

使用recorder-core第三方插件实现音频转纯文本的功能。 工具类文件 recoder.ts import Recorder from recorder-core import recorder-core/src/engine/wav import recorder-core/src/extensions/lib.fft.js import recorder-core/src/extensions/frequency.histogram.view i…...

MySQL各种锁详解

什么是锁&#xff1f; 1.1 锁的解释 计算机协调多个进程或线程并发访问某一资源的机制。 1.2 锁的重要性 在数据库中&#xff0c;除传统计算资源&#xff08;CPU、RAM、I/O等&#xff09;的争抢&#xff0c;数据也是一种供多用户共享的资源。 如何保证数据并发访问的一致性&…...

前端工程 Node 版本如何选择

1. Node 与 Npm 版本对应 这是一个必知必会的问题&#xff0c;尤其是对于维护那些老掉牙、一坨坨、非常大的有着长期历史的老破大工程。 1.1. package-lock.json 版本 首先你要会看项目的 package-lock.json 文件中的 lockfileVersion 版本号&#xff0c;这对于 NPM 安装来说…...

新增白名单赋予应用安装权限

目录 相关问题 具体实现 相关问题 安装app到/data/分区时&#xff0c;如何在安装阶段就赋予权限&#xff0c;无需请求权限 具体实现 frameworks/base/core/res/res/values/config.xml <!-- For whitelis apk --><string-array translatable"false" nam…...

学习Python的笔记14--迭代器和生成器

1.迭代器&#xff08;Iterator&#xff09; 概念&#xff1a; 迭代意味着重复多次&#xff0c;就像循环一样。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问&#xff0c;直到所有的元素被访问完结束。 迭代器只能往前不会后退。 1.iter…...

【Golang】Golang基础语法之面向对象:结构体和方法

面向对象——结构 Go 仅支持封装&#xff0c;不支持继承和多态&#xff1b;继承和多态要做的事情交给接口来完成&#xff0c;即——面向接口编程。Go 只有 struct&#xff0c;没有 class。 定义一个最简单的树节点&#xff08;treeNode&#xff09;结构&#xff0c;方法如下&…...

重磅升级:OpenAI o1模型上手实测,从芯片架构分析到象棋残局判断的全能表现

引言 昨日&#xff0c;在圣诞节系列发布会的第一天&#xff0c;OpenAI终于给我们带来了令人振奋的更新&#xff0c;这些更新有望塑造AI互动的未来。备受期待的OpenAI o1正式版的推出&#xff0c;标志着ChatGPT体验的重大进化&#xff0c;宣告了AI驱动应用新时代的开始。o1现已可…...

Pandas处理和分析嵌套JSON数据:从字符串到结构化DataFrame

在数据分析领域&#xff0c;我们经常遇到需要从非结构化数据中提取有用信息的场景。特别是当数据以JSON字符串的形式出现时&#xff0c;如何有效地将其转换为结构化的表格形式&#xff0c;以便进行进一步的分析和处理&#xff0c;成为了一个常见的挑战。本文将通过一个具体的例…...

《ODIN: A Single Model for 2D and 3D Segmentation》CVPR2024

斯坦福和微软&#xff1a; 代码链接&#xff1a;ODIN: A Single Model For 2D and 3D Perception 论文链接&#xff1a;2401.02416 摘要 这篇论文介绍了ODIN&#xff08;Omni-Dimensional INstance segmentation&#xff09;&#xff0c;一个能够同时处理2D RGB图像和3D点云…...

第40节 在ArkTS中实现socket功能

1. 基本概念 在 ArkTS 中实现 Socket 功能主要涉及到网络通信中的套接字&#xff08;Socket&#xff09;编程。Socket 是一种用于在不同设备&#xff08;如客户端和服务器&#xff09;之间进行双向通信的接口&#xff0c;它允许应用程序发送和接收数据。在网络编程中&#xf…...

Ruby On Rails 笔记1——Rails 入门

突然想跟着官方文档把Ruby On Rails过一遍&#xff0c;把一些有用的记下来就可以一直看了&#xff0c;do它! https://guides.rubyonrails.org/v7.2/ 注&#xff1a;官网是英文文档&#xff0c;我自己翻译了一下&#xff0c;不确保完全准确&#xff0c;只供自己学习开发使用。 …...

npm, yarn, pnpm之间的区别

前言 在现代化的开发中&#xff0c;一个人可能同时开发多个项目&#xff0c;安装的项目越来越多&#xff0c;所随之安装的依赖包也越来越臃肿&#xff0c;而且有时候所安装的速度也很慢&#xff0c;甚至会安装失败。 因此我们就需要去了解一下&#xff0c;我们的包管理器&#…...

Uniapp的App环境下使用Map获取缩放比例

概述 目前我试过的就是你用vue后缀是拿不到比例的你可以用nvue当然uniapp的uvue应该是更加可以的我使用的是高德所以你得在高德的后台声请原生的Android的key才可以如果是vue3的开发模式的话不用使用this来获取当前对象使用scale对象来接受和改变缩放比例会比较友好然后直接走…...

[免费]基于Python的Django在线(生鲜)商城(电子商城)管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的基于Python的Django在线(生鲜)商城(电子商城)管理系统&#xff0c;分享下哈。 项目视频演示 【免费】基于Python的Django在线(生鲜)商城(电子商城)管理系统 Python毕业设计_哔哩哔哩_bilibili 项目介绍 随…...

Go 1.19.4 HTTP编程-Day 20

1. HTTP协议 1.1 基本介绍 HTTP协议又称超文本传输协议&#xff0c;属于应用层协议&#xff0c;在传输层使用TCP协议。HTTP协议属是无状态的&#xff0c;对事务处理没有记忆能力&#xff0c;如果需要保存状态需要引用其他技术&#xff0c;如Cookie。HTTP协议属是无连接的&…...

基于微软云第一个大模型程序Java和python实现

1 注册一个微软云账号 按照提示一步一步注册&#xff0c;注册过程中&#xff0c;注册微软云账号需要visa卡。可以在某宝花钱30元买下。 2 部署模型 搜索openAI 创建资源组 部署一个模型 这个后面代码会使用 3 Java 实现 pom 依赖 <dependency><groupId>com…...

【5G】5G目标和标准化 5G targets and standardization

5G标准是在第三代合作伙伴关系项目&#xff08;3GPP&#xff0c;3rd Generation Partnership Project&#xff09;中定义的&#xff0c;实际的标准制定工作由参与3GPP活动的区域标准机构成员共同推进。目前&#xff0c;超过600家公司通过各自的地区标准组织成为3GPP的成员。然而…...

KernelShark在ubuntu24.04.01的编译

KernelShark在ubuntu24.04.01的编译 写在前面具体过程装ubuntu24.04.01安装depends下载代码如何编译cmake 输出make 输出 如何安装 初步启动Add the User to the perf Group 简单的使用trace-cmd抓包 来看我的文章&#xff0c;必有所得。 平凡中&#xff0c;总有我帮您踩过的坑…...