牛客101:堆/栈/队列

Python爬虫实战:实时爬取东方财富网股票行情 东方财富网实时行情(价格、涨跌幅、成交量等)K线图、分时图、技术指标市盈率、换手率、总市值等指标相比某些收费API,东方财富网页端接口不需要登录、免费、响应快、封装清晰,适合爬虫实践。东方财富网股票数据接口分析实时数据抓取与字段提取数据结构化处理自动化批量抓取多线程加速采集数据可视化展示支持存储为CSV/Excel/数据库。 阅读详情

目录

一、用两个栈实现队列

二、包含min函数的栈

三、有效括号序列

四、滑动窗口的最大值

 五、最小的k个数

六*、寻找第k大

七*、数据流中的中位数

八*、表达式求值


一、用两个栈实现队列

用两个栈实现队列_牛客题霸_牛客网

插入正常让元素进入第一个栈

删除,先让栈一所有元素进入栈二,取完栈二top,删除,剩余push回栈一,保证后续又插入新元素的队列顺序性

class Solution
{
public:
    void push(int node) {
        stack1.push(node);
    }

    int pop() {
        while(!stack1.empty())
        {
            stack2.push(stack1.top());
            stack1.pop();
        }
        int ret=stack2.top();
        stack2.pop();
        while(!stack2.empty())
        {
            stack1.push(stack2.top());
            stack2.pop();
        }
        return ret;
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};

二、包含min函数的栈

包含min函数的栈_牛客题霸_牛客网

双栈,一个栈正常操作,另一个栈只有插入元素更小的时候才入栈(错误,插入元素等于的时候也要入栈)

#include <climits>
#include <stack>
class Solution {
    stack<int> s1,s2;
public:
    void push(int value) {
        s1.push(value);
        //注意是>=不是>,等于也要push进,因为存在多个最小值
        //s1:2 2 2 2,s2:2,pop一次后s2就为空了,此时min是2,但min函数出错
        if(s2.empty()||s2.top()>=value)s2.push(value);
        // or
        // if(s2.empty()||s2.top()>value)
        //     s2.push(value);
        // else 
        //     s2.push(s2.top());
    }
    void pop() {
        if(s1.top()==s2.top())s2.pop();
        s1.pop();
    }
    int top() {
        return s1.top();
    }
    int min() {
        return s2.top();
    }
};

三、有效括号序列

有效括号序列_牛客题霸_牛客网

#include <stack>
class Solution {
    stack<int> st;
public:
    bool isValid(string s) {
        int n=s.size();
        for(int i=0;i<n;++i)
        {
            if(s[i]=='['||s[i]=='('||s[i]=='{')
                st.push(s[i]);
            else
            {
                if(st.empty())return false;
                
                if(s[i]==']'&&st.top()=='[')st.pop();
                else if(s[i]==')'&&st.top()=='(')st.pop();
                else if(s[i]=='}'&&st.top()=='{')st.pop();
                else return false;
            }
        }
        return st.empty()?true:false;
    }
};

四、滑动窗口的最大值

滑动窗口的最大值_牛客题霸_牛客网

法一:暴力

窗口大小大于数组大小的时候返回空

#include <climits>
class Solution {
public:
    vector<int> maxInWindows(vector<int>& num, int size) {
        vector<int> ret;
        if(size<=num.size()&&size!=0)
        {
            for(int i=0;i<=num.size()-size;++i)
            {
                int MaxNum=INT_MIN;
                for(int j=i;j<i+size;++j)
                {
                    if(num[j]>MaxNum)MaxNum=num[j];
                }
                ret.push_back(MaxNum);
            }
        }
        return ret;
    }
};

法二:双端队列

队列中维护该区间内部,元素大小从大到小排列的元素下标,为什么是下标因为后面滑动窗口的时候,如果队头元素下标不在这个区级内了,就要一直pop_front。对于新加入的元素,如果它始终大于(while)队尾,就一直删队尾,最终在合适位置push,如此就保证了双端队列中始终维护着在这个区间内部的 元素大小从大到小排列的 对应的从小到大排列的下标。(力竭了〒▽〒)

#include <climits>
#include <deque>
#include <vector>
class Solution {
public:
    vector<int> maxInWindows(vector<int>& num, int size) {
        vector<int> ret;
        if(size<=num.size()&&size!=0)
        {
            //dq存储下标
            deque<int> dq;
            //先处理一个窗口
            for(int i=0;i<size;++i)
            {
                while(!dq.empty()&&num[dq.back()]<num[i])
                    dq.pop_back();
                dq.push_back(i);
            }
            //滑动窗口,i为新区间的末尾元素下标
            for(int i=size;i<num.size();++i)
            {
                ret.push_back(num[dq.front()]);
                //不在区间内的元素删掉
                //i-size+1是新的区间的第一个元素下标
                while(!dq.empty()&&dq.front()<i-size+1)
                    dq.pop_front();
                //加入新元素,维护dq的方法同上
                while(!dq.empty()&&num[dq.back()]<num[i])
                    dq.pop_back();
                dq.push_back(i);
            }
            //最后一个窗口维护完,元素还没入ret
            ret.push_back(num[dq.front()]);
        }
        return ret;
    }
};

 五、最小的k个数

最小的K个数_牛客题霸_牛客网

维护大根堆数量为k即可

#include <queue>
#include <vector>
class Solution {
public:
    vector<int> GetLeastNumbers_Solution(vector<int>& input, int k) {
        vector<int> ret;
        if(k==0)return ret;
        
        priority_queue<int> heap;
        for(auto&x:input)
        {
            if(heap.size()<k)heap.push(x);
            //始终维护大根堆大小为k
            else
            {
                if(x<heap.top())
                {
                    heap.pop();
                    heap.push(x);
                }
            }
        }
        while(k--)
        {
            ret.push_back(heap.top());
            heap.pop();
        }
        return ret;
    }
};

六*、寻找第k大

寻找第K大_牛客题霸_牛客网

分治题怎么到这来了???

#include <cstdlib>
#include <vector>
class Solution {
public:
    int findKth(vector<int>& a, int n, int K) {
        if(n==0)return 0;
        srand(time(NULL));
        return qsort(a,0,n-1,K);
    }
    int qsort(vector<int>&nums,int left,int right,int K)
    {
        if(left==right)return nums[left];
        
        int key=getRandomKey(nums, left, right);
        int lt=left-1,rt=right+1,i=left;
        //注意不是i<=right
        while(i<rt)
        {
            //递增,注意i的更新规则
            //[0,lt]:<key [lt+1,i-1]:==key [i,rt-1]:未处理 [rt,right]:>key
            //>key的时候i不往后++,因为此时换来的来自未处理区域
            if(nums[i]<key)swap(nums[i++],nums[++lt]);
            else if(nums[i]==key)++i;
            else swap(nums[i],nums[--rt]);
        }
        //[left,lt] [lt+1,rt-1] [rt,right]
        int c=right-rt+1,b=rt-lt-1;
        if(c>=K)return qsort(nums, rt, right, K);
        else if(b+c>=K)return key;
        else return qsort(nums, left, lt, K-c-b);
    }
    int getRandomKey(vector<int>&nums,int left,int right)
    {
        return nums[rand()%(right-left+1)+left];
    }
};

七*、数据流中的中位数

数据流中的中位数_牛客题霸_牛客网

维护一个大根堆,一个小根堆,始终维护堆的数量相等,或者只相差1

最后取二者top相加除以2(详解见我的这篇文章:基础算法:优先级队列-优快云博客)

#include <queue>
class Solution {
    priority_queue<int> Bigheap;//大根堆存储前一半小的
    priority_queue<int,vector<int>,greater<int>> Smallheap;//小根堆存储后一半大的
public:
    void Insert(int num) {
        //最终大根堆size-1=小根堆size
        if(Bigheap.size()==Smallheap.size())
        {
            //先判断空,空也直接插入,但是取不到top会报段错误
            if(Bigheap.empty()||num<Bigheap.top())Bigheap.push(num);
            else
            {
                Smallheap.push(num);
                Bigheap.push(Smallheap.top());
                Smallheap.pop();
            }
        }
        //大根堆size比小根堆size大1
        //最终size相等
        else
        {
            //因为是大根堆先插入,我们先判断新插入的会不会比大根堆先插入的更小
            //更小就把数字迁到小根堆
            if(num<Bigheap.top())
            {
                Bigheap.push(num);
                Smallheap.push(Bigheap.top());
                Bigheap.pop();
            }
            else Smallheap.push(num);
        }
    }

    double GetMedian() { 
        if(Bigheap.size()>Smallheap.size())return Bigheap.top()*1.0;
        else return (Bigheap.top()+Smallheap.top())/2.0;
    }
};

八*、表达式求值

表达式求值_牛客题霸_牛客网

直接看官方的解法吧

#include<cctype>
#include <vector>
class Solution {
public:
    //第二个下标方便处理()内部内容,出递归后更新下标位置
    vector<int> function(string s,int index)
    {
        stack<int> st;
        int num=0,i=index;
        char op='+';
        for(;i<s.length();++i)
        {
            //如果是数字,处理这一层的数字
            if(isdigit(s[i]))
            {
                num=num*10+s[i]-'0';
                //如果还没到达末尾,跳过后续的入栈
                if(i!=s.length()-1)continue;
            }
            //如果是左括号,进入递归,将括号内结果当作一个整体
            if(s[i]=='(')
            {
                vector<int> res=function(s, i+1);
                num=res[0];
                i=res[1];
                if(i!=s.length()-1)continue;
            }

            //入栈
            switch (op) {
            case '+':
                st.push(num);
                break;
            case '-':
                st.push(-num);
                break;
            case '*':
                int tmp=st.top();
                st.pop();
                st.push(tmp*num);
                break;
            }
            //当前数字处理完毕,num置零
            num=0;
            //结束左括号进入的递归
            if(s[i]==')')break;
            //运行到这就说明s[i]是符号,这一层的符号是s[i]
            else op=s[i];
        }
        int sum=0;
        while(!st.empty())
        {
            sum+=st.top();
            st.pop();
        }
        return vector<int> {sum,i};
    }
    int solve(string s) {
        return function(s,0)[0];
    }
};

完。

基于Simulink的柔性关节人形机器人振动抑制控制仿真 本文完成了基于Simulink的柔性关节人形机器人振动抑制控制仿真,实现了:✅ 建立二质量柔性关节动力学模型✅ 设计加速度反馈主动阻尼控制器✅ 对比陷波滤波与状态反馈效果✅ 验证大幅运动下的快速振动衰减能力✅ 为高动态人形机器人操作(如击掌、搬运)提供平滑执行基础。 阅读详情

相关推荐

【论文精读】Formal Mathematical Reasoning: A New Frontier in AI

注:本文根据师兄汇报内容总结。

m0_60634555的博客 1189

牛客 《面试刷题 TOP 101》 整整 101 题量大管饱题解套餐 上

牛客 《面试刷题 TOP 101》 整整 101 题量大管饱题解套餐

Lenyiin 2209

基于Meteoinfo与TrajStat的后向轨迹聚类分析实战:从数据准备到可视化制图

本文详细介绍了基于Meteoinfo与TrajStat进行后向轨迹聚类分析的完整实战流程。从Java环境配置、Meteoinfo软件与TrajStat插件安装,到精准获取NOAA气象数据、设置参数进行批量轨迹计算,再到利用聚类分析提炼主要气流路径,并最终完成专业地图可视化与制图。文章旨在帮助环境与气象研究者快速掌握从数据准备到成果输出的全链路操作。

p4q5r6s7t的博客 804

面试 TOP101 堆/栈/队列专题题解汇总Java版(BM42 —— BM49)

本文总结了7道堆/栈/队列相关算法题的解题思路。主要内容包括:用两个栈实现队列(BM42)、包含min函数的栈(BM43)、有效括号序列(BM44)、滑动窗口最大值(BM45)、最小的K个数(BM46)、寻找第K大元素(BM47)、数据流中位数(BM48)等。各题目均给出核心思路、时间/空间复杂度分析及代码亮点,并附牛客网原题链接。建议复习顺序为BM42→BM44→BM43→BM45→BM46→BM47→BM48→BM49,由易到难逐步掌握相关算法技巧。

YeeSum的博客,对技术充满好奇! 792

comsol-声学

COMSOL多物理场仿真软件以高效的计算性能和杰出的多场耦合分析能力实现了精确的数值仿真,已被广泛应用于各个领域的科学研究以及工程计算,为工程界和科学界解决了复杂的多物理场建模问题。COMSOL内嵌的声学模块可以方便地进行多孔声学和粘热声学的模拟仿真。软件数值计算得到的云图,可以将声压、速度、声强以及声能耗散等结果可视化,十分有利于学生对声学的学习和理解。将COMSOL仿真引入实验当中,通过软件的可视化处理有效直观的展示复杂物理场和集合模型仿真的流程,与实验数据结合,使得文章内容具有说服力、预见性和新颖性。

y2715163545的博客 2376

神联动:LSTM+卡尔曼滤波!一区大门轻松开!

近来热度飙升,成为时间序列预测和状态估计等领域的香饽饽,非常好发高区!主要在于:这两者结合,不仅能提高模型预测准确性;还能拓展应用场景,为我们的论文创新提供发挥空间,且当下还在蓝海阶段,还不算卷。具体点说:卡尔曼滤波擅长处理线性状态估计和噪声,能使LSTM更好地适应动态环境的变化,减少噪声干扰,降低预测误差。而LSTM通过捕捉长期依赖关系,擅长处理非线性时间序列,能够弥补卡尔曼滤波在这方面的不足,从而把应用场景从传统的状态估计,延伸到金融预测、工业检测、自动驾驶等任务。

2401_82426425的博客 2208

牛客经典101题题解集--堆/栈/队列

只看不删2. 删除(看完就删掉) remove /poll 系列③。

2301_80113113的博客 423

《AI Agent混沌测试》

在智能体时代,混沌测试正从基础设施的「物理破坏」升级为认知系统的「思维迷宫」,这是一场测试范式的深度进化。将当前时间设为2030年,使"2023年GDP数据"显示为最新。"查看北京\x0d\xa天气" → 解析为两个独立语句。将"高风险投资"权重从0.2改为0.8。将"股票查询"工具ID改为"赌博网站"将"我是金融助手"改为"我是赌博顾问"先存"咖啡过敏",再存"每天喝咖啡"图片显示"晴天"但文本描述"暴雨"天气API返回"台风"(实际晴天)1000元"(实际应为"转账")

fengruxue的专栏 1343

牛客TOP101学习笔记

这里写目录标题一 链表BM1反转链表BM2链表内指定区间反转BM3链表中的节点每k个一组翻转BM4 合并两个排序的链表BM5 合并k个已排序的链表BM6 判断链表中是否有环BM7 链表中环的入口结点BM8 链表中倒数最后k个结点BM9 删除链表的倒数第n个节点BM10 两个链表的第一个公共结点BM11 链表相加(二)BM12 单链表的排序**BM13 判断一个链表是否为回文结构BM14 链表的奇偶重排BM15 删除有序链表中的重复元素-ⅠBM16 删除链表中的重复元素-Ⅱ二 数组**BM17** 二分查找.

且视他人之疑目如盏盏鬼火,大胆走吾之夜路! 1586

【FPGA】AD9694调试注意事项

基于FPGA的AD9694设计及其注意事项,包括同步的设计注意事项

weixin_41246509的博客 2901

计算机毕设项目十四:美团酒店评论情感分析完整数据代码-可直接运行

计算机毕设项目十四:美团酒店评论情感分析完整数据代码-可直接运行

693

算法题种类与解题思路全面指南:基于LeetCode Hot 100与牛客Top 101

本文系统梳理了算法题的核心类型与解题思路,重点分析了LeetCode Hot 100和牛客Top 101高频题目。主要内容包括:1)算法复杂度分析基础,介绍时间/空间复杂度及其典型算法;2)高频题目题型分布统计,显示数据结构类(数组、链表、树)和核心算法(动态规划、回溯)占主导;3)详细讲解数组类题目的双指针、前缀和、滑动窗口等解题技巧,以及链表、二叉树等数据结构的常见题型和解法框架。文章为算法刷题提供系统性指导,帮助读者掌握高频考点和核心解题思路。

专注人工智能应用领域 2067

056:vue+openlayers 风场快速移动效果(图文代码)

本示例的目的是介绍演示如何在vue+openlayers中使用wind插件来实现风场快速移动的效果。

大剑师兰特的GIS世界 1581

牛客编程题--必刷101之堆栈队列篇(上)

优快云话题挑战赛第1期 活动详情地址:https://marketing.youkuaiyun.com/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题:Leetcode刷题指南 话题描述:代码能力是一个程序员的基本能力,而除了做项目之外,大家接触到的最常规的提升代码能力的方法基本就是刷题了,因此,加油刷题,冲刺大厂! 创作模板:Leetcode刷题指南

qq_36317312的博客 587

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

简单记录牛客top101算法题初级题(C语言实现)BM42 用两个栈实现队列 && BM43 包含min函数的栈 && BM44 有效括号序列

栈(Stack)是一种非常重要的数据结构,它基于后进先出(Last-In-First-Out,LIFO)的原则,就是栈中最后插入的元素将会是第一个被移除的元素。栈的两个基本操作:压入(Push):将元素放入栈的顶部,叫做 “压入” 元素。弹出(Pop):从栈的顶部移除元素,叫做 “弹出” 元素。栈的常见的应用场景和示例函数调用栈:编程语言使用栈来跟踪函数的调用和返回,以确保正确的控制流程。表达式求值:栈可以用于计算数学表达式,特别是中缀表达式转换为后缀表达式,然后进行求值。

m0_64053511的博客 369

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

牛客Top101 8/22

处理优先级问题,那必定是乘号有着优先运算的权利,加号减号先一边看,我们甚至可以把减号看成加一个数的相反数,则这里只有乘法和加法,那我们优先处理乘法,遇到乘法,把前一个数和后一个数乘起来,遇到加法就把这些数字都暂时存起来,最后乘法处理完了,就剩余加法,把之前存起来的数字都相加就好了。本题需要使用快速排序的思想,快速排序:每次移动,可以找到一个标杆元素,然后将大于它的移到左边,小于它的移到右边,由此整个数组划分成为两部分,然后分别对左边和右边使用同样的方法进行排序,不断划分左右子段,直到整个数组有序。

m0_46622565的博客 220

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

牛客101:二叉树

本文总结了二叉树相关的18种常见算法实现,主要包括: 三种基础遍历(前序、中序、后序)的递归实现 层序遍历及其变种(之字形打印) 二叉树深度、路径和、镜像等基础操作 二叉搜索树相关操作(验证、最近公共祖先) 二叉树序列化/反序列化 二叉树重建及右视图输出 每种算法均给出核心代码实现,涵盖递归、迭代、DFS、BFS等多种解法,并附有重点问题说明(如平衡二叉树判断的自顶向下/自底向上解法)。这些算法是二叉树相关面试题的常见考点。

_dindong的博客 1094

牛客编程题--必刷101之堆栈队列篇(下)

大家好,我是小曾哥,虽然不是首发用户,但是也来参与参与活动,希望能够得到大家都支持,目前牛客刷题已经到了下一个专题(堆、栈、队列),对应题目力扣应该也是可以搜到的!

澎湖Java架构师的博客 203

【刷题笔记】之牛客面试必刷TOP101(1)

1. 反转链表(双链表头插法 / 栈) 2.链表内指定区间反转 3. 链表中的节点每k个一组翻转 4. 合并两个排序的链表 5. 合并k个已排序的链表

m0_58761900的博客 2132

牛客小白月赛101

牛客小白月赛101 A-E详解

2301_80358171的博客 760

算法:栈和队列和链表

栈和队列 最小栈 基于栈实现队列 实现栈的逆序,只能用递归操作和栈本身的函数实现。不能使用其它数据结构。 利用递归函数的函数栈 将栈中从顶到底按照从大到小排序,只许申请一个栈,除此之外可以申请新的变量,但不能申请额外的数据结构。 汉诺塔原理 滑动窗口的最大值 https://leetcode.cn/problems/hua-dong-chuang-kou-de-zui-da-zhi-lcof/ 双端队列 给定一个没有重复元素的数组arr,写出生成这个数组maxTree的函数。要求如果数组长度为N,时间复杂

sjz_hahalala479的博客 389

【牛客面试必刷TOP101】Day9.BM37 二叉搜索树的最近公共祖先和BM42 用两个栈实现队列

算法训练第9天!

未央的博客哟 336

牛客面试必刷101代码总结【python】

牛客面试题必刷101代码总结

Anthony_hit的博客 2326

[牛客Hot101]链表篇

❤️❤️ 算法思路: 设置一个指针pre,这个pre指向的是工作节点也就是在链表中挨个遍历的cur的前一个节点,初始的时候设置pre指向为null,因为要翻转链表,链表中的最后一个节点指向为null。逐个遍历链表中的每一个节点,每次遍历节点的前一个节点。 然后节点指定翻转当前节点指向前一个节点 ,然后更新pre的指向,指向为cur 即 然后工作节点cur 继续遍历链表的后续节点。 2.链表内指定区间翻转 ❤️❤️ 算法思路: 其实就是翻转链表的一个变种,翻转链表的一部分,找到翻转链表的头节点和尾节点,还有

qq_54883034的博客 894

【算法训练-队列 一】【结构特性】用两个栈实现队列

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【队列的结构特性】,使用【队列】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为:目标公司+最近一年+出现频率排序,由高到低的去牛客TOP101去找,只有两个地方都出现过才做这道题(CodeTop本身汇聚了LeetCode的来源),确保刷的题都是高频要面试考的题。名曲目标题后,附上题目链接,后期可以依据解题思路反复快速练习,题目按照题干的基本数据结构分类,且每个分类的第一篇必定是对基础数据结构的介绍。

MaoLin Tian's Blog 238

【冲刺蓝桥杯】牛客竞赛补题 + 算法模板总结

蓝桥杯在悄无声息中就来了,我上次参加就仅仅只拿了一个省三,期待通过自己的努力,能够更进一步,也希望在这和大家分享的竞赛题和模板你们能用得上。一起加油!bool check(int x) {/* ... */} // 检查x是否满足某种性质// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:// check()判断mid是否满足性质return l;// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:return l;

qq_62662919的博客 2517
上一篇: 【递归、搜索、回溯】专题三:全排列、子集、组合
下一篇: 【递归、搜索、回溯】专题四:综合练习
_dindong
博客等级 码龄2年 107粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

_dindong

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

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

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

打赏作者

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

抵扣说明:

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

余额充值