字典与散列表

详解Python字典的底层原理——哈希表(Python面试必备) 详解Python字典的底层原理————哈希表(Python面试必备) 作者:Loren no hurry 2019-06-9 Python面试经常会被问到: 你能说一说Python字典的底层实现原理吗? 这个问题可以从三个方面来回答: 1.python字典及其特性 字典是Python的一种可变、无序容器数据结构,它的元素以键值对的形式存在,键值唯一,它的特点搜索速度很快:数据量增加10000倍,... 阅读详情
一、字典
字典(dictionary)是一些元素的集合。每个元素有一个称作key 的域,不同元素的key各
不相同。有关字典的操作有:
• 插入具有给定关键字值的元素。
• 在字典中寻找具有给定关键字值的元素。
• 删除具有给定关键字值的元素。


随机访问:若仅按照一个字典元素本身的关键字来访问该元素。
顺序访问:指按照关键字的递增顺序逐个访问字典中的元素。顺序访问需借助于Begin (用来返回关键字最小的元素)和
Next (用来返回下一个元素)等操作来实现。

字典的线性表描述:
字典可以保存在线性序列(e1 , e2 , ⋯) 中,其中ei 是字典中的元素,其关键字从左到右依次
增大。为了适应这种描述方式,可以定义两个类SortedList和SortedChain。
#ifndef _DICT   
#define _DICT
#include<iostream>
using namespace std;
template<class E,class K> class SortedChain;
template <class E ,class K>
class SortedChainNode
{
friend class SortedChain<E,K>;
private:
K data;
SortedChainNode<E,K> *link;
};
//E表示链表元素的数据类型, K是链表中排序所用到的关键字
template<class E ,class K>
class SortedChain
{
public:
SortedChain() {first =0;}
~SortedChain(){ }
bool IsEmpty() const {return first ==0;}
//int Length() const;
bool Search(const K& k , E& e) const;
SortedChain<E ,K>& Delete(const K& k , E& e);
//SortedChain<E ,K>& Insert(const E& e);
SortedChain<E ,K>& DistinctInsert(const E& e);
void Output(ostream& out) const;
private:
SortedChainNode<E ,K> *first;
};
template<class E, class K>
bool SortedChain<E,K>::Search(const K& k, E& e) const
{// 搜索与k匹配的元素,结果放入e
// 如果没有匹配的元素,则返回f a l s e
SortedChainNode<E,K> *p =first;
// 搜索与k相匹配的元素
for (;p&& p->data < k;p = p->link);
// 验证是否与k匹配
if (p && p->data == k) // 与k相匹配
{e = p->data; return true;}
return false; // 不存在相匹配的元素
}


template<class E, class K>
SortedChain<E,K>& SortedChain<E,K>
::Delete(const K& k, E& e)
{// 删除与k相匹配的元素
// 并将被删除的元素放入e
// 如果不存在匹配元素,则引发异常B a d I n p u t
SortedChainNode<E,K> *p = first,
*tp = 0; //跟踪p
// 搜索与k相匹配的元素
for (; p && p->data < k; tp = p,p = p->link;)


// 验证是否与k匹配
if (p && p->data == k) {// 找到一个相匹配的元素
e = p->data; // 保存d a t a域
// 从链表中删除p所指向的元素
if (tp) tp->link = p->link;
else first = p->link; // p是链首节点
delete p;
}


return *this;


}


template<class E, class K>
SortedChain<E,K>& SortedChain<E,K>::DistinctInsert(const E& e)
{// 如果表中不存在关键值与e相同的元素,则插入e


SortedChainNode<E,K> *p = first, *tp = 0; // 跟踪p
// 移动tp 以便把e 插入到t p之后
for (; p && p->data < e; tp = p, p = p->link);
// 检查关键值是否重复
//if (p && p->data == e)  return NULL;
// 若没有出现重复关键值, 则产生一个关键值为e的新节点
SortedChainNode<E,K> *q = new SortedChainNode<E,K>;
q->data = e;
// 将新节点插入到t p之后
q->link = p;
if (tp) tp->link = q;
else first = q;
return *this;
}


template<class E, class K>
void SortedChain<E,K>::Output(ostream& out) const  
{// 将链表元素送至输出流   
SortedChainNode<E,K> *current;  
for (current=first; current; current = current->link)  
out<<current->data<<" ";  
}  


//重载<<   
template<class E, class K>
ostream& operator<<(ostream& out, const SortedChain<E,K>& x)  
{  
    x.Output(out);   
    return out;  
}  


#endif


#include<iostream>
#include"dict.h"
using namespace std;
int main()
{
	SortedChain<int ,int> myChain;
	myChain.DistinctInsert(10).DistinctInsert(20).DistinctInsert(3);
	cout<<myChain<<endl;
	return 0;
}



二、散列表
    字典的另一种描述方法就是散列(hash),它是用一个散列函数(hash function)把关键字映射到散列表(hash table)中的特定位置。在理想情况下,如果元素e 的关键字为k,散列函
数为f,那么e 在散列表中的位置为f(k)。要搜索关键字为k 的元素,首先要计算出f(k),然后看表中f(k)处是否有元素。如果有,便找到了该元素。如果没有,说明该字典中不包含该元素。
在前一种情况中,如果要删除该元素,只需把表中f(k)位置置为空即可。在后一种情况中,可以通过把元素放在f(k)位置以实现插入。

   在理想情况下,初始化一个空字典需要的时间为O(b)(b为散列表中位置的个数) ,搜索、插入、删除操作的时间均为O(1)。尽管理想的散列方法在许多场合都适用,但还有许多应用因为关键字变化范围太大而不能创建一个这样的散列表。

 2.1线性开型寻址散列
       当关键字的范围太大,不能用理想方法表示时,可以采用比关键字范围小的散列表以及把多个关键字映射到同一位置的散列函数。虽然有多种函数映射方法,但最常用的还是除法映射。
除法散列函数的形式如下:f(k) = k%D,其中k 为关键字,D是散列表的大小(即位置数),%为求模操作符。散列表中的位置号从0到D-1,若关键字不是正整数类型(如int,long, char, unsigned char等) ,则在计算f(k)之前必须把它转换成非负整数。对于一个长字符串,可以采用取其2个字母或4个字母而变成无符号整数或无符号长整数的方法。f ( k )是存储关键字为k的元素的起始桶。在良性情况下 ,起始桶中所存储的元素即是关键字为K的元素。

2.2 C++实现(采用线性开型寻址的散列表)
     在类定义中假定散列表中每个元素的类型为E,每个元素都有一个类型为K的key域。key是用来计算起始桶的,因此类型K必须能够适应取模操作%。散列表使用了两个数组,ht和empty。当且仅当ht[i]中 不含有元素时,empty[i]为true。
/********************************HashTable定义*************************/
template<class E, class K>
class HashTable {
public:
HashTable(int divisor = 11);
~HashTable() {delete [ ] ht; delete [] empty;}
bool Search(const K& k, E& e) const;
HashTable<E,K>& Insert(const E& e);
void Output(ostream& out) const;
private:
int hSearch(const K& k) const;
int D; // 散列函数的除数
E *ht; // 散列数组
bool *empty; // 一维数组
};
template<class E, class K>
HashTable<E,K>::HashTable(int divisor)
{// 构造函数
D = divisor;
// 分配散列数组
ht = new E[D];
empty = new bool[D];
// 将所有桶置空
for (int i = 0; i < D; i++)
empty[i] = true;
}


template<class E, class K>
int HashTable<E,K>::hSearch(const K& k) const
{// 查找一个开地址表
// 如果存在,则返回k的位置
// 否则返回插入点(如果有足够空间)
int i = k%D; // 起始桶
int j = i; // 在起始桶处开始
do {
if (empty[j] || ht[j] == k) return j;
j = (j + 1) % D; // 下一个桶
} while (j!=i); // 又返回起始桶
return j; // 表已经满
}


template<class E, class K>
bool HashTable<E,K>::Search(const K& k, E& e) const
{// 搜索与k匹配的元素并放入e
// 如果不存在这样的元素,则返回f a l s e
int b = hSearch(k);
if (empty[b]|| ht[b] != k) return false;
e = ht[b];
return true;
}


template<class E, class K>
HashTable<E,K>& HashTable<E,K>::Insert(const E& e)
{// 在散列表中插入
K k = e; // 抽取k e y值
int b = hSearch(k);
// 检查是否能完成插入
if (empty[b]) 
{
empty[b] = false;
ht[b] = e;
return *this;
}


// 不能插入, 检查是否有重复值或表满
//if (ht[b] == k) throw BadInput(); // 有重复


}


template<class E, class K>
void HashTable<E,K>::Output(ostream& out) const  
{  
	for (int i = 0; i < D; i++)
	{
     if (!empty[i])
		cout<<ht[i]<<" ";
	}


}  
//重载<<   
template<class E, class K>
ostream& operator<<(ostream& out, const HashTable<E,K>& x)  
{  
    x.Output(out);   
    return out;  
}  


主函数调用:
#include<iostream>
#include"dict.h"
using namespace std;
int main()
{
	SortedChain<int ,int> myChain;
	myChain.DistinctInsert(10).DistinctInsert(20).DistinctInsert(3);
	cout<<myChain<<endl;


	HashTable<int,int> myHash;
    
	myHash.Insert(10).Insert(1).Insert(4);
     cout<<myHash<<endl;
	return 0;
}


2.3性能分析
设b为散列表中桶的个数。散列函数中D为除数且b=D。初始化表的时间为O(b)。当表中有n个元素时,最坏情况下插入和搜索时间均为O(n)。当所有n个关键字值都在同一个桶中时即出现最坏情况。通过比较散列在最坏情况下的复杂性与线性表在最坏情况下的复杂性,可以看到二者完全相同。
  但散列的平均性能还是相当好的。用Un 和Sn 来分别表示在一次成功搜索和不成功搜索中平均搜索的桶的个数。对于线性开型寻址,有如下的公式:
Un=1/2(1+1/(1-a)^2)
Sn=1/2(1+1/(1-a))
其中a=n/b为负载因子。
所以若a=0.5,则在不成功搜索时平均搜索的桶的个数为2.5个,成功搜索时则为1.5个。当a= 0.8时,为50.5和5.5。此时假设n至少为51。当负载因子为0.5时,采用线性开型寻址散列表的平均性能要比线性表好得多。

2.4确定D
      在实际应用过程中,D的选择对于散列的性能有着重大的影响。当D为素数或D没有小于20的素数因子时,可以使性能达到最佳(D等于桶的个数b)。
为了确定D的值,首先要了解影响成功搜索和不成功搜索性能的因素。通过Un 和Sn 的公式,可以确定最大的值。根据n 的值(或是估计值)和的值,可以得到b 的最小许可值。然后
找到一个比b大的最小的整数,该整数要么是素数,要么没有小于20的素数因子。这个整数即可作为D和b的值。

例:设计一个有近1000个元素的散列表。要求成功搜索时平均搜索的桶的个数不得超过4,不成功搜索时平均搜索的桶的个数不超过50.5。由Un 的公式,可得到a≤0.9,由Sn的公式,可以得到4≥0.5 +1/(2 (1-a)) 或a≤6/7。因此, a≤min{0.9, 6/7}=6/7。因此b最小为(7n/6)=1167.b=D=37*37 =1369,应为一个比较好的值(虽然不是最小的选择)。
哈希表词典 功能:利用哈希表实现英文翻译功能 注:限输入英文查找相应汉语意思,秒出答案 有个别词查不到的话,那是因为词库不全 立即下载

相关推荐

中文顶刊《会计研究》文本分析技术最新进展总结盘点

会计研究》是由中华人民共和国财政部主管、中国会计学会主办的国家一级学术期刊,为会计领域中文顶级期刊。随着大数据技术的日益成熟, 社交网络类文本 、上市公司披露类文本、媒体报道类文本、 其他类文本 、网络搜索数据、P2P 网络借贷文 本与分析师报告等文本数据逐渐成为财务会计的研究素材。

qq_52891550的博客 2891

字典和散列表

集合、字典和散列表可以存储不重复的值。在集合中,我们感兴趣的是每个值本身,并把它 当作主要元素。在字典中,我们用[键,值]的形式来存储数据。在散列表中也是一样(也是以[键, 值]对的形式来存储数据)。但是两种数据结构的实现方式略有不同 字典 字典和集合很相似,集合以[值,值]的形式存储元素,字 典则是以[键,值]的形式来存储元素。字典也称作映射。 实现一个字典类 function Dictiona...

哈哩噜啾啾哈呀呀的博客 735

告别NEDC!手把手教你将CLTC/WLTP等最新工况文件导入AVL Cruise(附资源包)

本文详细指导如何将CLTC、WLTP等最新工况文件导入AVL Cruise软件,替代传统的NEDC工况。从资源获取、文件预处理到分步导入指南,再到常见问题排查,帮助工程师高效完成汽车仿真性能评估。附赠全球主流工况文件资源包,助力精准仿真分析。

weixin_30374009的博客 461

散列表(字典)

文章目录问题散列函数应用案例将散列表用于查找防止重复将散列表用作缓存冲突性能装填因子良好的散列函数 问题 你在一家杂货店上班。有顾客来买东西时,你得在一个本子中查找价格。 如果本子的内容不是按字母顺序排列的,你可能为查找苹果(apple)的价格而浏览每一行,这需要很长的时间。使用的是简单查找,需要浏览每一行。时间复杂度为O(n)O(n)O(n)。 如果本子的内容是按字母顺序排列的,可使用二分查找来...

chupengfei_hust的博客 662

C#读取CAD文件(dwg/dxf)并处理

项目要求识别CAD图纸(图纸内容与现实事物比例是1:1)中的内容,并提取出一些关键信息。这里的CAD图纸是指CAD文件,包含多种格式,dwg/dxf/dwf/stl/pdf等等。识别其中内容,主要指文件中的图元信息(也叫实体Entity),指线段、圆弧、矩形等图形元素。得到图元基础信息(比如长度、坐标、粗细)后,进一步做处理(如得到交点、得到线段间间隔、圆弧与线段切点等)。听起来有点难,因为作为软件工程师,对CAD相关事物并不了解,它是未知的;

三千幻想乡 1万+

MAX30102心率血样模块在STM32F103芯片的程序说明

我希望你已经安装好了Keil MDK5这个软件,也安装了M3内核,可以编译一些STM32F103的一些项目下载程序后步骤: 1-按照下图找到IIC.uvprojx并打开(途中唯一绿色那个图标) 2-编译一次 3-确保0错误,0警告,下图所示 4-点击目标选项,然后找到STM32F103C8,再点debug–CMSIS****(我实际用的JTAG,用不了,选择这个CMSIS****即可)下图所示 5-下图所示,看看你的串口找到了没,找到了就点左下角的OK 6-按图上传到开发板 7-MAX30102接线方法

weixin_51357422的博客 5801

数据结构—————散列表(哈希表)和字典(unity)

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(...

纸上得来终觉浅,绝知此事要躬行 2153

ARM CoreLink 系列 5.1.1 -- CI-700 System Address Map 】

所有的CHI 命令都包含一个 Source ID 和 Target ID, 其中 Source ID 可以来自于 RN Node, Target ID 可以来自于HN node或者其他 SN node. 其中 Target ID 是通过 SAM解析传入的地址得到的。对于 CI-700中的所有 RN Node 中的 SAM 多会进行配置,因为RN Node 访问的是整个地址空间,不同的地址空间会有不同的属性(I/O, DRAM),所以会对RN SAM 配置多个不同属性的区域。

CodingCos的博客 770

数据结构之字典和散列表

字典和散列表1. 字典2. 散列表 1. 字典 set(key, value) 向字典中添加新元素,如果key已经存在,原来的值会被覆盖。 remove(key) 删除字典中的元素。 get(key) 获取字典中的元素。 size() 获取元素个数。 hasKey(key) 是否包含某个键。 clear() 清空字典。 keys() 获取所有键。 values() 获取所有值。 keyValues() 返回所有[key, value]。 isEmpty() 字段是否为空。 forEach(callbac

小栗子的博客 402

uniapp(全端兼容) - 超详细接入百度统计功能,给uniapp全平台各端项目引入添加百度统计的插件统计流量详细的步骤教程(提供最新的百度统计源代码,详细的示例代码复制粘贴即可快速搞定!)

uniapp h5 app 使用加入接入百度统计,uniapp百度统计,uniapp详细引入百度统计的教程,uniapp接入百度统计,uniapp如何实现加入百度的统计代码,uniapp怎么植入百度统计详细教程,uniapp如何对接百度统计,uniapp百度统计不生效怎么办,uniapp使用百度统计不生效常见问题,uniapp引入百度统计后没有生效,uniapp h5网页接入百度统计代码后没有统计无效,uniapp最新接入使用百度统计功能,uniapp增加百度统计代码,uniapp app如何接入百度统计,

✅ 精选推荐文章 1万+

WorkBuddy最新更新特性(2026-07-21)

WorkBuddy最新更新特性

AI人人懂 571

基于散列表(线性探查的哈希表和链式散列)的字典实现

字典的另一种表示是散列。它用一个散列函数(也称哈希函数)把字典的数对映射到一个散列表(也称哈希表)的具体位置。与跳表相比,它把操作的时间提高到渐近等于1,但最坏情况下依然是渐近等于N。但是如果经常输出所有元素或按照顺序查找元素(如查找第10个最小元素之类),跳表的执行效率将优于散列。 基于跳表的字典实现 散列函数和散列表 1.桶和起始桶 当关键字范围太大,不能用理想方法表示时,可以采用并不理想的散...

sinat_40408114的博客 1748

YOLO26 网络结构逐模块解析:Backbone/Neck/Head

本文解析了YOLO26目标检测网络的架构设计,重点介绍其在Backbone、Neck和Head三个核心组件的创新优化。Backbone采用改进的CSP模块与轻量级注意力机制,提升特征提取效率;Neck使用改进的BiFPN结构实现高效多尺度特征融合;Head采用完全解耦设计简化回归流程。文章详细分析了各模块的技术演进、实现细节和设计思想,通过流程图和代码示例展示了YOLO26的整体架构和关键组件实现。该研究对模型优化、定制开发和硬件部署具有重要指导意义。

一键难忘的博客 1241

C++——哈希表(Hash Table),附加于 Python 中字典区别于联系

这是一个将键映射到哈希表索引的函数。一个好的哈希函数应该能够均匀地分布键,以减少冲突(即不同的键映射到同一个索引)。:表示哈希表中已填充的槽位和总槽位的比例。装载因子越高,冲突的可能性越大,性能可能会下降。(寻找下一个空闲的槽位)。【后续会编辑本篇文章解释链地址法和开放地址法】:当不同的键映射到同一个索引时,需要进行冲突解决。(使用链表存储冲突的元素)和。

qq_54045096的博客 2283

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【JavaScript】数据结构之字典 & 哈希表

数据结构之字典和哈希表

票票的博客 860

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

哈希表与字典

首先,哈希表和字典都是可以存储数据的一个容器,都是以键值对的方式来存储数据,一个键对应一个值,通过键和值来检索数据时是十分有效迅速的,举个简单的例子就是我们的手机的电话薄里面都是一个人对应一个电话号码,检索的时候只有找到键,也就是找到人名,就可以找到电话号码了。 字典的存储结构也是通过哈希表来实现的,所以两者存入数据的方式是一样的,但是两者在执行效率上还是有差别的。 一、Hashtabl...

十年磨一剑,沉淀…… 9665

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【自动化运维番外篇】数据结构-哈希表与字典

这篇我们就来着重讲解一下数据结构中的哈希表与Python中的字典类型,并且告诉大家为什么字典是无序的,顺带破除一下网上大部分博客对于这一知识点的误解。

weixin_40489165的博客 3414

数据结构之哈希表/散列表——python应用(字典)

1. 什么是哈希表? 散列函数:一个把查找表中的关键字映射成该关键字对应的地址的函数,记为: Hash(key)=Addr 哈希表:是根据关键字而直接进行访问值的数据结构。也就是说散列表建立了关键字和存储地址之间的一种直接映射关系。 2. 哈希表为何如此高效? 回顾已经学过的数据结构的查找,例如数组,链表等,他们的查找都是建立在“比较”的基础上的,时间复杂度通常为O(n) 而哈希表直接通过给定Key值,获取到地址,从该地址中取出数据,理想情况下时间复杂度只有O(1),即与表中元素个数无关。 3. 散

weixin_44441131的博客 1504

字典 与散列表 哈希

散列表 Python用散列表来实现dict。散列表其实是一个稀疏数组(总是有空白元素的数组称为稀疏数组)。在一般书中,散列表里的单元通常叫做表元(bucket)。在dict的散列表当中,每个键值对都占用一个表元,每个表元都有两个部分,一个是对键的引用,一个是对值的引用。因为每个表元的大小一致,所以可以通过偏移量来读取某个表元。 Python会设法保证大概还有三分之一的表元是空的,当快...

hellocsz的博客 316

数据结构的字典插入,哈希表使用

数据结构的字典插入,哈希表使用 hash基数(散列表,设计哈希函数,平均查找长度(分子为查找关键字的次数,分母为关键字的个数)) 散列表类似于数组结构,哈希函数可根据要求自己设置 #include using namespace std; #include<string.h> #include<stdio.h> typedef int KeyType; typedef in...

c_programj的博客 429

“哈希表(Hash Table)”和“字典(Dictionary)的关系

哈希表”和“字典”是计算机科学中的两个相关概念,但它们有一些区别,主要体现在实现方式和使用场景上。

执剑人 1141

js字典和哈希表

方法:set,get,has,delete,size,clear。2.字典根据添加的顺序排列,哈希表排列顺序与添加元素的顺序无关。数据结构中字典用map表示字典 ,map的键不会转换类型。new set是一个集合,new map是一个字典。new set返回的是一个set对象。对象中的key都会转化成字符串类型。1.查找时哈希表省去遍历的过程。new set可以用来数组去重。二.哈希表(散列表)

qq_66195472的博客 352

字典及散列表,字典用法

字典和散列表 字典类型不但在各种程序里广泛使用,它也是Python语言的基石。模块的命名空间、实例的属性和函数的关键字参数中都可以看到字典的身影。跟它有关的内置函数都在__bulitins__.dict__模块中。 正是因为字典至关重要,Python对它实现了高度优化,而散列表则是字典类型性能出众的根本原因。 collections.abc模块中有Mapping和MutableMapping...

向宪章的博客 1264

哈希表和字典的异同

一、哈希表三、总结 哈希表和字典都是可以存储数据的一个容器,都是以键值对的方式来存储数据,一个键对应一个值,通过键和值来检索数据时是十分有效迅速的,举个简单的例子就是我们的手机的电话薄里面都是一个人对应一个电话号码,检索的时候只有找到键,也就是找到人名,就可以找到电话号码了。 字典的存储结构也是通过哈希表来实现的,所以两者存入数据的方式是一样的,但是两者在执行效率上还是有差别的。 存入数据不限制类型和数量,前提是导入命名空间using system.Collection (1)存值时: 哈希表以键值对的形式

Shallow的博客 1万+
上一篇: 【C++STL】C++ Standard Template Library三个重要元素
下一篇: C#获取用户系统信息的程序
xiaoding133
博客等级 码龄19年 415粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值