Day17.数据结构和算法

考研数据结构算法题day17-day19 【day17】 算法思想:由于单链表递增有序,所有值域相同的结点时相邻的。定义两个指针,一个指针初始指向第一个结点,另一个初始指向第二个结点,同步的遍历整个链表。遍历过程如果两个指针所指向的结点值相同,则把后一个指针指向的元素删除。 删除:双指针思想 void delete_same(LinkList &L){ LNode *pre,*p; if(L==NULL){ exit(0); } pre=L->next; //两个遍历指针 p=pre->next; while 阅读详情

数据结构和算法



前言

数据结构和算法算是程序员必经之路吧,也是最痛苦的路了。如果把这两者弄清楚了,相信再差也差不到哪里去吧。而个人关于数据结构和算法的理解如下:

数据结构就是对解决的问题进行建模分析,理解其大致的过程。

而算法就是解决问题的方法和步骤嘛。

评价算法的好坏:一般是渐近时间复杂度和渐近空间复杂度。

下面展示了几种常见问题的渐近时间复杂度的大O标记:

  • O ( c ) O(c) O(c) - 常量时间复杂度 - 布隆过滤器 / 哈希存储
  • O ( l o g 2 n ) O(log_2n) O(log2​n) - 对数时间复杂度 - 折半查找(二分查找)
  • O ( n ) O(n) O(n) - 线性时间复杂度 - 顺序查找 / 计数排序
  • O ( n ∗ l o g 2 n ) O(n*log_2n) O(n∗log2​n) - 对数线性时间复杂度 - 高级排序算法(归并排序、快速排序)
  • O ( n 2 ) O(n^2) O(n2) - 平方时间复杂度 - 简单排序算法(选择排序、插入排序、冒泡排序)
  • O ( n 3 ) O(n^3) O(n3) - 立方时间复杂度 - Floyd算法 / 矩阵乘法运算
  • O ( 2 n ) O(2^n) O(2n) - 几何级数时间复杂度 - 汉诺塔
  • O ( n ! ) O(n!) O(n!) - 阶乘时间复杂度 - 旅行经销商问题 - NPC

下面是这些复杂度的图形直观展示
复杂度展示


一. 数据结构

1.1 冒泡排序

冒泡排序 – O(n ** 2):两两比较,大的下沉
35, 97, 12, 68, 55, 73, 81, 40
35, 12, 68, 55, 73, 81, 40, [97]
12, 35, 55, 68, 73, 40, [81]
12, 35, 55, 68, 40, [73]

1.2 选择排序

选择排序 – O(n ** 2):每次从生下元素中选择最小的

1.3 归并排序

归并排序 – O(n * log2_n):高级排序算法
35, 97, 12, 68, 55, 73, 81, 40
[35, 97, 12, 68], [55, 73, 81, 40]
[35, 97], [12, 68], [55, 73], [81, 40]
[35], [97], [12], [68], [55], [73], [81], [40]
[35, 97], [12, 68], [55, 73], [40, 81]
[12, 35, 68, 97], [40, 55, 73, 81]
[12, 35, 40, 55, 68, 73, 81, 97]

1.4 快速排序

快读排序 – O(n * log2_n):以枢轴为界将列表中的元素划分为两个部分,左边都比钮轴小,右边都比钮轴大
35, 97, 12, 68, 55, 73, 81, 40
35, 12, [40], 68, 55, 73, 81, 97
[12], 35, [40], 68, 55, 73, 81, [97]
[12], 35, [40], 55, [68], 73, 81, [97]
[12], 35, [40], 55, [68], 73, [81], [97]

二. 算法(数据结构的实现)

2.1 排序算法

def select_sort(items, comp=lambda x, y: x < y):
    """简单选择排序"""
    items = items[:]
    for i in range(len(items) - 1):
        min_index = i
        for j in range(i + 1, len(items)):
            if comp(items[j], items[min_index]):
                min_index = j
        items[i], items[min_index] = items[min_index], items[i]
    return items


def bubble_sort(items, comp=lambda x, y: x > y):
    """冒泡排序"""
    items = items[:]
    for i in range(len(items) - 1):
        swapped = False
        for j in range(len(items) - 1 - i):
            if comp(items[j], items[j + 1]):
                items[j], items[j + 1] = items[j + 1], items[j]
                swapped = True
        if not swapped:
            break
    return items


def bubble_sort(items, comp=lambda x, y: x > y):
    """搅拌排序(冒泡排序升级版)"""
    items = items[:]
    for i in range(len(items) - 1):
        swapped = False
        for j in range(len(items) - 1 - i):
            if comp(items[j], items[j + 1]):
                items[j], items[j + 1] = items[j + 1], items[j]
                swapped = True
        if swapped:
            swapped = False
            for j in range(len(items) - 2 - i, i, -1):
                if comp(items[j - 1], items[j]):
                    items[j], items[j - 1] = items[j - 1], items[j]
                    swapped = True
        if not swapped:
            break
    return items

def merge(items1, items2, comp=lambda x, y: x < y):
    """合并(将两个有序的列表合并成一个有序的列表)"""
    items = []
    index1, index2 = 0, 0
    while index1 < len(items1) and index2 < len(items2):
        if comp(items1[index1], items2[index2]):
            items.append(items1[index1])
            index1 += 1
        else:
            items.append(items2[index2])
            index2 += 1
    items += items1[index1:]
    items += items2[index2:]
    
    return items

def merge_sort(items, comp=lambda x, y: x < y):
      return _merge_sort(list(items), comp)
  

def _merge_sort(items, comp):
    """归并排序"""
    if len(items) < 2:
        return items
    mid = len(items) // 2
    left = _merge_sort(items[:mid], comp)
    right = _merge_sort(items[mid:], comp)
    
    return merge(left, right, comp)

2.2 查找算法

def seq_search(items, key):
    """顺序查找"""
    for index, item in enumerate(items):
        if item == key:
            return index
    return -1


def bin_search(items, key):
    """折半查找"""
    start, end = 0, len(items) - 1
    while start <= end:
        mid = (start + end) // 2
        if key > items[mid]:
            start = mid + 1
        elif key < items[mid]:
            end = mid - 1
        else:
            return mid
    return -1

2.3 常用算法

  1. 穷举法 - 又称为暴力破解法,对所有的可能性进行验证,直到找到正确答案。
  2. 贪婪法 - 在对问题求解时,总是做出在当前看来
  3. 最好的选择,不追求最优解,快速找到满意解。
  4. 分治法 - 把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题,直到可以直接求解的程度,最后将子问题的解进行合并得到原问题的解。
  5. 回溯法 - 回溯法又称为试探法,按选优条件向前搜索,当搜索到某一步发现原先选择并不优或达不到目标时,就退回一步重新选择。
  6. 动态规划 - 基本思想也是将待求解问题分解成若干个子问题,先求解并保存这些子问题的解,避免产生大量的重复运算。

穷举法例子:百钱百鸡和五人分鱼。

# 公鸡5元一只 母鸡3元一只 小鸡1元三只
# 用100元买100只鸡 问公鸡/母鸡/小鸡各多少只
for x in range(20):
    for y in range(33):
        z = 100 - x - y
        if 5 * x + 3 * y + z // 3 == 100 and z % 3 == 0:
            print(x, y, z)

# A、B、C、D、E五人在某天夜里合伙捕鱼 最后疲惫不堪各自睡觉
# 第二天A第一个醒来 他将鱼分为5份 扔掉多余的1条 拿走自己的一份
# B第二个醒来 也将鱼分为5份 扔掉多余的1条 拿走自己的一份
# 然后C、D、E依次醒来也按同样的方式分鱼 问他们至少捕了多少条鱼
fish = 6
while True:
    total = fish
    enough = True
    for _ in range(5):
        if (total - 1) % 5 == 0:
            total = (total - 1) // 5 * 4
        else:
            enough = False
            break
    if enough:
        print(fish)
        break
    fish += 5

贪婪法例子:假设小偷有一个背包,最多能装20公斤赃物,他闯入一户人家,发现如下表所示的物品。很显然,他不能把所有物品都装进背包,所以必须确定拿走哪些物品,留下哪些物品。

名称价格(美元)重量(kg)
电脑20020
收音机204
钟17510
花瓶502
书101
油画909
"""
贪婪法:在对问题求解时,总是做出在当前看来是最好的选择,不追求最优解,快速找到满意解。
输入:
20 6
电脑 200 20
收音机 20 4
钟 175 10
花瓶 50 2
书 10 1
油画 90 9
"""
class Thing(object):
    """物品"""

    def __init__(self, name, price, weight):
        self.name = name
        self.price = price
        self.weight = weight

    @property
    def value(self):
        """价格重量比"""
        return self.price / self.weight


def input_thing():
    """输入物品信息"""
    name_str, price_str, weight_str = input().split()
    return name_str, int(price_str), int(weight_str)


def main():
    """主函数"""
    max_weight, num_of_things = map(int, input().split())
    all_things = []
    for _ in range(num_of_things):
        all_things.append(Thing(*input_thing()))
    all_things.sort(key=lambda x: x.value, reverse=True)
    total_weight = 0
    total_price = 0
    for thing in all_things:
        if total_weight + thing.weight <= max_weight:
            print(f'小偷拿走了{thing.name}')
            total_weight += thing.weight
            total_price += thing.price
    print(f'总价值: {total_price}美元')


if __name__ == '__main__':
    main()

快速排序 - 选择枢轴对元素进行划分,左边都比枢轴小右边都比枢轴大

def quick_sort(items, comp=lambda x, y: x <= y):
    items = list(items)[:]
    _quick_sort(items, 0, len(items) - 1, comp)
    return items


def _quick_sort(items, start, end, comp):
    if start < end:
        pos = _partition(items, start, end, comp)
        _quick_sort(items, start, pos - 1, comp)
        _quick_sort(items, pos + 1, end, comp)


def _partition(items, start, end, comp):
    pivot = items[end]
    i = start - 1
    for j in range(start, end):
        if comp(items[j], pivot):
            i += 1
            items[i], items[j] = items[j], items[i]
    items[i + 1], items[end] = items[end], items[i + 1]
    
    return i + 1

回溯法例子:骑士巡逻。

"""
递归回溯法:叫称为试探法,按选优条件向前搜索,当搜索到某一步,发现原先选择并不优或达不到目标时,就退回一步重新选择,比较经典的问题包括骑士巡逻、八皇后和迷宫寻路等。
"""
import sys
import time

SIZE = 5
total = 0


def print_board(board):
    for row in board:
        for col in row:
            print(str(col).center(4), end='')
        print()


def patrol(board, row, col, step=1):
    if row >= 0 and row < SIZE and \
        col >= 0 and col < SIZE and \
        board[row][col] == 0:
        board[row][col] = step
        if step == SIZE * SIZE:
            global total
            total += 1
            print(f'第{total}种走法: ')
            print_board(board)
        patrol(board, row - 2, col - 1, step + 1)
        patrol(board, row - 1, col - 2, step + 1)
        patrol(board, row + 1, col - 2, step + 1)
        patrol(board, row + 2, col - 1, step + 1)
        patrol(board, row + 2, col + 1, step + 1)
        patrol(board, row + 1, col + 2, step + 1)
        patrol(board, row - 1, col + 2, step + 1)
        patrol(board, row - 2, col + 1, step + 1)
        board[row][col] = 0


def main():
    board = [[0] * SIZE for _ in range(SIZE)]
    patrol(board, SIZE - 1, SIZE - 1)


if __name__ == '__main__':
    main()

动态规划例子:子列表元素之和的最大值。

说明:子列表指的是列表中索引(下标)连续的元素构成的列表;列表中的元素是int类型,可能包含正整数、0、负整数;程序输入列表中的元素,输出子列表元素求和的最大值,例如:

输入:1 -2 3 5 -3 2

输出:8

输入:0 -2 3 5 -1 2

输出:9

输入:-9 -2 -3 -5 -3

输出:-2

def main():
    items = list(map(int, input().split()))
    overall = partial = items[0]
    for i in range(1, len(items)):
        partial = max(items[i], partial + items[i])
        overall = max(partial, overall)
    print(overall)


if __name__ == '__main__':
    main()

注:这个题目最容易想到的解法是使用二重循环,但是代码的时间性能将会变得非常的糟糕。使用动态规划的思想,仅仅是多用了两个变量,就将原来 O ( N 2 ) O(N^2) O(N2)复杂度的问题变成了 O ( N ) O(N) O(N)。


总结

今天就是简单的认识了一下这些常见的数据结构和算法。唉,应该还谈不上理解和掌握吧,毕竟好多还没有搞懂,要自己动手敲出来才是王道。加油,像大佬们看齐。。。

脑壳疼,溜了遛了。Loading(17/100)。。。

考研数据结构day17-day22 11 阅读详情

相关推荐

GD32主程序跑飞?可能是BOOT0引脚惹的祸(附J-LINK调试实录)

本文针对GD32微控制器程序下载后无法运行的典型问题,深入剖析了BOOT0引脚配置对启动模式的关键影响。通过结合J-LINK调试器与KEIL MDK环境,详细演示了如何从程序跑飞现象(如PC指向0x1FFF Fxxx)定位到硬件层面的BOOT0引脚与VDD短路故障,并提供了系统的硬件排查步骤与设计预防建议。

d6e7f8的博客 704

数据结构——(第八章:排序)

一、排序总结 二、插入的排序 三、交换的排序 四、选择的排序 五、归并排序 六、基数排序 七、计数排序(空缺) 八、排序代码 1、插入的排序 2、交换的排序 3、选择的排序 4、归并排序 5、计数排序

你相信光吗 1318

别再死磕Excel了!用Vensim PLE免费版,30分钟搞定你的第一个系统动力学模型

本文介绍如何使用Vensim PLE免费版在30分钟内构建第一个系统动力学模型,无需编程或数学基础。通过个人储蓄增长案例,详细讲解因果回路图绘制、存量流量图创建及方程编写,帮助读者掌握动态系统建模与仿真技巧,适用于理财、项目管理等多种场景。

weixin_29045001的博客 329

选择、冒泡、归并排序

简单选择排序 def select_sort(items, comp=lambda x, y: x < y): items = items[:] for i in range(len(items) - 1): min_index = i for j in range(i + 1, len(items)): if comp(items[j], items[min_index]): min_index

weixin_44715081的博客 292

西门子RS485自由口通信Modbus RTU 通信协议

部分西门子的RS485模块不能使用西门子自带的Modbus RTU通信指令,需要通过自己拼接、发送、接收和解析报文完成Modbus RTU通信。通过多次尝试完成该功能: #R_TRIG_Instance(CLK := #触发, Q => #触发上升沿); IF #触发上升沿 THEN // 触发后先将读取完成复位 #读写完成 := 0; END_IF; CASE #功能码 OF 1: // 线圈状态读取 ; 2:

qq_20792765的博客 1万+

东方财富 vs 新浪 vs AKShare:3 种股票实时数据接口性能与稳定性实测对比

本文深度评测了东方财富、新浪和AKShare三种股票实时数据接口的性能与稳定性。通过实际测试数据,从延迟、成功率和数据完整性三个维度进行全面对比,为量化交易和数据分析开发者提供选型参考。结果显示,东方财富接口在实时性和稳定性方面表现最优,适合高频交易场景。

weixin_30800807的博客 387

python排序和查找

简单选择排序 def select_sort(items, comp=lambda x, y: x < y): """简单选择排序""" items = items[:] for i in range(len(items) - 1): min_index = i for j in range(i + 1, len(items)): if comp(items[j], items[min_index]):

m0_58585940的博客 3960

信号转换为图像 时域频域分析

一维信号如何转化为图像?深度学习如何学习 1.当然,直接1d卷积也是可以的。 2. 以信号强度的数值作为纵坐标,以时间为横坐标绘制信号点就可以了。 周霖那个即是 要看看代码是如何做的, 即使是单导联 5000个点,怎么变成50005000的分辨率的 3. 直接把多通道的一维信号合并成二维图像,然后直接按图像卷积的方法去做~~ 2225000这样一个图 ~可以看看语音处理的相关Net,其中比较...

王不留行嘿呦嘿 2万+

快速排序

//快速排序 //选枢轴,左边的都比枢轴小,右边的都比枢轴大,左右两边不断向中间靠拢 //不断选枢轴,递归 #include &lt;iostream&gt; using namespace std; template &lt;class T&gt; void QuickSort(T *a,const int left,const int right){ if(left &lt; ri...

graceful_tomorrow的博客 173

自制非接触式静电探测仪:从振动电容原理到微弱信号检测实践

微弱信号检测是电子测量领域的核心挑战之一,尤其在需要避免物理接触或防止干扰的场景中。其基本原理在于将难以直接获取的微小物理量(如电流、电压)通过传感器转换为电信号,再经过放大、滤波等处理进行提取。锁相放大技术是解决这一问题的关键手段,它利用参考信号与目标信号的同步性,从强噪声背景中恢复出有效信息,极大提升了信噪比和测量灵敏度。这项技术的工程价值在于实现了对纳安级电流、微伏级电压等高难度参数的可靠测量。在静电防护、材料表面电位分析、生物电信号采集等应用场景中,非接触式测量需求广泛。本文聚焦的基于振动电容原理的

weixin_32349093的博客 274

基于深度学习的水质预测:多参数监测与预测

首先,我们需要收集水质监测的多参数数据。收集到的数据应包括不同时间点的水质参数值以及相应的水质等级标签,用于训练和评估深度学习模型。同时,数据的质量和数量对于模型的性能也有重要影响,因此在实际应用中需要充分考虑数据的采集和处理过程。总之,基于深度学习的水质预测可以通过收集水质监测的多参数数据并使用适当的深度学习模型进行训练和预测来实现。通过以上的深度学习模型,我们可以利用水质监测的多参数数据进行水质预测。这种基于深度学习的方法可以提高水质预测的准确性和稳定性,为水质监测和环境保护提供有力支持。

web_bug407的博客 1103

内部排序(五)快速排序(上)- 概述与选择枢轴

快速排序终于要来了,快速排序也是交换排序的一种,其实讲快速排序前应该先讲讲冒泡排序,因为快速排序是对冒泡排序的一种改进,那就先来用最快速度复习一下冒泡排序: 冒泡排序:假设要对待排序了做升序排序,那么首先从待排序列第一个元素开始,和第二个元素作比较,如果第一个元素大于第二个元素,就把它们的位置交换,接着再对序列第二个元素和第三个元素作比较,如果第二个元素比第三个元素大,就交换位置,一直重复直到长...

大力海棠的博客 4691

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

python数据结构和算法_day17

介绍数据结构和算法

slb190623的博客 1066

NTscan扫描工具

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

Statistics and Machine Learning Toolbox

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

【数据结构和算法】Day 17

将单链表中终端节点的指针端由空指针改为指向头节点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环列表,简称循环列表。 循环列表的主要差异就在于循环的判断空列表的条件上,原来判断head->next是否为NULL,现在则是head->next是否等于head 终端节点用尾指针rear指示,则查找终端结点的结果是O(1),而开始结点是rear->naxt->naxt,当然

RiRiRicardo的博客 412

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

[算法和数据结构入门][Day17]多种方法实现使用colllections模块里面的Counter类实现从数组里面,删除重复的元素

DAY17:删除重复的元素 从数组里面,删除重复的元素。重复的数字最多只能出现2次(如果之前已经有2次了,那么之后就不会再出现) 比如 nums=[1,1,1,2,2,3],返回nums=[1,1,2,2,3] 法一: from collections import Counter def removeDuplicates(nums:list)->list: result = [...

KaelCui的博客 432

代码随想录60期day 17

【代码】代码随想录60期day 17。

qq_19555169的博客 248

东华上机DAY17项目:数据结构与算法实战指南

数据结构与算法是计算机科学的核心基础,其原理涉及数据的组织、存储和高效处理。通过栈、队列、动态规划等技术手段,可以解决字符串解码、背包问题等经典工程问题。在实际应用场景中,如图论算法能有效处理课程安排、任务调度等复杂关系问题。本文以东华大学DAY17上机项目为例,详解字符串处理、动态规划、拓扑排序等高频考点,提供可复用的C++/Python解题模板,并分享调试技巧与性能优化经验,帮助学生提升算法竞赛和工程实践能力。

weixin_34109408的博客 320

算法进修Day-17

中等题目要求:给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1,-1]。示例1输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例2输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]示例3输入:nums = [], target = 0输出:[-1,-1]题解。

Aubyn11的博客 192

算法训练营day17(二叉树04:平衡二叉树,所有路径,左叶子和)

/遇到叶子结点,叶子结点的左子结点必为0。//每当递归深入时,我们将当前节点的值添加到paths中,每一层递归在返回的时候都有一层remove;if ( rightHeight == -1){//出递归的条件。if ( leftHeight == -1){//出递归的条件。

weixin_61931006的博客 1237

编程训练与算法实践:东华上机DAY17解析

算法设计与编程实践是计算机科学的核心基础,通过系统化的训练可以有效提升开发能力。常见的算法包括排序、查找、动态规划等,这些基础算法在实际工程中广泛应用。编程训练通常包含问题分析、算法选择、代码实现和优化等完整流程,特别强调边界条件处理和性能优化。东华上机DAY17这类训练通过梯度难度设置,帮助开发者从基础语法掌握到复杂问题求解能力逐步提升。在调试过程中,单元测试和压力测试是确保代码质量的关键,而算法优化和数据结构选择则是性能提升的核心手段。

weixin_30797199的博客 382

剑指Offer(数据结构与算法面试题精讲)C++版——day17

剑指Offer(数据结构与算法面试题精讲)C++版——day17 题目一:节点值之和最大的路径 题目二:展平二叉搜索树 题目三:二叉搜索树的下一个节点

weixin_46560512的博客 1143

嵌入式学习day17(数据结构)

数据结构和算法

新手嵌入式学习的博客 1259

【Python100天学习笔记】Day17 数据结构与算法

数据结构和算法 算法:解决问题的方法和步骤 评价算法的好坏:渐近时间复杂度和渐近空间复杂度。 渐近时间复杂度的大O标记: - 常量时间复杂度 - 布隆过滤器 / 哈希存储 - 对数时间复杂度 - 折半查找(二分查找) - 线性时间复杂度 - 顺序查找 / 计数排序 - 对数线性时间复杂度 - 高级排序算法(归并排序、快速排序) - 平方时间复杂度 - 简单排序算法(选择排序、插入排序、冒泡排序) - 立方时间复杂度 - Floyd算法 / 矩阵乘法运算 - 几何级数时间复杂度 -

码农-Vax天道的时间宝藏 992

代码随想录 Day17 二叉树

生病了 404并未写完。

2302_77073236的博客 431

Day17_集合与数据结构(链表,栈和队列,Map,Collections工具类,二叉树,哈希表)

数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。(1)数据的逻辑结构指反映数据元素之间的逻辑关系,而与他们在计算机中的存储位置无关:(2)数据的物理结构/存储结构:是描述数据具体在内存中的存储(如:数组结构、链式结构、索引结构、哈希结构)等,一种数据逻辑结构可表示成一种或多种物理存储结构。数据结构和算法是一门完整并且复杂的课程。Java的核心类库中提供很多数据结构对应的集合类型,例如动态数组、双向链表、顺序栈

小丁的博客 1698
上一篇: Day16.几个常用的排序库
下一篇: Day18.函数的注意事项
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值