建堆O(n)时间复杂度证明

建堆的时间复杂度计算 建堆的时间复杂度计算。 阅读详情

建堆复杂度先考虑满二叉树,计算完全二叉树建堆复杂度基本相同。

对满二叉树而言,第i层(根为第0层)有2^i个节点。由于建堆过程自底向上,以交换作为主要操作,因此第i层任意节点在最不利情况下,需要经过(n-i)次交换操作才能完成以该节点为堆根节点的建堆过程。因此,时间复杂度计算如下:

T(n) = 2^0 * (n - 0) + 2^1 * (n - 1) + ... + 2^n * (n - n) = sum((n - i) * 2^i)

采用错位相减法:

  • 原式乘2得:
  • T(n) * 2 = 2^1 * (n - 0) + 2^2 * (n - 1) + ... + 2^(n+1) * (n - n)
  • = sum((n - i) * 2^(i+1))
  • 原式如下:
  • T(n) = 2^0 * (n - 0) + 2^1 * (n - 1) + ... + 2^n * (n - n)
  • = sum((n - i) * 2^i)
  • 相减得:
  • 2T(n) - T(n) = -n + 2^1 + 2^2 + ... + 2^n = 2 * (1 - 2^n) / (1 - 2) - n
  • = 2^(n+1) - 2 - n

上面推导中,n为层数编号(自0层根节点开始)。故总节点数为(1 + 2 + 4 + ... + 2^n) = 2^(n+1) - 1。渐进时,忽略减1取N = 2^(n+1)。

T(N) = 2^(n+1) - n - 2 = N * (1 - logN / N - 2 / N) ≈ N

故时间复杂度为O(N),得证。

【树与二叉树】堆的时间复杂度详解以及堆的应用—堆排序、TOP - K问题 今天我们认识并学习了堆的时间复杂度,并且通过分析对向下调整算法和向上调整算法也有了更深入的了解。还对堆的应用——堆排序、TOP - K问题进行了分析。下一篇博客我们将对二叉树链式结构进行分析及实现。希望我的文章和讲解能对大家的学习提供一些帮助。 阅读详情

相关推荐

数据结构--堆的要点、实现以及建堆时间复杂度证明

文章目录堆排序要点总结建堆详细时间复杂度证明实现代码(python)小根堆测试代码(堆排序正确性测试) 堆排序要点总结 堆的两个要素:是完全二叉树并且父节点的值一定大于(大根堆)或小于(小根堆)它的左右孩子。所有的操作,仔细思考后会发现,都是为绕这两点在做功课。   构建时使用的基础数据结构,一般使用数组模拟完全二叉树,模拟方法: 1号元素即为根节点 对于一个编号为n的节点,其左子节点编号为 2n,其右子节点编号为 2n + 1,其父节点编号为 n // 2 如果总结点数为n,则

qq_53215123的博客 1156

堆建立的不同方式的时间复杂度

堆建立的不同方式的时间复杂度:从上往下建堆和从小往上建堆

个人专长:数据结构和算法、大数据、数据库、主流框架 900

堆排序的时间复杂度解析:为什么建堆只要O(N)?

本文深入解析了堆排序中线性时间建堆的数学原理。通过对比自上而下插入法和自底向上堆化法,重点剖析了基于向下调整算法的自底向上建堆策略,并利用数学推导证明了其时间复杂度为O(N),揭示了其高效性的本质。

weixin_29268331的博客 245

建堆的时间复杂度分析

现在常有两种建堆的方法,而这两种方法又有着不同的时间复杂度。下面分别陈述: (1)自顶向下的建堆方式 这种建堆的方法具有O(n*log2n)的时间复杂度。从根结点开始,然后一个一个的把结点插入堆中。当把一个新的结点插入堆中时,需要对结点进行调整,以保证插入结点后的堆依然是大根堆。 其中h = log2(n+1)-1,第k层结点个数为2k个(当然最后一层结点个数可能小于2h)。第k层的一个结点插入之...

Black.Spider的博客 7201

SAP S4 MM模块自动记账全流程解析:从评估范围到科目分组的实战配置

本文深入解析SAP S4 MM模块自动记账的全流程,从核心概念评估范围与评估控制入手,详细阐述了评估类、科目分组等关键配置的逻辑关系。通过实战配置步骤,指导如何建立从物料移动(如收货、发料)到自动生成准确财务凭证的完整体系,确保库存价值与总账实时同步,为企业构建可靠的财务业务一体化基石。

weixin_29313547的博客 424

Linux-VMware安装后没有虚拟网卡VMnet1和VMnet8(亲测有效,一步一步跟着绝对成功)

VMware-安装后没有虚拟网卡VMnet1和VMnet8 就这个破东西我昨天弄了一天,网上什么VMware卸载重装,用CCleaner清理注册表什么的操作我全用了,但是昨天就是弄不好,同样的操作我昨天试了无数遍一直觉得可能是 持续更新中… 文章参考学习地址:https://blog.youkuaiyun.com/qq_42445139/article/details/87872130 ...

杨的博客 8851

【数据结构】建堆、堆的向下调整及其复杂度、堆的向上调整及其复杂度、Top-K问题

概篇博客主要写了堆与完全二叉树的关系,堆的概念和结构,堆的实现:堆的向下调整、堆的创建、建堆的时间复杂度、堆的插入、堆的删除最后写了堆实现的代码。又讲了Top-k问题,堆排序。其中又讲了向下调整建堆和向上调整建堆的时间复杂度。写的不好,希望各位大佬多多指点

m0_52094687的博客 3158

告别License烦恼:手把手教你用VS Code+Cppcheck搭建免费的MISRA-C代码检查环境

本文详细介绍了如何使用VS Code和开源工具Cppcheck搭建免费的MISRA-C代码检查环境,帮助开发者规避商业工具的高额License费用。通过四步环境搭建和实战技巧,实现高效的代码静态检查,提升嵌入式开发的安全性和可靠性。

weixin_42523326的博客 248

建堆是 O(n) 的时间复杂度证明。

建堆的复杂度先考虑满二叉树,和计算完全二叉树的建堆复杂度一样。 对满二叉树而言,第 \(i\) 层(根为第 \(0\) 层)有 \(2^i\) 个节点。 由于建堆过程自底向上,以交换作为主要操作,因此第 \(i\) 层任意节点在最不利情况下, 需要经过 \((n - i)\) 次交换操作才能完成以该节点为堆根节点的建堆过程。 因此,时间复杂度计算如下: \(T(n) = 2^0 * (n - 0)...

weixin_30527143的博客 306

pymol 动画简单制作,gif、mp4导出

参考: https://www.youtube.com/watch?v=G77K9Lro8js1、直接Movie下Program下,Camera Loop下Nutate下选择,这里选择30degover4 sec;如果要动画过渡自然,可以在这4sec后面再Append 1sec;如果需要两个视角,既可以再把窗口蛋白定位到比如配体,不用管中间过程怎么定位过去配体,再Program下,Camera Loop下Nutate下选择,这里选择30degover4 sec添加;最后如果要整体形成个循环播放,可以在这4s

weixin_42357472的博客 8437

图解ADAS电源系统架构:看懂这张图,搞懂前装摄像头的供电秘密!

别以为ADAS系统就是“摄像头 + SoC”,其实最难搞的是供电系统,尤其是要满足车规级ASIL-D安全等级时。供电时序、电压稳定性、电源监控、冗余通信链路,一个都不能少。😤一旦电源选型不对,轻则系统卡顿,重则全车失控,不是闹着玩的。

weixin_43199439的博客 674

对于堆排序的从下到上的建堆过程为什么时间复杂度是O(n)而不是O(nlogn)

堆排序的第一步:建堆过程为什么时间度是O(n)。 以升序为例,我们知道对于堆排序的第一步,是要先建立一个大顶堆。代码如下: void adjustHeap(vector<int>& arr, int parent, int length){ //先进行暂存最初的调整的开始位置即顶端的值 //如下也可以不用每次交换 int temp = arr[paren...

zhpf225的博客 2759

用 Custom Entity 打造 RAP Value Help:从能跑到好用的深度踩坑笔记

本文介绍了在RAP项目中实现Value Help(Fiori输入帮助)的完整流程。通过Custom Entity方式,开发者可以灵活构建不依赖数据库实体的值帮助功能,但需手动实现CDS原本提供的过滤、排序、分页等能力。文章以一个典型场景为例,详细说明了如何为Partner维护界面的City字段创建可搜索的值帮助,包括创建查询实现类、绑定CDS Custom Entity、服务发布等关键步骤,并特别指出了处理排序分页请求等常见问题。最后强调在ABAP Cloud环境下需要自行实现查询能力,而非依赖传统工具类。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 140

堆排序重建堆的时间复杂度_[转载]堆排序建堆复杂度为O(n)的证明

今天重温堆排序,在网上搜了好多博客文章,都是泛泛而谈。有的只讲了思路,有的直接贴上一份或几份代码。好一点的对复杂度进行了分析,但是讲到建堆复杂度,就一笔带过或者说请参考算法导论××页。我觉得求建堆复杂度并不难,了解一下对于理解堆排序是有好处的,下文为求解过程。堆排序就是借助于堆的数据结构和堆的操作函数来完成排序功能的过程。堆的数据结构可以借助于数组表示出来并可以高效地进行堆的操作。我们为堆(最大堆...

weixin_31046947的博客 360

机器人动力学仿真软件:Webots_(14).机器人声音仿真

Webots 中的声音仿真主要通过Sound和两种节点来实现。Sound节点用于播放预定义的音频文件,而节点则允许在仿真过程中动态生成和播放声音。这些节点可以用于模拟机器人的语音输出、报警声、环境噪音等。以下是一个示例,展示如何在控制器代码中播放预定义的声音。// 控制器代码(.c) # include <webots/robot.h> # include <webots/sound.h> # define TIME_STEP 64 const char * sound_name = "sound";

kkchenjj的博客 1312

【YOLO】Mask Proto分支理解

Mask Proto分支通过解耦全局原型与实例参数,在保持YOLO实时性的同时实现精准分割。其技术核心在于利用多尺度特征生成可组合的原型,结合动态系数适应不同目标形态。未来可进一步融合Transformer的注意力机制,增强对复杂场景的建模能力。

浩瀚之水的专栏 476

如何建堆?

我们首先将数组原地建成一个堆。所谓“原地”就是,不借助另一个数组,就在原数组上操作。建堆的过程,有两种思路。 第一种是借助我们前面讲的,在堆中插入一个元素的思路。尽管数组中包含 n 个数据,但是我们可以假设,起初堆中只包含一个数据,就是下标为 1 的数据。然后,我们调用前面讲的插入操作,将下标从 2 到 n 的数据依次插入到堆中。这样我们就将包含 n 个数据的数组,组织成了堆。 第二种实现思路,跟第一种截然相反,也是我这里要详细讲的。第一种建堆思路的处理过程是从前往后处理数组数据,并且每个数据插入堆中时,都

鸭梨的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

关于堆排序建堆时间复杂度的证明

建堆的过程,看起来外面一层循环O(n),里面是个logn的调整函数,时间复杂度貌似是nlogn的,但是仔细分析,其实质是O(n)的。 证明如下: 首先,对于高度为h的完全二叉树,其第i层的元素个数为2^(i-1),对于堆的每一层,调整的深度都不一样,每层的元素的调整深度小于等于h-i,假设每层调整的深度是h-i,欲构建的堆是个完全二叉树,那么对于每层来说: 最后一层不用调整;

不积跬步无以至千里 2311

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【数据结构】证明建堆的时间复杂度

建堆的时间复杂度 因为堆是完全二叉树,而满二叉树也是完全二叉树。此处为了简化,将采用满二叉树来证明。(时间复杂度本来看的就是近似值,所以多几个节点不会影响最终结果): 假设树的高度为 : 第层: 个节点,需要向下移动 层 第 层: 个节点,需要向下移动 层 第层:个节点,需要向下移动层 第 层:个节点,需要向下移动层 …… 第层:个节点,需要向下移动 层 则需要移动节点总的移动步数为: ① ② ② - ① 错位相减: ...

有道无术, 术尚可求。有术无道, 止于术。 1109

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

堆排序中建堆时间复杂度

建堆的过程,看起来外面一层循环O(n),里面是个logn的调整函数,时间复杂度貌似是nlogn的,但是仔细分析,其实质是O(n)的。证明如下:首先,对于高度为h的完全二叉树,其第i层的元素个数为2^(i-1),对于堆的每一层,调整的深度都不一样,每层的元素的调整深度小于等于h-i,假设每层调整的深度是h-i,欲构建的堆是个完全二叉树,那么对于每层来说:最后一层不用调整;倒数第二层的消耗是:2^(h...

Leslie's Blog 520

完全二叉堆之批量建堆

批量建堆 对堆的介绍请参考xxxx。 批量建堆(Heapify):就是将已经存在n个元素的数组批量添加至堆中,而不是遍历数组一个一个将元素添加至堆中。 遍历数组一个一个添加元素至堆中,时间复杂度为O(nlogn),而使用批量建堆,时间复杂度最低可以降为O(n)。 批量建堆有2种实现方法: 自上而下的上滤 自下而上的下滤 自上而下的上滤 自上而下的上滤类似于从第2个元素开始依次添加。 代码实现如下: for (int i = 1; i < size; i++) { siftUp(i); }

morris 1万+

C语言实现堆与堆排序详解:从零手写到TopK算法及时间复杂度证明

本文以C语言为载体,从零实现堆的核心操作(向上调整、向下调整)、建堆算法与堆排序,并深入剖析了向下建堆的O(n)时间复杂度证明,对比了向上/向下建堆的效率差异。在此基础上,进一步讲解了基于小根堆的TopK问题解法,清晰推导其O(n logK)的时间复杂度,帮助读者彻底理解堆结构在算法中的应用原理与优化思路。

2501_93399993的博客 662

堆排序优化指南:为什么筛选法建堆比向上调整快?时间复杂度深度解析

本文深入解析堆排序中筛选法建堆与向上调整法的时间复杂度差异,揭示筛选法为何更快。通过数学推导和实际案例对比,证明筛选法的时间复杂度为O(n),远优于向上调整法的O(n log n),并提供了工程实践中的优化建议和不同场景下的选择策略。

weixin_29228203的博客 168

二叉树之,堆(2)

向上调整算法的思路是在数组中,通过孩子节点定位父节点,然后比较交换完后,向上再找孩子节点和父节点。首先,我们打开文件,取出前 k 个数据,建成堆。那么无论在之前采用的是向上算法,还是向下算法,堆排序的时间复杂度,都是。,但是数据量太大,排序就不太行了,因为可能数据不会一下子全部加载到内存。接着,就是遍历剩余数据,挨个与堆顶比较。当然,首尾交换,去尾调整成堆的步骤,不难看出其时间复杂度是。同样的,如果我们要取前 k 个最小的数据,那么将这个堆调整成。当然,成堆之后,首尾交换,去尾调整成堆的步骤还是不改。

2401_87750511的博客 957
上一篇: Leetcode233-Number of Digit One
下一篇: Leetcode23-Merge k Sorted Lists
coderhuhy
博客等级 码龄12年 24粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值