自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Hello World

下午可以不下雨吗

  • 博客(53)
  • 资源 (4)
  • 论坛 (1)
  • 收藏
  • 关注

原创 42. 接雨水(高频题)

42. 接雨水题目解题思路代码题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。提示:n == height.length0 <= n <= 3 * 1040 <= height[i] <= 105解题思路主要明白,能装多少水是取决于左右两边最高的柱子中那根比较低的柱子。详细思路见书368代码class Solution { public int trap(int[] height) {

2021-02-26 17:08:16 39 2

原创 875. 爱吃香蕉的珂珂(算法思维系列)

875. 爱吃香蕉的珂珂题目解题思路代码题目珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。解题思路见书360代码clas

2021-02-26 16:54:18 25

原创 372. 超级次方(算法思维系列)

372. 超级次方题目解题思路代码题目你的任务是计算 a的b次方 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。解题思路主要掌握(a*b)%k=(a%k)(b%k)%k主要思路见书355代码class Solution { int base = 1337; public int superPow(int a, int[] b) { //base case:任何数的0次方都是1 if (b == null |

2021-02-26 16:15:13 81

原创 204. 计数质数(算法思维系列)

204. 计数质数题目解题思路代码题目统计所有小于非负整数 n 的质数的数量。解题思路大体思路比较简单,主要是明白首先从 2 开始,我们知道 2 是一个素数,那么 2 × 2 = 4, 3 × 2 = 6, 4 × 2 = 8… 都不可能是素数了。然后我们发现 3 也是素数,那么 3 × 2 = 6, 3 × 3 = 9, 3 × 4 = 12… 也都不可能是素数了。然后还有一个就是i 不需要遍历到 n,而只需要到 sqrt(n) 即可。为什么呢,我们举个例子,假设 n = 12

2021-02-26 15:06:36 27

原创 560. 和为K的子数组(算法思维系列)

560. 和为K的子数组题目解题思路代码题目给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。解题思路构造一个前缀和数组。presum[i],就是nums[0..i-1]的和。要找该数组中和为 k 的连续的子数组的个数。你就只需要直接去前缀和数组中找是否存在该和,或者在前缀和数组中存在两个和相减等于k这也是满足条件的。详情见书343。代码class Solution { public int subarraySum(int[] nums, int k

2021-02-26 14:37:55 20

原创 969. 煎饼排序(算法思维系列)

969. 煎饼排序题目解题思路代码题目给你一个整数数组 arr ,请使用 煎饼翻转 完成对数组的排序。一次煎饼翻转的执行过程如下:选择一个整数 k ,1 <= k <= arr.length反转子数组 arr[0…k-1](下标从 0 开始)例如,arr = [3,2,1,4] ,选择 k = 3 进行一次煎饼翻转,反转子数组 [3,2,1] ,得到 arr = [1,2,3,4] 。以数组形式返回能使 arr 有序的煎饼翻转操作所对应的 k 值序列。任何将数组排序且翻转次数在

2021-02-26 13:59:49 61

原创 227. 基本计算器 II(算法思维系列)

227. 基本计算器 II题目解题思路代码题目实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。解题思路主要思想就是拆分复杂问题,比如先处理加减、再处理乘除等。详情见书328。代码class Solution { public int calculate(String s) { Stack<Integer> stack = new Stack<>

2021-02-26 13:34:33 29

原创 18. 四数之和(算法思维系列)

18. 四数之和题目解题思路代码题目给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。解题思路直接套用nSum模板即可,详情见书325代码class Solution { public List<List<Integer>> fourSum(int[]

2021-02-26 00:13:44 35

原创 nSum问题解题模板

/** * 计算数组中所有和为target的n元组 * 注意:必须先给数组排序才可以使用本模板 * * @param nums 数组 * @param target 目标 * @param n 几元组,也就是几sum问题 * @param start 从nums[start]开始,计算有序数组中所有和为target的n元组 * @return */ public List<List&lt.

2021-02-26 00:10:45 38

原创 15. 三数之和(算法思维系列)

15. 三数之和题目解题思路代码题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。解题思路求三数之和,那是不是我只要从nums中取出来一个数,剩下的就是target-nums[i],剩下的按题目要求,要分解成两数之和,这样加起来就是三数之和了。 这样来看,4数之和、5数之和,都是同理,故而可以套用nSum模板。见书323面代码class

2021-02-26 00:03:42 55

原创 1. 两数之和(算法思维系列)

1. 两数之和题目解题思路代码题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。解题思路最简单的方法就是暴力穷举。进阶一点就用一个Hash表来存放值和索引的映射,来减低时间复杂度。或者可以给数组排序,然后用nSum的解题模板。具体代码见后续的15.三数之和代码class Solution { pub

2021-02-25 23:11:04 35

原创 25. K 个一组翻转链表(数据结构系列)

25. K 个一组翻转链表题目解题思路代码题目给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。解题思路主要借助这个函数: //反转以a为头节点的链表 public ListNode reverse(ListNode a) { L

2021-02-24 16:55:10 24

原创 92. 反转链表 II(数据结构系列)

92. 反转链表 II题目解题思路代码题目反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。解题思路见书286代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = v

2021-02-24 16:40:13 32

原创 206. 反转链表(数据结构系列)

206. 反转链表题目解题思路代码题目反转一个单链表。解题思路注意不要跳进递归,而是用递归的定义来解决问题。详细思路见书284代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * Lis

2021-02-24 16:01:53 22

原创 234. 回文链表(数据结构系列)

234. 回文链表题目解题思路代码题目请判断一个链表是否为回文链表。解题思路判断一个链表是不是回文链表,一般都用双指针,从两端向中间收缩。最简单的思路就是反转单链表,如果反转后的链表和原来的链表相同,那就是回文链表。可以不用显式的反转链表,借助后序遍历,同样能达到倒叙遍历链表的目的。还可以用快慢指针来优化空间复杂度,即反转链表的一半,只要比较前一半和后一半是否相等即可。代码基础版本class Solution { ListNode left; public boolean

2021-02-24 15:52:54 26

原创 239. 滑动窗口最大值(数据结构系列)

239. 滑动窗口最大值题目解题思路代码题目给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。解题思路这题关键是知道要用单调队列 来做,难点也是构造单调队列。还有一个注意的点就是不一次性填满窗口,而是留一个不填,然后一填满就记录最大值,再删除队首的元素。详细思路见书271代码class Solution { /* 实现单调队

2021-02-24 13:46:53 30

原创 503. 下一个更大元素 II(数据结构系列)

503. 下一个更大元素 II题目解题思路代码题目给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。解题思路和496. 下一个更大元素 I题目相似,就是变成了环而已,所以我们只需要把数组翻倍,尾部的元素就可以和自己左边的元素进行比较了。所以只需要①翻倍数组②用下一个更大元素的模板代码class So

2021-02-24 13:27:52 39

原创 496. 下一个更大元素 I(数据结构系列)

496. 下一个更大元素 I题目解题思路代码题目给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。解题思路让数组倒着入栈,并且挤出栈中比当前数要小的元素。我们先求出num2[]中从左往右所有元素的下一个更大元素并且把它们保存在ma

2021-02-24 13:08:09 29

原创 460. LFU 缓存(数据结构系列)

460. LFU 缓存题目解题思路代码题目请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。实现 LFUCache 类:LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象int get(int key) - 如果键存在于缓存中,则获取键的值,否则返回 -1。void put(int key, int value) - 如果键已存在,则变更其值;如果键不存在,请插入键值对。当缓存达到其容量时,则应该在插入新项之前,使最不经常使用的项无效。在此

2021-02-24 11:41:27 38

原创 146. LRU 缓存机制(数据结构系列)

146. LRU 缓存机制题目解题思路代码题目运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。

2021-02-23 22:08:48 37

原创 3. 无重复字符的最长子串(滑动窗口)

3. 无重复字符的最长子串题目解题思路代码题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。提示:0 <= s.length <= 5 * 104s 由英文字母、数字、符号和空格组成解题思路套用模板即可,因为只有一个字符串,所以模板还可以简化一下,不需要need和valid。更新窗口内数据只要更新window内该字符出现的次数就可以了。还要注意更新结果是在收缩窗口之后。要保证无重复字符串,那么哪一个窗口是没有重复的字符串呢?回头看一下我们收缩窗口的条件:

2021-02-22 22:38:15 26

原创 438. 找到字符串中所有字母异位词(滑动窗口)

438. 找到字符串中所有字母异位词题目解题思路代码题目给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明:字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。解题思路套模板,只要解决好扩大窗口时,即加入字符时,应更新哪些数据什么条件下收缩窗口收缩窗口,即移出字符时,应更新哪些数据要的结果是在扩大窗口还是在收缩窗口时候更新

2021-02-22 22:21:15 147

原创 567. 字符串的排列(滑动窗口)

567. 字符串的排列题目解题思路代码题目给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。解题思路还是套用模板就可以了。注意两点:①收缩窗口的时机②本题一旦发现窗口内有满足的排列,就立即返回代码class Solution { public boolean checkInclusion(String s1, String s2) { Map<Character, Intege

2021-02-22 22:08:58 23

原创 滑动窗口模板

public void minWindow(String s, String t) { Map<Character, Integer> need = new HashMap<>(); Map<Character, Integer> window = new HashMap<>(); for (char c : t.toCharArray()) { //取指定 key 对应对 va...

2021-02-22 21:22:54 32

原创 76. 最小覆盖子串(滑动指针)

76. 最小覆盖子串题目解题思路代码题目给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。解题思路主要搞清楚增大窗口,直至包含T中所有字符后停下来,然后不断收缩窗口,直到窗口中的字符串不再满足要求。然后重复上面的两个步骤即可。其实还是只要套模板,具体思路见书87面代码class Solution { public String

2021-02-22 21:21:03 31

原创 8 大排序算法总结

面试中的 8 大排序算法总结冒泡排序选择排序插入排序快速排序堆排序希尔排序归并排序基数排序总结冒泡排序冒泡排序是最简单的排序之一了,其大体思想就是通过与相邻元素的比较和交换来把小的数交换到最前面。这个过程类似于水泡向上升一样,因此而得名。基本原理将序列当中的左右元素,依次比较,如果左边的元素大于右边元素则交换位置,保证右边的元素始终大于左边的元素;( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;)对序列当中剩下的n-1个元素再次执行步骤1。对于长度为n的序列,一共需要执行n-1轮比较。

2021-02-19 22:02:47 27

原创 773. 滑动谜题(BFS)

773. 滑动谜题题目解题思路代码题目在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示.一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换.最终当板 board 的结果是 [[1,2,3],[4,5,0]] 谜板被解开。给出一个谜板的初始状态,返回最少可以通过多少次移动解开谜板,如果不能解开谜板,则返回 -1 。提示:board 是一个如上所述的 2 x 3 的数组.board[i][j] 是一个 [0, 1, 2,

2021-02-18 14:33:40 49

原创 752. 打开转盘锁(BFS)

752. 打开转盘锁题目解题思路代码题目你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 ‘0000’ ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。

2021-02-18 13:40:34 23

原创 22. 括号生成(回溯算法)

22. 括号生成题目解题思路代码题目数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。解题思路这题套用回溯算法的模板就可以了。但是有两个注意的点就是回溯的结束条件。代码class Solution { List<String> res = new LinkedList<>(); public List<String> generateParenthesis(int n) { if

2021-02-18 13:20:41 21

原创 TLS、SSL原理解析

TLS、SSLhttps协议就是建立在TLS、SSL之上的。

2021-02-17 21:31:20 54

原创 37. 解数独(回溯算法)

37. 解数独题目解题思路代码题目编写一个程序,通过填充空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。一个数独。答案被标成红色。提示:给定的数独序列只包含数字 1-9 和字符 ‘.’ 。你可以假设给定的数独只有唯一解。给定数独永远是 9x9 形式的。解题思路这题和51. N 皇后有点相似,不同的是八皇后每行只

2021-02-17 12:53:33 35

原创 回溯算法中排列组合和子集三个的问题总结

回溯算法中排列组合和子集三个的问题总结什么是排列、组合总结什么是排列、组合排列和组合本质区别在于:决策的顺序对结果有没有影响。下面举例说明现在有8个人,他们的名字分别为:现在有 3 个奖杯,本别为 Golden 金牌,Silver 银牌,Bronze 铜牌。我们的任务是:将这 3 个奖牌颁发给 8 个人中的 3 个,先颁发金牌,再颁发银牌,再颁发铜牌。问颁发奖牌的不同方式总共有哪些?那么很明显,这是一个 Permutation 排列的问题,因为把金牌先颁给 Alice,再把银牌颁给 Bob,

2021-02-16 20:04:19 46

原创 77. 组合(回溯算法)

77. 组合题目解题思路代码题目给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。解题思路来理解一下题目:输入 n = 4, k = 2,输出如下结果,顺序无所谓,但是不能包含重复(按照组合的定义,[1,2] 和 [2,1] 也算重复),所以要用一个start变量来控制不出现重复的组合。然后画出决策树,套用模板即可。代码class Solution { List<List<Integer>> res = new LinkedLis

2021-02-16 19:55:20 37

原创 46. 全排列(回溯算法)

46. 全排列题目解题思路代码题目给定一个 没有重复 数字的序列,返回其所有可能的全排列。解题思路画出决策树我们只需要套用模板,把叶子结点的值加入res就可以了。注意: 排列问题每次通过 contains 方法来排除在 track 中已经选择过的数字;代码class Solution { List<List<Integer>> res=new LinkedList<>(); public List<List<Integer&

2021-02-16 19:34:07 37

原创 78. 子集(回溯算法)

78. 子集题目解题思路代码题目给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。解题思路画出决策树,然后直接套用模板就可以了,注意就是用一个start变量控制一下,排除已经选择过的数组。代码class Solution { List<List<Integer>> res = new LinkedList<>(); public List&

2021-02-16 19:21:19 38

原创 51. N 皇后(回溯算法)

51. N 皇后题目解题思路代码题目n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。解题思路我们先来简化一下题目:棋盘中皇后可以攻击同一行、同一列,或者左上、左下、右上、右下四个方向的任意单位。现在给你一个NxN的棋盘,让你放置N个皇后,使得它们不能互相攻击,返所有合法的结果。

2021-02-16 18:27:27 17

原创 887. 鸡蛋掉落(动态规划)

887. 鸡蛋掉落题目解题思路代码题目你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X <= N)。你的目标是确切地知道 F 的值是多少。无论 F 的初

2021-02-16 16:48:46 19 1

原创 518. 零钱兑换 II(动态规划)

518. 零钱兑换 II题目解题思路代码题目给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。注意:你可以假设:0 <= amount (总金额) <= 50001 <= coin (硬币面额) <= 5000硬币种类不超过 500 种结果符合 32 位符号整数解题思路这是完全背包问题。背包问题,状态两种,不多说了。需要二维数组dp数组含义也差不多。dp[i][j]:只使用前i个物品,当背包容量为j

2021-02-15 16:15:20 35

原创 416. 分割等和子集(动态规划)

416. 分割等和子集题目解题思路代码题目给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200解题思路这题可以转换为背包问题:要求数组可否被分割成两个元素相同的子集,那不就是要求是否有子集的和是原来和的一半。即 背包容量为sum的一半,从数组中拿出元素放入背包,能否恰好把背包放满。这题的状态依旧为两个,因为转化为了背包问题,还是可选择的元素,和背包容量,所以需要一个二维的dp数

2021-02-15 14:49:51 35

原创 0-1背包问题基础版

0-1背包问题基础版题目解题思路代码题目有一个容量为 N 的背包,要用这个背包装下物品的价值最大,这些物品有两个属性:体积 w 和价值 v。其中第i个物品的的重量为wt[i],价值为val[i]。现在你用这个背包装物品,最多能装的价值是多少?例如:N=3,W=4wt=[2,1,3]val=[4,2,3]算法返回6,选择前两件物品放入背包,总重量3<W,可以获得最大价值为6解题思路该题有两个状态,背包的剩余体积,可以选的物品,所以我们需要一个二维的dp数组dp数组含义:dp[i

2021-02-15 14:04:51 57

分布式面试题总结总结总结总结

分布式面试题总结总结总结总结

2021-04-28

JVM底层原理课件PPT

JVM视屏教程对应的PPT课件。发布在这里保存一下。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

2020-09-11

Mysql调优.xmind

学习Mysql调优时候所画的思维导图

2021-01-15

FTP服务器配置步骤详解.pdf

此资源是为了对应我的那篇博客,解决FTP服务搭建的详细问题,作为一个入门的教程来上传的。里面记载了在Linux服务器下如何搭建FTP服务的详细步骤,以及常见问题的解决方法。

2020-05-27

分类专栏上限?

发表于 2020-11-12 最后回复 2020-11-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除