用日常角度看数据结构和算法

牛皮了 终于有阿里架构师把困扰我多年的数据结构与算法讲明白了 对于一个程序来说,数据结构和算法有多重要呢?1、它是必备技能,不懂数据结构与算法的人不可能写得好代码。2、它是面试的敲门砖、职场晋升的加速器。3、日常开发中的性能问题需要通过优化算法和数据结构来解决。4、底层开发中需要使用非常多的数据结构和算法知识,以保证底层系统的稳定性和高效性,例如,华为 EMUI 系统通过优化算法和数据结构来保障系统使用 2 年不卡顿。5、计算机科学的很多新行业都离不开数据结构和算法作为基石,如大数据、人工智能等等。 阅读详情

有这么一个观点说,研究编程的程序员,做到最后都是数据结构和算法的研究。做了几年的编程以后的今天,觉得这个观点越来越有几分道理了。

原因:

  1. 计算机科学本来就是数学的一个分支,编程的难点和核心部分都是都是由数学算法作为基础

  2. 基础的数据结构都是存储数据在内存中,用算法调用和处理的数据。

  3. 计算机中对于数据结构和算法两者是分不开的,它们两者在内存交融处理计算。

本人高考数学考试不到一百分,是自己考砸了。至于原因不方便说,但是本人的数学基础还是挺好的,最近在温习高中数学,以方便研究数据结构和算法,在我们的工作中写算法不是光高中数学就可以的,很多还得有高等数学,尤其是线性代数,概率论,和微积分,但高中数学是它们的基础。程序中有很多出名的,有学术价值的算法都是在操作系统,和有关的程序引擎底层。举几个例子:游戏引擎,如unity3d,机器学习框架如tensorflow,计算机视觉框架如OpenCV。

    游戏引擎:比如:计算出模型是通过3D几何画图,模型表面的色彩和光照的渲染都是通过线性代数的矩阵来处理的。

   机器学习:比如:svm向量机处理数据,通过向量计算。

   计算机视觉:比如:图像的像素存储Mat是通过矩阵,美图美颜就是处理图像中Mat的存储的像素值。

 

我们来看看常用的数据结构:

参考博文:https://www.cnblogs.com/ysocean/p/7889153.html

一、数组

        数组就是可以在内存中存储多个元素的结构,其中的元素类型必须相同,而且在内存中是连续的,数组的元素是通过数组的下标访问,不是从1开始,而是从0开始。

    栗子:int [ ]  data  = new int[50];

                data[0] = 1; 

            它表示初始化了一个整型数组,数组名为data,数组长度是50,每个元素类型都是int型,在内存中的地址是连续的。并且赋值第一个元素为1。

        因为数组在存储数据时是按顺序存储的,存储数据的内存也是连续的,所以他的特点就是读取数据比较容易,插入和删除比较困难。简单解释一下为什么,在读取数据时,只需要告诉数组要从哪个位置(索引)取数据就可以了,数组会直接把你想要的位置的数据取出来给你。插入和删除比较困难是因为这些存储数据的内存是连续的,要插入和删除就需要变更整个数组中的数据的位置。

优点:

1、按照索引查询速度快,遍历数组方便。

缺点:

1、数组只能存储一种类型的元素。

2、数组的大小定义完之后固定,无法扩容。

3、添加和删除的操作慢,因为数组内存地址是连续的,需要移动其他元素

适用于频繁查询,对存储空间要求不大,而且很少删除和增加元素的情况。

二、栈

        栈只允许在栈顶进行操作,栈底不允许操作。栈的特点是:先进后出,或者是后进先出。在栈顶放入元素的操作是入栈,取出元素的操作是出栈。

        栗子:栈的结构很像集装箱,越先放进去的东西,越晚才能拿出来,最后放进去的东西,最先拿出来。

三、链表

        链表是存储单元上不连续的的存储结构,数据元素的逻辑顺序是通过链表的指针地址来实现的。每个元素包含两个节点。一个节点是存储元素的数据域,另一个节点是指向下一个节点的指针域。根据指针的指向,可以行成不同的结构,例如:单链表,双向链表和循环链表。

        链表是由一系列的节点组成,这些节点不必在内存中连续,当添加和删除元素的时候,只需要改变相关节点的指针指向即可,效率很高。

        单链表:最后一个结点的指针域设置为空(NULL),作为链表的结束标志,表示它没有后继结点。

        双向链表:每个节点的指针域都有两个指针,分别指向它的后继和前驱,所以,从从任意节点开始,都能方便的访问它的前驱节点和后继节点。

        循环链表:从单链表可知,最后一个节点的指针域指向NULL,当我们将尾指针指向头结点,那么就形成了一个循环链表。

    优点:1、不需要初始化容量,可以任意增减元素。

               2、添加或者删除元素时,只需要改变前后两个元素的指针指向即可,删除和添加元素会很快。

    缺点:1、查找元素需要遍历链表来实现,很耗时。

               2、链表存在大量的指针域,占用空间大。

四、队列

        队列类似于栈,不同的是队列是在一端增加元素,在另一端取出元素,特点是:先入先出,后入后出。放入元素的操作被称为入队,取出元素的操作被称为出队。

        栗子:队列的结构像是一根水管,从一个口入,另一个口出。

五、树

     上面的链表、队列、栈,都是线性表,因为其中每个数据元素只有一个前驱和一个后继,是一对 

一的关系。假如是一对多的关系呢?这种数据结构就是树。

      树是由n个(n>=0,n=0是,是一棵空树)有限节点构成的,是一个具有层次关系的集合。它看起来像是一棵倒挂的树,也就是说根朝上,而叶子朝下的。

      特点:1、每个节点具有零个或者多个子节点。

                 2、没有父节点的节点称为根节点。

                 3、每一个非根节点有且只有一个父节点。

                 4、除了根节点以外,每个子节点可分为多个不相交的子树。

      二叉树是树的一种,每个节点最多可具有两个子树,即结点的度最大为2(结点度:结点拥有的子树数)。

 

我们来看看常见的排序算法:

参考博文:https://www.cnblogs.com/eniac12/p/5329396.html

我们来看看常用的最小生成树算法:(作用于树型结构)

参考博文:https://blog.youkuaiyun.com/a2392008643/article/details/81781766

1.Kruskal算法

此算法可以称为“加边法”,初始最小生成树边数为0,每迭代一次就选择一条满足条件的最小代价边,加入到最小生成树的边集合里。 
1. 把图中的所有边按代价从小到大排序; 
2. 把图中的n个顶点看成独立的n棵树组成的森林; 
3. 按权值从小到大选择边,所选的边连接的两个顶点ui,viui,vi,应属于两颗不同的树,则成为最小生成树的一条边,并将这两颗树合并作为一颗树。 
4. 重复(3),直到所有顶点都在一颗树内或者有n-1条边为止。

 

2.Prim算法

此算法可以称为“加点法”,每次迭代选择代价最小的边对应的点,加入到最小生成树中。算法从某一个顶点s开始,逐渐长大覆盖整个连通网的所有顶点。

  1. 图的所有顶点集合为VV;初始令集合u={s},v=V−uu={s},v=V−u;
  2. 在两个集合u,vu,v能够组成的边中,选择一条代价最小的边(u0,v0)(u0,v0),加入到最小生成树中,并把v0v0并入到集合u中。
  3. 重复上述步骤,直到最小生成树有n-1条边或者n个顶点为止。

 

 

我们来看看常用的最短路径算法:(作用于图型结构)

参考博文:

原文链接:https://blog.youkuaiyun.com/m0_37345402/article/details/76695930

Floyd-Warshall--只有五行的算法

求任意两个点之间的最短路程。 从i号顶点到j号顶点只经过前k号顶点的最短路程,这是一种动态规划的思想。

Dijkstra算法

——单源最短路径

 

每次找到离源点最近的一个顶点,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径。

 

1.把所有的顶点分为两部分:已知最短路程的顶点集合P和未知最短路径的顶点集合Q。 最开始,P集合中只有源点一个顶点,用visit[i]数组来记录哪些点在集合P。visit[i]=1表示这个顶点在P集合中,visit[i]=0表示这个顶点在Q集合中。

 

2.设置源点s到自己的最短路径为0,即dis[s]=0,若存在有源点能直接到达的顶点i,则把dis[i]设为e[s][i],同时把所有其他(源点不能到达的)顶点的最短路径设为inf。

 

3.在集合Q的所有顶点中选择一个离源点s最近的顶点u(dis[u]最小)加入到集合P,并考察所有以点u为起点的边,对每条边进行松弛操作。例如:存在一条u到v的边,通过u->v添加到尾部来拓展一条从s到v的路径,这条路径的长度是dis[u]+e[u][v]。如果它的值比目前已知的dis[v]的值要小,我们可以用新值来替代当前dis[v]中的值。

 

常见机器学习算法:(有浅入深)

参考博文:https://blog.youkuaiyun.com/qq_42379006/article/details/80741808

数据结构与算法MOOC习题解题报告(PART 1:第1课-第5课) 数据结构与算法MOOC习题解题报告(第1课-第5课) 阅读详情

相关推荐

第1-3课:算法设计常用思想之分治法

在第 1-2 课中介绍了算法模式中的贪婪法,这一课我们继续介绍分治法。分治,顾名思义,分而治之。分治法(Divide and Conquer)也是一种解决问题的常用模式,分治法的设计思想是将无法着手解决的大问题分解成一系列规模较小的相同问题,然后逐个解决小问题,即所谓分而治之。分治法产生的子问题与原始问题相同,只是规模减小,反复使用分治方法,可以使得子问题的规模不断减小,直到能够被直接求解为...

oRbIt 的专栏 2720

数据结构与生活

练武不练功,到老一场空。

一个腰部以上的叛逆 3630

WhatsApp注册流程逆向分析:从协议解析到风控对抗实战

移动应用安全分析的核心在于理解客户端与服务端的交互协议与验证机制。通过逆向工程,可以深入剖析应用的数据加密、传输与身份验证原理,这对于构建安全模型、进行自动化测试和风控策略研究具有重要技术价值。在即时通讯、金融支付等高安全要求场景中,掌握应用注册流程的底层实现是评估其安全性的关键。本文聚焦于使用动态分析工具如Frida进行Hook和流量抓包,结合设备指纹识别与模拟器检测技术,详细解析了大型应用的注册风控体系,为安全研究人员和开发者提供了从环境搭建到实战对抗的完整方法。

weixin_33935636的博客 315

算法设计思想(4)— 分治法

1. 概念 分治,顾名思义,分而治之。 分治法的设计思想是将无法着手解决的大问题分解成一系列规模较小的相同问题,然后逐个解决小问题,即所谓分而治之。 分治法产生的子问题与原始问题相同,只是规模减小,反复使用分治方法,可以使得子问题的规模不断减小,直到能够被直接求解为止。 2. 分治法设计步骤 分解: 将问题分解为若干个规模较小,相互独立且与原问题形式相同的子问题,确保各个子问题的解具有相同的子...

wohu1104的专栏 2915

英飞凌TC377的Flash管理、UCB配置与HSM安全机制解析

本文深入解析了英飞凌TC377微控制器的Flash存储结构、UCB配置机制与HSM安全模块。详细阐述了带Cache与不带Cache的PFlash地址访问差异、利用SOTA与AB Swap实现无感OTA更新的原理,以及如何通过UCB安全配置启动流程与写保护。重点剖析了HSM硬件安全模块在密钥管理、安全启动与安全OTA中的核心作用,为开发高可靠性嵌入式系统提供实战指南。

weixin_29170327的博客 523

使用moveit中的报错及解决

1.fatal error: moveit/move_group_interface/move_group.h: 没有那个文件或目录。// #include <moveit/move_group_interface/move_group.h> 改为。问题1 moveit/move_group_interface/move_group.h: 没有那个文件或目录。在运行c++程序时报错。

qq_60566155的博客 2285

算法概述

什么是算法? 算法是模型分析的一组可行的、确定的和有穷的规则。 从计算机程序设计的角度看,算法由一系列求解问题的指令构成,能够根据规范的输入,在有限的时间内获得有效的输出结果。算法代表了用系统的方法来描述解决问题的一种策略机制。 算法的5个特征: 1、有穷性 算法的指令或者步骤的执行次数是有限的,执行时间也是有限的。 2、确切性 算法的每一个指令或者步骤都必须有明确的定义和描述。

Gump的博客 523

ABAP ALV 导出总被锁死为固定格式?把 Always Use Selected Format 一键重置到可选状态

摘要:SAP ALV报表导出时勾选"Always Use Selected Format"会导致导出格式被锁定,无法切换格式。文章分析该问题原因(系统持久化配置),提供用户自助解法(ALV list使用&RESET_EXCEL命令码,ALV grid通过右键菜单恢复弹窗),管理员治理方案(使用SALV_BS_ADMIN_MAINTAIN报表批量处理),并指出SAP_BASIS 7.02版本的特殊处理方式(需参考SAP Note 1716802和1590484)。最后给出排障清单,

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

数据结构与算法(Python版)一:什么是算法分析

算法分析的概念 程序和算法的区别 算法是对问题解决的分步描述。 程序是采用某种编程语言实现的算法 算法分析主要就是从计算资源消耗的角度来评判和比较算法 更高效利用计算资源,或者更少占用计算资源的算法就是好算法。 计算资源指标 一种是算法解决问题过程中需要的存储空间或内存 存储空间收到问题自身数据规模的变化影响要区分哪些存储空间是问题本身描述所需,哪些是算法占用不容易 另一种是算法的执行时间 可以对程序进行实际运行测试,获得真实的运行时间 运行时间检测 Python中有一个time模块,可以获取计算机系统当前

神薯片 560

AUTOSAR知识点 之 XCP (三):XCP功能描述

记录一下XCP使用时候的功能包含命令时序、错误码表、事件描述以及对规范的记录。XCP的图示如下从上图就可以看出数据流的流向CAN-CANIF-XCP,发送反之。XCP的状态机如下。

梦想技术家 3075

【100%通过率】华为od机试C卷【出差 / 员工派遣】Java&Go 实现

某公司部门需要派遣员工去国外做项目。现在,代号为 x 的国家和代号为 y 的国家分别需要 cntx 名和 cnty 名员工部门每个员工有一个员工号 (1,2,3,......),工号连续,从 1开始。部长派遣员工的规则:

MISAYAONE的博客 2639

数据结构与程序的关系_数据结构(一)概述

数据结构是一门研究非数值计算的程序设计学科,曾获图灵奖的Pascal之父Nicklaus Wirth提出过一个有名的公式:算法 + 数据结构 = 程序由此可见在计算机程序中,数据结构是占有很重要的位置的。一般通过计算机解决问题时,大致需要经过以下几个步骤:(1)从具体问题中抽象出数学模型;(2)根据数学模型设计算法;(3)将算法用程序语言实现。算法是人脑进行逻辑思考以后的产物,那么如何高效的实现算...

weixin_39849930的博客 4108

第4.4节:保护轴承与安全系统

飞轮储能系统的保护轴承是磁悬浮失效时的最后安全屏障,其设计需满足非干涉性、高可靠性和有限寿命承载原则。转子跌落过程包括自由下落、碰撞、进动和滑行减速等复杂非线性阶段,产生远超常规工况的冲击载荷。保护轴承需具备极限冲击容量、高温耐受性和抗卡死能力。系统采用多层级安全架构,结合故障诊断与健康管理,通过监测振动、电流等参数实现预测性维护。安全停机序列有序结合主动制动与被动摩擦制动,确保系统在极端工况下的安全。保护轴承类型多样,需根据系统规模与可靠性要求合理选择。

技术工作者 227

栈和队列是两种特殊的线性表,从数据逻辑结构角度看,栈和队列的元素均呈现一种线性关系

队列(简称队)也是一种运算受限的线性表,在这种特殊的线性表上,插入限定在表的某一端进行,删除限定在表的另一端进行。队列的插入操作称为进队,删除操作称为出队。允许插入的一端称为队尾,允许删除的一端称为队头。新插入的元素只能添加到队尾,被删除的只能是排在队头的元素。从数据逻辑结构的角度看,栈和队列的元素确实都呈现一种线性关系。但它们在数据操作方式上有所不同,这使得它们具有不同的特性。正是这种受限的元素插入和删除运算,使得队列表现出先进先出或者后进后出的特点。

[Blog][Domain] programb.blog.youkuaiyun.com 4661

C# 固高板卡(总线型) 操作类

主要功能有:初始化,轴使能,正负方向手动移动,回0,点到点移动,等待移动完成,输入IO数据读取,输出IO控制,清除报警等功能。

StevenChen的博客 571

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

牛皮了!终于有阿里架构师把困扰我多年的数据结构与算法讲明白了

对于一个程序来说,数据结构和算法有多重要呢? 1、它是必备技能,不懂数据结构与算法的人不可能写得好代码。 2、它是面试的敲门砖、职场晋升的加速器。 3、日常开发中的性能问题需要通过优化算法和数据结构来解决。 4、底层开发中需要使用非常多的数据结构和算法知识,以保证底层系统的稳定性和高效性,例如,华为EMUI系统通过优化算法和数据结构来保障系统使用2年不卡顿。 5、计算机科学的很多新行业都离不开数据结构和算法作为基石,如大数据、人工智能等等。 牛皮了!终于有阿里架构师把困扰我多年的数.

Java有胜 203

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数据结构与算法学习笔记——基本概念

零基础自学数据结构与算法,记录编程学习日常,基于《大话数据结构》进行学习与重点知识整理

fsh19991107的博客 424

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

牛皮了,终于有阿里架构师把困扰我多年的数据结构与算法讲明白了

对于一个程序来说,数据结构和算法有多重要呢? 1、它是必备技能,不懂数据结构与算法的人不可能写得好代码。 2、它是面试的敲门砖、职场晋升的加速器。 3、日常开发中的性能问题需要通过优化算法和数据结构来解决。 4、底层开发中需要使用非常多的数据结构和算法知识,以保证底层系统的稳定性和高效性,例如,华为EMUI系统通过优化算法和数据结构来保障系统使用2年不卡顿。 5、计算机科学的很多新行业都离不开数据结构和算法作为基石,如大数据、人工智能等等。...

m0_72011831的博客 115

基于Jimeng LoRA的数据结构优化:提升算法效率实战

本文介绍了如何在星图GPU平台上自动化部署🧪 Jimeng LoRA镜像,实现数据结构性能优化。该工具通过分析内存访问模式和缓存行为,指导开发者优化数组、树和哈希表等结构,显著提升算法执行效率,特别适用于大规模数据处理和高性能计算场景。

weixin_33816734的博客 316

算法AI双轨课程体系:从数据结构到机器学习实战

在人工智能技术快速迭代的今天,算法学习被很多开发者视为一道分水岭:它既是数据结构、排序与搜索、图论等基础知识的代名词,也是反向传播、3D CNN、粒子群优化等模型算法的底层支撑。基础算法解决的是“如何高效计算”的工程问题,AI算法解决的是“如何从数据中学习规律”的智能问题,二者看似分属不同轨道,实则互为支撑。一个成熟的开发者,既要能通过KMP、Dijkstra等经典算法优化系统性能,也要能借助模拟退火、梯度下降等优化策略训练出可靠的模型。在搜索推荐、视频识别、Agent应用等真实场景中,算法能力已从单一技能

weixin_34319111的博客 392

算法工程师能力评估框架:从数据结构到模型原理的实战考察

算法工程师的能力评估,往往不是看刷题数量或模型精度,而是考察从数据结构到算法原理的工程落地能力。以KMP算法的next数组推演为例,候选人能否理解失配回退的深层逻辑,直接反映其对基础知识的掌握程度。在模型层面,ELBO推导、BM25的参数设计等经典原理,决定了候选人在真实系统中能否应对训练不收敛、特征偏移等问题。从面试场景延伸至团队日常协作,建立涵盖编码基础、算法原理、工程实现、业务建模的系统化评估框架,才能准确识别候选人的真实水平。本文基于作者多年面试经验,分享一套可落地的算法工程师能力评估方法与自检清单

weixin_30634661的博客 440

初识算法-算法无处不在

小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。这样一来,我们就能把生活中的问题转移到计算机上,以更高效的方式解决各种复杂问题。在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能用大面额的货币),最终得到了可行的找零方案。假设我们需要查找一个拼音首字母为 𝑟 的字,通常会按照图 1-1 所示的方式实现。然而实际上,许多算法并不涉及复杂数学,而是更多地依赖基本逻辑,这些逻辑在我们的日常生活中处处可见。我们在打牌时,每局都需要整理手中的扑克牌,使其从小到大排列,实现流程如图 1-2 所示。

weixin_43084836的博客 704

基于SpringBoot的《数据结构》考研辅助学习系统

摘要: 针对《数据结构》课程学习与考研备考需求,本文设计并实现了一个基于SpringBoot和MySQL的辅助学习系统。系统整合理论讲解、算法可视化、智能题库及真题模拟功能,通过交互式学习降低理解难度,并利用错题分析精准定位薄弱环节。开发采用Java语言,结合SpringBoot框架简化配置,MySQL5.7管理数据,支持多端访问。系统提供管理员与用户界面,包含动态算法演示、个性化推荐及模拟考试等功能,有效提升学习效率。测试表明,该系统操作便捷、性能稳定,为考研学生提供了针对性强的备考工具,同时为计算机课程

yh1340327157yh的博客 829

蘑菇街算法实习生笔试复盘:数据结构与算法核心考点解析

数据结构与算法是互联网算法岗笔试的核心基石,从KMP字符串匹配到排序复杂度分析,从TopK问题到动态规划,这些经典考点直接检验候选人的工程思维与代码功底。掌握其原理不仅能高效应对笔试,更能为推荐、搜索等业务场景中的海量数据处理提供可靠方案。在电商场景下,算法实习岗还需兼顾机器学习基础与概率统计素养,理解逻辑回归、正则化等模型细节,才能从数据特征到业务指标形成完整闭环。本文以蘑菇街算法实习生笔试为样本,系统拆解各模块的考点脉络与备考策略,帮助求职者构建从基础算法到业务方案的完整知识体系,从容应对互联网公司的技

weixin_33957648的博客 349

数据结构入门(1):什么是数据结构?什么是算法?

本文系统介绍了数据结构与算法的核心概念。数据结构研究数据的组织方式,分为逻辑结构(集合/线性/树形/图形)和物理结构(顺序/链式存储)。算法是解决问题的步骤,需具备有穷性、确定性等特性。重点讲解了时间复杂度(大O表示法)和空间复杂度的分析方法,通过示例说明常见复杂度等级(O(1)/O(n)/O(n²)/O(log n))。最后总结了数据结构与算法的基本概念对比表,并列出必考知识点,包括数据元素/数据项/数据对象的层级关系、四种逻辑结构特点及算法评价标准。本文适用于计算机专业学习、考试复习及面试准备。

LeoJunp的博客 539

可变策略的拟人式三维装箱算法实现-开源

可变策略的拟人式三维装箱算法实现。python数学建模代码算法装箱航运优化。给定一个长方体容器和较多不同形态的长方体货物,需确定装箱策略,使货物尽可能多地装填到容器中。

JaydenCheng的博客 8350
上一篇: 会一门语言如何快速看懂和学习一门新语言
下一篇: Java单机模式下重要的两个知识点(数据检索和并发线程)
Frank浩
博客等级 码龄15年 4粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Frank浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值