我的九月学习之路

  我是一名新大三的学生,喜欢跑步,参加过四次半马,也喜欢折腾电子产品,玩过nas,拆过电脑,装过主机,喜欢玩游戏(虽然现在已经没空玩了),从暑假开始决定向计算机方向发展,假期重学了一遍c小程和c大程,并且做完了所有c程的习题集,现在在学数据结构。新的学期选了计算机组成,数据结构基础,计算机网路三门课程。此贴仅记录我的九月学习之路。
  九月给自己立一个flag:学完6.006!欢迎大家监督!

9.20更新:目前看来6.006是完全没问题学完的。之后的规划是学完c++之后学操作系统,学完c++后每天一道leetcode可以开始了。

把学6.006的参考博客放在这里:算法导论 - 随笔分类 - Alvin_Ai - 博客园 (cnblogs.com),感谢前辈

---------------------------------------------------------------------------------------------------------------------------------

9.10

  学了第四讲heaps 主要说了堆的排序和O 1把一个无序的堆排成有序的,要从倒数第二行开始(第n/2个数),做一个从这个数向下在左leave和右leave上不停地取最大值放在root上,直到底部 的操作,重复从n/2到1。完成了有序的操作。 此步的复杂度是O(n),证明挺简单的 2但是这样有序排列之后,不能保证同一行左边的比右边的大,所以排序还需要操作。
  排序:1同第一步,把堆变成有序。2把root和最后一个进行交换,并把root拿出来,作为排序的第一个3.删去最后一个4.对root进行一个从root向下在左leave和右leave上不停地取最大值放在root上,直到底部 的操作。5.从2继续,直到堆中没数了。 第一步是O(n),第二步第三步都为O(1),第四步是(lg n)。所以总的排序是O(nlg n )
--------------------------------------------------------------------------------------------------------------------------------

9.11

  学了第五讲binary sort search,讲的是二叉搜索树,例子是飞机场起飞航班飞行的时间,不能用array和heaps,所以引出bst,和堆类似,不过是left小于root,right大于root。
---------------------------------------------------------------------------------------------------------------------------------

9.12

  学了第六讲balanced binary search trees 讲的是第五讲留下的问题:如果二叉搜索树左右非常不平衡。方法是从下向上遍历一遍:如果左边的Nh与右边Nh的差大于1,就分情况进行left rotate(左旋转)和right rotate(右旋转)。avl表示左右两侧的Nh(min nodes in hight-h avl tree)的差小于等于1.时间复杂度是o(lg n)。 之后比较了heaps和avl tree。除了avl tree可以快速的找到接下去更小的数和更大的数之外,他们其他功能区别不大。但是heaps占用空间小,容易写。而avl tree功能强大,条件允许还是写功能强大的吧。
  学了第七讲 linear-time sorting 主要说的是线性排序,说了两个,一个是counting sort(计数排序)一个是radix sort(基数排序) 前者用链表进行字典+顺序输出,后者则是对于多位数的排序,从低位到高位
   //明天学校开始上课了,自己的专业课程准备放弃,一心一意准备在转码上。上专业课就去隔壁自习,要点名就回来
---------------------------------------------------------------------------------------------------------------------------------

9.13

  学了第八讲,hash,引入了哈希(dict),并且讲了预哈希处理,讲了链式,讲了简单均匀散布,讲了三种预哈希算法:除:k%m,乘:(a*k%2^w)》(w-r),w表示计算机的位数,通用哈希:(ak+b)%p,ab随机生成,p是一个很大的素数。ADT(抽象数据类型)
  复习了一下之前学的heaps,自己用c语言写了一遍。感触还是挺深的 :1在写程序之前要先想好思路,不要一来就写,应该先设计结构。之前学c的时候翁恺老师就说过,那个时候自己没感觉,今天一写人就麻了。我定义了一个struct叫heap,里面有一个数组指针和两个int,表示数据大小和个数(看网上代码写的)。但是之后就没用到,一直写到建立排序完初始的heap都没出现问题,但是到了插入和删除要改变SIZE的时候就不行了,我size直接用define的 2要细心,今天在写排序的时候,总是不对,最后仔细检查才发现在判断的时候=和==搞错了,害的我搞半天!以后debug的时候先搜索一遍=,检查一下! 3要注意复习,好几天之前学的内容现在严已经有些忘记了,之后要多复习
  晚上学了第九讲 hashing散列,首先讲的是如何选择散列m的大小,应该选择2n更加节省时间,对于删除来说,应该要当n=m/4(或者n=m/k,k>2的整数)才把m=m/2,节省时间。之后讲的是字符串匹配,先介绍了Rolling Hash ADT,一个滚动的散列表,在读取和需要比较的字符串长度一样的大字符串时,会把最前面一个删掉,读进后一个新值,这样比较就可以用两个散列表来比较了,可以节省时间。算法叫Karp-Robin Algorithm,当hash(rs)==hash(rt)不能说明大字符串中有搜索的字符串,应该还要比较顺序,之后才确定。
------------------------------------------------------------------------------------------------------------------------------

9.14

今天是我的生日,首先先祝我生日快乐!

【11:20】学了第十讲hashing3 之前两章说的哈希全是用chaining的,这次提出了一个新的概念open addressing(开放地址),相比之前,这个方法在查改删都不一样,是哈希函数是h(n,k)n表示数字大小,若h(n,1)指向的key不是none,就把k+1,找下一个key。需要注意的是,在查找时,当k=1指向的key是none时,不一定说明hash里面没有那个数,可能是之前这里有数,但是被删除了,所以需要在删除时,把key的flag改为delete而不是none,delete对于插入被视为none,但是对于查找则是视为有值。
   说了两种hash函数。1是线性探测法h(n,k,)=(h'(n)+k)%m,这样会让大量数据堆在一起,在查找,删除,插入都需要线性的时间不是很好。2是再散列法h(n,k)=(h1(n)+h2(n)*k)%m

【20:29】在紫金港医学图书馆。学了第十一讲Numerics数字。主要介绍了Catalan numbers(卡塔兰数字),NewTon‘s Method,High Precision Multiplication(高精度乘法)。卡塔兰数字是:c0=1,c1=1,c2=c0c1+c1c0=2,c3=c0c2+c1c1+c2c0=5......可以用于解决“求括号化方案数量”的问题。NewTon‘s Method是求函数与x轴交点的方法,是取切线与x轴交点,然后用交点进行重复操作,提高精度。High Precision Multiplication(高精度乘法)是把两个小于r^2的数分别拆成两个之后相乘,其进行了四次乘法,复杂度是O(n^2)而Karatsuba 算法进行三次乘法,复杂度是O(n^lg3)=O(n^1.58)
------------------------------------------------------------------------------------------------------------------------------

9.15

【10:57】刚刚看了十二讲,主要说了高精度乘法的拓展,比如把乘数分成三个……高精度除法,a/b变为a*[(R/b)%1]。R是一个很大的很容易被除的数,而R/b用牛顿法来算。后面就有点看懵了,我想之后再回来看一遍了。
【13:51】把mooc上的数据结构第一章看完了
---------------------------------------------------------------------------------------------------------------------------------

9.16

【10:57】看了第十三讲图,广度优先搜索BFS(Breadth First Search).图分成有向图和无向图。介绍了三种表示图的方法:邻接表(Adjacency List)、面向对象法和含糊表示法。邻接表和hash比较像,建立一个表,包含所有的顶点v。每个顶点指向的其他顶点就是这个顶点可以连接的顶点(有点像chaining的hash表)。BFS是从level=0的顶点开始,向下搜索,把新搜索到的点(而且没有加入过level的点)加入到level中,重复,直到结束。通过BFS可以轻松的获得两点之间最短距离,如果k在level[x],那么k距离s(level0)的距离就是x。

【16:05】学了第十四讲,深度优先搜索DFS(Death-first Search)、循环检测(Cycle Detection)、拓扑排序。DFS其实就是从一个点出发,沿着路径一直走,一直走到没有记录过的点为止。时间复杂度是(V+E)。还讲了对于DFS的边分类。有四种:tree edge:由parent pointer指出的边;forward edge:树中指向子辈的边;back edge:树中指向父辈的边;cross edge:连接两个没有关系的父辈之间。循环检测就是:图有一个循环与图至少有一个back edge等价。拓扑排序,专门对于Drected Acylic Graph(有向非循环图)DFG,对于这类问题,我们可以使用DFG,然后反着输出点的完成时间。

【22:09】学了第十五讲,加权之后的最短路径。之前讲的搜索都没有对edge进行加权,这次说的就对edge进行了赋值之后再来找最短路径。但是如果有edge的值是负的就会出现问题,比如“负循环”,一圈走下来的和是负的。所以老师提出了一种“relax”的方法,在非目标点加上与目标点距离的赋值与目标点数值比较,来使目标点值下降,直到所有的非目标点加距离的赋值都小于等于目标点的值。但是这样也有错误,因为有可能目标点的值改变之后也会带动非目标点的值改动。最后。老师还说最短子路径定理:最短路径的子路径一定是最短路径。很好理解。
---------------------------------------------------------------------------------------------------------------------------------

9.17

【9:17】学了第十六讲Dijkstra,首先先复习了上节课的内容,对于relax,都有d[v]<=δ(s,v)。之后说对于DAGs(没有循环,可以有负的edge),第一步是进行拓扑排序,找到出发点,左侧的值全赋为无穷,第二步是realx从起点出发可以到的所有的d值,之后relax起点往右一位出发的d值,以此类推,直到末端。然后开始说Dijkstra(有循环,不可以有负的edge)第一步是对于插入点的优先排序,第二步是抽取最小值,第三步是relax(减键),之后重复23步。最后说了不同的priority queue对于Dijkstra算法(包含插入优先队列、找最小值和删除键三个操作)的复杂度影响。讲了三种:数组O(V^2),二进制最小堆 O(VlgV+ElgV),斐波那契堆O(VlgV+E)。

【20:03】下午做了数据结构的作业,现在学了第十七讲Bellman-Ford讲的就是如果出现了负周期和负循环怎么办,Bellman-Ford提出的算法就是在对所有的点进行relax操作之后,再进行一次检查操作,查找有没有某个点可以变得更小,如果有就说明出现了负循环。同时也说了通用的最短路径算法的问题:1其复杂度是2^n。2如果出现负循环,则无法停止。前一个可以由Dijkstra解决,后一个则可以用Bellman-Ford解决。
---------------------------------------------------------------------------------------------------------------------------------

9.18

【9:20】学了第十八讲加速Dijkstra算法。老师讲了两种算法:双向搜索算法和目标导向算法。双向搜索算法是从起始点和目标点轮流进行搜索一轮。分别定义了当前最小路径权重和df, db 当前点的predecessor∏f, ∏b, 当前点的优先队列Qf, Qb。停止条件不是当Qf和Qb里面都没有了某一个点,而是Qf和Qb里面都没有数了,找到最小值路径的方式是找到(df(x)+db(x))的最小值。x就是最小值路径通过的点。目标导向算法是对于两个相同大小的edge选择的问题。虽然细节没怎么说,但是大意是通过w(u,v)=w(u,v)-λ(u)+λ(v),w(p)=w(p)-λt(s)+λt(t)来对不同路径进行新的赋值,从而使计算变得更加简便。

【18:50】刚刚学了第十九讲,动态编程。举了两个例子,一个是递归调用的斐波那契数列,一个是最短路径的求值。对于递归调用的斐波那契数列,是用f(n)=f(n-1)+f(n-2)来持续递归调用,非常不好,一来计算复杂,是指数次,二来占用内存大,数字上去之后容易崩。所以用动态编程的方法可以很好的解决这个问题,从1到n持续调用斐波那契函数,并且建立一个数组,记录斐波那契数列在n处的值,之后的求斐波那契数列就可以直接从数组中读取数字,不需要进行多余的计算,省空间,也省时间。第二个最短路径的求值,我听下来有点懵逼,有个图也没听懂,先放放。

下午上了计算机网络,真的好佩服郑扣根老师,讲课非常幽默,课堂上很多例子都很好笑,比如说:讲到OSl模型的数据链路层的特点-piggybacking,就说到和女朋友或者妈妈打电话的时候,她在对面说说说,如果你没有反应,那就麻烦了,所以你就会“嗯~”“嗯…”“嗯?”,生动形象,大家一下子全笑了出来。他说他之前什么都搞过,搞过电子、数学也搞过机械,最后一心一意地搞计算机。我们这个班级很小,所以每次上课都有很好的位置,这个时代确实学习条件很好,所以之后一定要更加努力地学习!
---------------------------------------------------------------------------------------------------------------------------------

9.19

【15:55】今天一直在写惯性导航的程序,上午一直不能把数据写到我定义的数组里面去,最后发现是因为我printf写的是%d,而我的数据定义的是double……太尴尬了。现在继续写。

【21:42】今天下午继续在写惯性导航的程序,基本上可以实现姿态矩阵的计算,还要一些细节的问题准备明天和同学讨论一下再改。晚上学了郭炜老师的程序设计与算法(c++)第一章,是一些基础的c++语言,讲了引用,常引用,内联函数,函数重载,函数的缺省值,说了程序化结构设计和面向对象程序设计的区别,说了类与对象,使用成员与函数,感觉和结构差不多。

6.006还有五课,看来九月看完是没有问题的,但是之后会有很多作业,计网和计组的作业,准备学完c++之后开始刷leetcode了。
---------------------------------------------------------------------------------------------------------------------------------

9.20

【14:06】今天上午本来是在看郭炜老师mooc的程序设计与算法,但是看了一半,感觉他说的很多东西之前都没有提过,于是我觉定还是看书--《新标准c++程序设计》,看了30页。吃完饭之后改了昨天写的惯性导航程序的姿态矩阵计算,基本上写完了。下午准备继续看《新标准c++程序设计》,今天晚上就稍晚休息一下吧,女朋友也从紫金港跑到玉泉来陪我了,我们准备晚上去西湖散散步。
---------------------------------------------------------------------------------------------------------------------------------

9.21

【19:52】今天是端午节,祝看到这里的大家节日快乐!今天上午八点半到的教室,和同学把惯性导航的姿态矩阵导入到keil5上面,进行了一些修改和配置,准备用板子试试看我们写的姿态矩阵能不能用,但是遇到了点麻烦,板子读进来的数据是uint_8的,我们还不清楚怎么把它转变为我们用的数据,查资料也查不到,数据书册上面也没有,我们最后还是去问老师了。下午在学《新标准c++程序设计》,学了复制构造函数,构造函数,析构函数,this指针,静态成员变量,成员类型,封闭类,常量对象、函数,友元,各种运算符的重载,感觉说的大部分都是概念,要多理解,记忆一下。准备接下来把第五周的mooc看完,之后明天整理一下前五周mooc学的内容,再把6.006看完。
---------------------------------------------------------------------------------------------------------------------------------

9.22

【9:25】昨天晚上看了第五周的mooc,今天上午刚刚看了第六周的mooc,讲了虚函数和多态。接下来准备上午把之前学的概念一些的知识全部整理一下,然后看6.006。

【20:55】下午在上课,晚上继续学习c++,把mooc上浏览过的概念自己反复看例子理解一下。这样感觉更加容易记住。

【21:39】对不起,今天学不动了,真的顶不住了,早点回寝室休息了。唉,可能这段时间逼得太紧了吧,前几天就有点流鼻涕,今天更加难受了,还拉肚子,连续三天了,唉…
---------------------------------------------------------------------------------------------------------------------------------

9.23

【9:26】这两天在准备腾讯游戏客户端的面试,把之前的数据结构和c++都复习一下。,过下去上计算机组成的课,下午继续复习。

【16:26】把c++的基础部分(一直到虚函数)复习完了。现在准备去看6.006和中文的数据结构基础不重合的部分(线性表,栈,队列,串)。学到五点半,然后去健身房撸铁,冲冲冲!

【21:52】把线性表,堆栈,队列学完了,相比较之前学的,这三个概念算是非常基础了。这三个数据结构都可以用数组和链表来表示。堆栈是让我印象最深的,其中运算优先级的计算非常有趣:表达式分成中缀表达式和后缀表达式,后缀表达式依靠堆栈用于计算十分方便,所以如何把中缀表达式改成后缀表达式是一个很重要的问题,而解决这个问题就用到了堆栈。把中缀表达式从左向右读,读到:1运算数:直接输出。2读到左括号:放入堆栈顶。3读到右括号:把运算符从上到下弹出(pop)直到左括号。4读到运算符:如果这个运算符优先级高于堆栈顶部优先级,则把它放在堆栈顶,如果这个运算符低于堆栈顶部优先级,则把堆栈顶部运算符弹出,这个运算符和新的堆栈顶部运算符比较,直到遇到比其优先的为止,到了底都没找到的话就把他存在里面。5全处理完之后,输出堆栈里的运算符。这样就可以把 2+9/3-5变成2 9 3 /+5-。堆栈还很有用:函数调用,递归都要用到,DFS,回溯算法都用得到。对于循环队列用数组实现来说,要注意:空载和满载时front和rear指针都是指在同一个地方,要注意区分,可以增加一个额外标记,也可以只存放n-1个数组。
---------------------------------------------------------------------------------------------------------------------------------

9.24

【16:22】上午在复习6.006的数据结构,之后去上体育课了。下午看了mooc上的哈希表部分,之后看了6.006的第二十讲,动态编程,真的有些看不明白,(主要可能是这一讲专有名词太多了难跟上老师的速度)准备去看一下中文的动态编程之后再回来看6.006的动态编程。

【17:26】重新看了一遍第二十讲,感觉也不是很难嘛。第二十讲主要是介绍了动态编程的通用的五个步骤,并且用了斐波那契数列和最短路径问题来演示,也讲了文本对齐和二十一点两个例子来示范。通用的五个步骤分为:1找到子问题。2猜解决子问题的方法.3关联解决子问题的方法.4建立算法,递归。5解决原问题。
  对于斐波那契数列:1Fk(1<k<n)的值的求解。2不用猜,没有。3Fk=Fk-1+Fk-2。4从1到k进行计算Fk的值。5计算出Fk的值。
  对于最短路径:1用k条边,从s到v的最短值路径的大小。2各个到v的路径(点集合设为E).3找到s到E的路径的值(用k-1条路径)加上E到v的距离的和的最小值。4k从0到|v|-1循环。5完成
对于文本对齐:分别为:1第i个字母之后的字符怎么排?2猜第二行从哪里开始排。3递归步骤二。4从后向前去安排字母排的顺序。5解决问题。
对于二十一点(游戏规则挺像我老家玩的十点半):不过有点没看懂……

【20:39】看了第二十一讲,老师又讲了两个动态编程的两个例子。
  矩阵计算的加括号问题:1子问题是A[i:j]需要的时间。2解决方法是:猜(A1*A2……Ak)*(Ak+1*……An)中k的值是多少。3DP[i:j]=min(DP[i:k]+DP[k+1:j]+(A1*A2……Ak)*(Ak+1*……An)需要的时间)。找到最小的DP[i:j].4拓扑排序,增加字串的大小。5一直到达到原问题DP[o:n].
  文档距离问题:文档距离指的是两个字符串(文档)变成一样的字符需要的花费(可以进行插入,删除,替换三种操作,每种有不同的花费)。1找到子问题:X[i:]与Y[j:]之间的文档距离。2 猜如何把X[i:]的头部转化为Y[j:]的头部,有三种方法(删除X[i],插入Y[j],用Y[j]替换X[i])
3 c(i,j)=max{cost(delete X[i])+c(i+1,j) ; cost(insert Y[j]+c(i,j+1) ; cost(replaceX[i]->Y[j])+c(i+1,j+1)}
4 拓扑排序,相当于一个2d的DAG找最短路径的问题。5找到原问题c(|X|,|Y|)。
---------------------------------------------------------------------------------------------------------------------------------

9.25

【10:35】刚刚看了第二十二讲,新讲了几种动态编程的例子:弹钢琴,俄罗斯方块,超级马里奥兄弟游戏。
    弹钢琴问题:我们有十个指头,在弹钢琴的时候,变换键位时,某一指头在某一键位变到用不同的指头按下不同的键位的困难程度是不一样的,我们的目的就是要找到最简单的方式去弹奏一个曲子。对于这个问题:1子问题是在note[i:]时用的是f手指的复杂度。(一共n*f个子问题)。2猜的方法是:下一个按键用g来按,得到note[i+1:],g。3递归是DP[i,f]=min(DP(i+1,g)+dif(from(note[i],f) to (note[i+1],g)))。4还是用拓扑图来表示,非常形象,因为在这里插图很麻烦就不插了。 5算出DP[0,f]即可。总时间是O(n*f*f)
    以上是弹钢琴问题,如果是吉他呢?手指一次要按下好几个键,怎么办?简单的说就是把f改成(f+1)^f,为什么是f+1呢,因为有情况是不按下的。总的时间就变成O(n*(f+1)^2f).f表示手指个数。
【15:22】刚刚改了简历,在准备每天的面试了,顺便巩固一下这一个月学的东西。
---------------------------------------------------------------------------------------------------------------------------------

9.26

【11:47】挺难受的,昨天晚上到今天上午都在准备腾讯客户端的面试,但是明显就是失败了。面试官算是我学长吧,他最后也说了,要多打好基础。这次面试我稍晚总结了一下,有这些问题:1简历不要瞎几把写,刚刚开始投的时候瞎吹,什么学过java,python之类的,然后他问了两句,我直接人傻了。简历上写的都是要被问到的。2.学习的时候要学会应用,不能只是理论,要考虑学了这种数据结构可以应用到什么地方,和其他的方式比有什么优势。他问了堆有什么用,用在什么地方,问了avl tree用在什么地方,有什么优势,我没用过,啥也不会。3学习方式要去知乎看看陈越姥姥,看看它说的怎么学,参考一下,之前可能学习的方法确实有问题。哎。挺难受的,不过这也是我第一次面试,面试官人真挺好的,给我提了很多建议,之后要针对问题来改进。
---------------------------------------------------------------------------------------------------------------------------------

9.27

【10:53】今天上午学了输入输出流,然后刚刚做了计算机网络的作业,然后发现自己错过了机械设计的作业,麻了,晚上再去找助教吧……

【22:31】,今天下午上课前还被计网的老师批评了,作业交上去12个题目对俩……我已经万念俱灰了,结果在上计网的时候忽然收到腾讯的邮件!告诉我通过了!我真的是太惊喜了,原地升天呜呜呜……晚上和女朋友在紫金港吃了一顿么哈庆祝了一下,然后在紫金港看了四课计算机组成的课程,感觉就像新学一门语言……作业题好多不会……每天继续加油!
---------------------------------------------------------------------------------------------------------------------------------

9.28

【11:52】今天上午一直在做计算机组成的作业,真的好难,作业一已经做了好几天了,每天都写一两个小时,每天都是一点都写不下去,今天最后去找了助教,他把答案发给我参考了一下,终于有点点会了…感觉前段时间对于计算机组成,计算机网络的时间分配的不够多…

【21:12】 下午在zjg上数据结构基础的课程,晚上在做数据结构基础的作业,主要是两道函数题,一道是把两个用链表表示的多项式合并,一个是把链表倒置。(用c写的)用起链表感觉还不是很熟练,这个题目typedef好多东西,专门指针还要typedef一下……感觉影响最深的就是,当你要把链表下一节点指向某一个数据的时候,可以直接v->Next=b,不用重新创建一个节点,因为b这个节点本来就是要被孤立的,可以直接拿来用。链表倒置听说用栈能很好的实现,下次试试,今天用的不是栈。
---------------------------------------------------------------------------------------------------------------------------------

9.29

【12:08】今天上午12节课做了计算机组成的第三周的作业,大部分都是指针和内存的题目,感觉不是特别难,但是题目是全英文的,看起来很吃力……然后学了c++中的函数模板和类模板,还要STL中的string的很多操作函数,感觉这些东西学了也不太记得住,还得靠自己去实践,不过还好,马上就有机会去自己实践了。下午准备把6.006结束,完成月初的flag,然后对接下来一个月进行一下规划。

【18:03】下午学了6.006的第二十三讲,计算复杂度。P:多项式时间。EXP:指数时间。R:有限的时间。还有NP:能在一定情况下转换成P的时间。对于复杂的情况,用Reduction,把复杂的情况转换成简单的可以解出来的情况来做。感觉更多的是思想和思考问题的方法。
---------------------------------------------------------------------------------------------------------------------------------

9.30

【21:45】今天上午12节预习了计算机组成的课程,345在上计算机组成的课,前半部分各种不同类型命令听的我云里雾里……下午和晚上都在做数据结构基础的大作业,基本上做完了,每天把报告写一下就好了。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------持续更新中------------------------------------------------------------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值