
算法
文章平均质量分 53
小米内推官_AngelDg
我们总以为,是生活欠我们一个“满意”,其实是我们欠生活一个“努力”。
展开
-
[每日一题]112:排列序列
文章目录题目描述题解思路方法一:调用 STL 库题目描述给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。示例 1:输入:n = 3, k = 3输出:"213"示例 2:输入:n = 4, k = 9输出:"2314"示例 3:输入:n = 3, k = 1输出:"123"原创 2021-03-05 15:20:18 · 438 阅读 · 1 评论 -
剑指Offer --- 全题目题解汇总
题目序号题目描述1赋值运算符重载2单例模式3数组中重复的数字原创 2020-10-18 23:37:14 · 562 阅读 · 2 评论 -
[每日一题]15:求1+2+3+...+n
题目描述:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。题解思路题目中for、while关键字已经被禁止使用,则可以利用递归进行运算利用逻辑与的短路特性实现递归终止解题代码class Solution {public: int Sum_Solution(int n) { ...原创 2020-03-14 16:09:13 · 1060 阅读 · 0 评论 -
[剑指Offer]:n个骰子的点数(动归)
文章目录题目描述题解思路题目描述把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。示例 1:输入: 1输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]示例 2:输入: 2输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,原创 2021-02-04 18:05:46 · 198 阅读 · 0 评论 -
[剑指Offer]:翻转单词顺序
文章目录题目描述题解思路方法一:双指针方法二:单词逐个反转、再整体反转题目描述输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。示例 1:输入: "the sky is blue"输出: "blue is sky the"示例 2:输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或原创 2021-02-03 12:14:07 · 232 阅读 · 0 评论 -
[剑指Offer]:和为s的连续正数序列
文章目录题目描述题解思路方法一:枚举 + 暴力方法二:双指针题目描述输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]题解思路方法一:枚举 + 暴力枚举每个正整数为起点,判断以它为起点的序列和 sum 是否原创 2021-02-02 19:34:42 · 158 阅读 · 0 评论 -
[剑指Offer]:和为s的两个数字
文章目录题目描述题解思路 -- 双指针法题目描述输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]题解思路 – 双指针法class Solution {public原创 2021-02-02 09:41:01 · 153 阅读 · 0 评论 -
[剑指Offer]:平衡二叉树
文章目录题目描述题解思路方法一:先序遍历方法二:后序遍历题目描述输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2原创 2021-02-01 18:59:44 · 141 阅读 · 0 评论 -
[剑指Offer]:二叉树的深度
文章目录题目描述题解思路方法一:深度优先搜索(DFS)广度优先搜索(BFS)题目描述输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。题解思路方法一:深度优先搜索(DFS)我们找出 root 的左子树和右子树的深度,然后用其较大的值 +1 即原创 2021-02-01 00:09:33 · 136 阅读 · 0 评论 -
[剑指Offer]:二叉搜索树的第k大节点
文章目录题目描述题解思路方法一:递归方法二:非递归题目描述给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1输出: 4题解思路方法一:递归一般情况的中序原创 2021-01-31 23:40:29 · 161 阅读 · 0 评论 -
[剑指Offer]:0~n-1中缺失的数字
文章目录题目描述题解思路方法一:暴力搜索方法二:二分法题目描述一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8题解思路方法一:暴力搜索复杂度分析时间复杂度 O(N)O(N)O(N)空间复杂度 O(1)O(1)O(1): 几个变量使用常数大小的额外空间。原创 2021-01-31 20:44:13 · 155 阅读 · 0 评论 -
[剑指Offer]:在排序数组中查找数字
文章目录题目描述题解思路方法一:遍历数组方法二:hashmap方法三:利用函数 lower_bound 与 upper_bound方法四:二分法题目描述统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0题解思路方法一:遍历数组思路不讲武德。代码实现:class Solution {public:原创 2021-01-30 16:24:23 · 208 阅读 · 0 评论 -
[剑指Offer]:礼物的最大价值(动态规划)
文章目录题目描述题解思路 -- 动态规划方法一:创建辅助数组方法二:不创建辅助数组题目描述在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入: [ [1,3,1], [1,5,1], [4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物题原创 2021-01-26 22:40:33 · 201 阅读 · 0 评论 -
[每日一题]7:连续子数组的最大和(贪心、动归)
题目描述:输入一个整型数组,数组里有正数也有负数。数组中一个或者连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为{1, -2, 3, 10, -4, 7, 2, -5}和最大的子数组为{3, 10, -4, 7, 2},因此输出为该子数组的和18思路:因为时间复杂度为O(n),则只能遍历一次数组这里同时使用两个变量sum和max,其中su...原创 2020-02-20 22:32:15 · 540 阅读 · 0 评论 -
[剑指Offer]:字符串的排列(回溯)
文章目录题目描述题解思路题目描述输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = "abc"输出:["abc","acb","bac","bca","cab","cba"]题解思路递归回溯假设s = “abc”,那么我们首先让 a 在第 0 位,再让 b 在第 0 位,再让 c 在第 0 位。a 在第 0 位,那么还剩 bc。我们先放 b 在第 1 位,再让 c 在第 1 位。b 在第 1 位,那么还原创 2021-01-21 09:13:05 · 166 阅读 · 0 评论 -
带你轻松学会 KMP 算法
文章目录简介暴力匹配(朴素模式匹配BF)KMP 算法简介 KMP算法是一种字符串模式匹配算法, 不同的来源讲解方式也不一样,很容易混乱,在这里以一种特殊的方式来讲解KMP算法,希望大家不再被这个问题所困扰。 KMP 算法是 D.E.Knuth、J,H,Morris 和 V.R.Pratt 三位神人共同提出的,称之为 Knuth-Morria-Pratt 算法,简称 KMP 算法。该算法相对于 Brute-Force(暴力)算法有比较大的改进,主要是消除了主串指针的回溯, 从而使算法效率有了某种程原创 2020-12-22 19:24:00 · 221 阅读 · 0 评论 -
[剑指Offer]:矩阵中的路径(回溯算法)
文章目录题目描述解题思路: 回溯算法题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如[abcesfcsadee] \left[ \begin{matrix} a & b & c & e \\ s & f & c & s \\ a &am原创 2020-12-04 09:57:25 · 281 阅读 · 0 评论 -
[剑指Offer]:机器人的运动范围(回溯算法)
文章目录题目描述题解思路:题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?示例1输入5,10,10返回值21题解思路:1.从(0,0)开始走,每成功走一步标记当前位置为true,然后从原创 2020-12-08 10:35:19 · 188 阅读 · 0 评论 -
[剑指Offer]:剪绳子(动归算法、贪婪算法)
文章目录题目描述题目解答题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?示例1:输入8返回值18题目解答m > 1 表示至少需要剪1刀动归思路:用动态规划自下而上的计算,先算出n为1、2、3的最大乘积,知道小的以后在去算更大的乘积。比如n为4时候最大的可能只能在1 * 3,2 * 2之间取得;n为5时,只能在f原创 2020-12-08 13:46:11 · 173 阅读 · 0 评论 -
Top K 问题的三种详解(P:C++代码)
文章目录题目描述解答方法相关习题题目描述什么是 Top K 问题?简单来说就是在一堆数据里面找到前 K 大(当然也可以是前 K 小)的数。解答方法直接排序通过如快排等效率较高的排序算法,可以在平均 O(nlogn)的时间复杂度找到结果。这种方式在数据量不大的时候简单可行,但固然不是最优的方法。优化:快排的 partition 划分思想可以用于计算某个位置的数值等问题,例如用来计算中位数;显然,也适用于计算 TopK 问题每次经过划分,如果中间值等于 K ,那么其左边的数就是 Top原创 2020-11-24 13:40:44 · 901 阅读 · 0 评论 -
[每日一题]101:正则表达式匹配(动归、递归)
题目描述给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例 2:输入原创 2020-09-26 11:30:00 · 410 阅读 · 0 评论 -
轻松理解作业调度算法的优劣
文章目录知识点扩充先来先服务算法短作业优先算法最高响应比优先调度算法知识点习题知识点扩充评价作业调度算法的优劣,通常看 平均周转时间 和 带权周转时间周转时间 = 作业完成时间 - 作业到达时间平均周转时间 = (作业完成时间 - 作业到达时间)/ 作业数量带权周转时间 = 作业周转时间 / 作业服务时间先来先服务算法顾名思义,先来先服务算法就是先来的作业先调度运行,后来的后运行。和队列的先进先出的意思是一样的。不过先来先服务算法很少单独使用,都是和其他算法一起结合使用。我们来计算原创 2020-09-21 10:18:08 · 1964 阅读 · 0 评论 -
对P、NP、NPC与NPH 的理解
P、NP、NPC多项式时间复杂度P问题NP问题NP与P的关系NPC问题NPH问题四者总结及图形表示知识点习题多项式时间复杂度定义: 解决问题需要的时间与问题的规模之间是多项式关系。多项式关系形如,k为某个常数,n是问题的输入规模。例如,时间复杂度为O(nlog(n))、O(n3)都是多项式时间复杂度。时间复杂度为O(nlog(n))、O(2n)是指数时间复杂度,O(n!)是阶乘时间复杂度。像O(an)和O(n!)型的时间复杂度,它是非多项式级的,其复杂度计算机往往不能承受。为什么多项式时间复杂度的原创 2020-08-27 10:12:27 · 3338 阅读 · 0 评论 -
详解算法的时间复杂度与空间复杂度
文章目录时间复杂度空间复杂度知识点习题:算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢?主要还是从算法所占用的「时间」和「空间」两个维度去考量。时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。因此,评价一个算法的效率主要是原创 2020-08-28 23:20:50 · 641 阅读 · 0 评论 -
[每日一题]93:X 星人的基因(动归)
题目描述(京东2020-08-06)X星人的基因由A、B、C、D、E五种不同的结构组合而成。如果两个性别不同的X星人的基因序列相似度大于50%,按照X星的法律他们是禁止结婚的,等于50%据说还是可以的。那么基因的相似度怎么计算呢?分别从两个人身上取长度均为N的基因片段,如果它们的最长公共子序列(注意,最长公共子序列不需要连续)的长度为M,则相似度= M / N。是不是很简单呢?现在给你两段X星人的基因序列片段,请你判断他们是不是可以结婚?输入描述单组输入。每一组测试数据包含3行:第1行数字N原创 2020-08-21 11:49:04 · 718 阅读 · 0 评论 -
难倒无数求职者的青蛙跳台阶问题及其拓展
青蛙跳台阶引言题目描述引言首先,我们写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契(Fibonacci)数列定义如下:代码实现递归方式:int fibnacci(int n){ if (n==0){ return 0; } if (n==1){ return 1; } return fibnacci(n-1)+fibnacci(n-2);}非递归方式:int Fibonacci(in原创 2020-08-11 12:09:38 · 309 阅读 · 0 评论 -
[每日一题]83:分苹果(贪心)
题目描述n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。输入描述:每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <= 100)。输出描述:输出一行表示最少需要移动多少次可以平分苹果,如果方案不存原创 2020-08-08 14:53:50 · 407 阅读 · 0 评论 -
[每日一题]67:幸运的袋子(穷举)
题目描述一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。输入描述:第一行输入一个正整数n(n ≤ 1000)第二行为n个原创 2020-05-24 23:38:27 · 543 阅读 · 0 评论 -
[每日一题]65:跳石板(动归、贪心)
跳石板题目描述输入描述:输出描述:【题目解析】:动态规划思路贪心思路题目描述小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3…这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。例如:N = 4,M = 24:4->6->8->12->18->原创 2020-05-23 22:50:30 · 332 阅读 · 0 评论 -
[每日一题]11:了解并实现恺撒密码加密解密(C++)
文章目录凯撒算法 概述举例:图解凯撒加密代码如下:凯撒算法 概述在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。凯撒密码是罗马扩张时期朱利斯• 凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被...原创 2020-03-06 16:41:57 · 3875 阅读 · 0 评论 -
C++:前缀、中缀、后缀表达式互相转换详解
文章目录中缀表达式转为前缀表达式:前缀表达式逆向求解中缀表达式中缀表达式转后缀表达式:图解中缀转为后缀:后缀表达式逆向求解中缀表达式题目:中缀转前缀:(直接转换法)中缀转后缀:(直接转换法)一个中缀式到其他式子的转换方法(超级简易)~~表达式定义示例前缀表达式运算符位于操作数之前- × + 3 4 5 6中缀表达式操作符以中缀形式处于操作数的中间(3 + 4...原创 2020-02-28 11:49:04 · 17266 阅读 · 5 评论 -
八种基本排序的含图详解
八种基本排序详解网址[冒泡排序https://blog.youkuaiyun.com/AngelDg/article/details/98535039选择排序https://blog.youkuaiyun.com/AngelDg/article/details/103446151插入排序https://blog.youkuaiyun.com/AngelDg/article/details/10...原创 2020-02-16 23:27:46 · 1882 阅读 · 0 评论 -
C:八种基本排序——基数排序(8)
基数排序原理:【性能】:假设在基数排序中,r为基数,d为位数。则基数排序的时间复杂度为O(d(n+r))。对于任何位数上的基数进行“装桶”操作时,都需要n+rd个临时空间。是稳定排序算法。思路:图解基数排序算法解析:C代码如下:代码生成图如有不同见解,欢迎留言讨论!...原创 2020-02-16 23:20:47 · 644 阅读 · 2 评论 -
C:八种基本排序——快速排序(7)
快速排序原理:【思路】:每轮选择一个基准元素(比如第一个),将待排序的记录分割成两部分,一部分的元素值均比基准元素值小,另一部分比基准值大,然后分别对这两部分用同样的方法排序。一般基于递归实现。冒泡排序每次只调整了一个数或几个数的相对关系,而快速排序每遍都让两边保持相对关系。【性能】:快速排序是不稳定排序,时间复杂度为O(nlogn)。快速排序是通常被认为在O(nlog2n)的排序方法中平均...原创 2020-02-14 23:57:34 · 443 阅读 · 0 评论 -
C:八种基本排序——堆排序(6)
知识扩充完全二叉树的特点:从作为第一层的根开始,除了最后一层之外,第N层的元素个数都必须是2的N次方;第一层2个元素,第二层4个,第三层8个,以此类推。每一行的元素都从最左边开始安放(生成的顺序是从上往下,从左往右),两个元素之间不能有空闲小根堆与大根堆的定义:有一棵完全二叉树,对于任意一个子节点,其数值均不小于其父节点的值,这样层层递推,就是根节点的值最小,这样的树,称为小根堆...原创 2020-02-10 23:50:59 · 294 阅读 · 0 评论 -
C:八种排序算法——归并排序(5)
归并排序原理:归并排序采用的是分治法,并且依托于归并操作,其思想是分而治之。归并操作是将两个有序的数列合并到一个有序的序列,那么对于一个无序的长序列,可以把它分解为若干个有序的子序列,然后依次进行归并。如果我们说每一个数字都是单独有序的序列,那么只要把原始长序列依次分解,直到每个子序列都只有一个元素的时候,再依次把所有的序列进行归并,直到序列数为1为止。思路:分解:将列表越分越小,直至...原创 2020-02-09 22:35:18 · 320 阅读 · 0 评论 -
C:八种基本排序——希尔排序(4)
希尔排序原理:希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。思路:选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;按增量序列个数 k,对序列进行 k 趟排序;每趟排序,根据对应的增量 ti,将待...原创 2020-02-08 23:56:04 · 377 阅读 · 0 评论 -
C:八种基本排序——插入排序(3)
直接插入排序原理:将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序。思路:将数组的第一个数认为是有序数组,从前往后扫描该有序数组,把数组中其余n-1个数,根据数值的大小,插入到有序数组中,直至数组中的所有数有序排列为止。性能:直接插入排序是稳定排序,时间复杂度为O(n^2),不需要额外空间。图解冒泡排序:算法分析当初始序列...原创 2020-02-06 23:55:24 · 297 阅读 · 0 评论 -
C:八种基本排序——冒泡排序(1)
如有不同见解,欢迎留言!#include <stdio.h>#include <stdlib.h>void bubbleSort(int arr[], int sz){ int i, j ,tmp; for (i = 0; i <= sz - 1; i++){ //冒泡的趟数 int flag = 1; for (j = 0; j < sz...原创 2019-08-05 23:23:46 · 391 阅读 · 0 评论 -
C:八种基本排序——选择排序(2)
选择排序原理:从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。思路:在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;第二次遍历n-2个数,找到最小的数值与第二个元素交换;……第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。图解选择排序:算法分析:排序算法...原创 2019-12-08 18:17:14 · 838 阅读 · 0 评论