- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564464 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174562
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
) i2 S: ], g& |# H% o2020最新-精选基础算法100题(面试必备)2 D1 r" L1 o* a2 J! Y3 z& c
8 p& G8 M8 a& f* V
0x01.概述
/ @' L. A0 |3 _: b* c3 t. K0 g, u) X作为一个程序员,算法能力必不可少,虽然不一定是算法工程师,但是算法还是彰显着个人的编码能力,面试中也经常会被问到,甚至会被要求临场做算法题,所以,还是好好积累吧。( ~7 r. \) f* W
( ?- B: G* y, |9 g! t
+ p+ y5 F7 q* {个人其实对算法挺有兴趣的,从3月份开始,陆陆续续刷了一些算法题,把一些有意义的记录下来了,也顺便写了一些题解,个人认为,还是挺有收获的。
6 E5 F( ?" T! k2 K3 j. o之前写了一篇算法文章的目录,不过后来就忘了实时去更新了,于是现在,想把之前做过的一些有意义的算法题分享出来,刚好整理了100篇比较有意义的。希望对大家有所帮助。3 C: k! e: g D* R4 t
2 E: p2 O1 M* \8 E% |2 r
% f0 f) z$ D* G0 ]0 ]# ~: k* W
$ F# X M3 g9 H8 M' H; ^- f& {" g0 R
) ?, }. W( p0 P/ M8 }) ]% Z0x02.说明( V1 [" U/ \4 |1 W5 t" l- \
关于语言的选择:+ ~! f& N; O% H0 s$ _
1 d5 X" ^( Y) ?& ]! z" l, r7 {2 u0 @
- J w: v4 r6 W8 G7 x前半段主要用C++写的,后半段主要用Java写的。7 M1 w1 \' e& t$ P2 o
其实什么语言没有太大区别,主要是思想,用着顺手就行。
) H" t9 m* A: h& L" k这里安利一波Java,哈哈,Java写算法题写多了,真的比较舒适。
% p1 T0 u2 [/ R0 F: h关于文章类型的选择:
' ] x$ B$ X' u3 X/ V0 @- f: m) {) ?* H. m K( P
' O* b6 |- c6 e: E选取了一些较为基本的算法类型,都是比较常见的。; _, R" Q+ g( V
不涉及ACM等难度太高的题,大佬们移步哈。
& S4 r2 M- l: ^: l. I都是一些比较经典的问题。
- s3 }4 z8 S c* r4 B4 g5 y* [' K关于题目的来源:
& r1 F$ _8 |9 w6 H( \, U8 H7 o9 E* q& _5 u) |
( t; `' q& h1 W) u6 M! x
平时主要刷题的平台是Leetcode,因为是函数式的,比较方便。2 E4 _8 E& @) ?6 I: s6 n: T
还有一些是在《剑指offer》,《程序员面试金典》中看到比较好的,所有题目后面都给出了出处。
1 o; i2 N3 L1 x关于题解的说明:
4 k: N* d2 q1 {( k* T% N2 {5 @ ^ G3 x: S3 ] Z% q5 M
8 u" U* i& s) f; c: e/ ~" S. y+ n
题解是我自己所写,有时候也参考了一些官方题解的思想,可能更好理解。/ u! Y* A. } G: n
题解的代码都提交测试过的,保证暂时没有问题。# R! }4 D8 \- R
个人水平有限,可能文章里面存在一些问题,还望大佬多多指点。* @" x! K: _- z: m) Y/ S
每个题目附带了原文链接,不喜欢阅读我题解的小伙伴们也可以直接移步原出处哈。 L1 i1 }* {1 d& Q7 c* M* f+ a
关于算法能力提升的一些意见:# W q h* `7 w' `5 j$ k# x* z
/ p& [: J' m! G5 L
7 c2 Y' z3 t* Z8 t( }0 T个人认为,算法来说,思想最为重要,有算法的严谨思想,才是算法能力提升的基础。9 x& b% ~" J' g1 C: Z
刷题就是培养算法思想的一种实际行动。
. r/ M2 e6 x- A& l) T好好理解透一个问题,或者一类问题,远胜于你麻木的刷大量的题。
/ x: }' P W' M) K% Y算法确实也有模板题,只需要照着模板就能做出,但问题是,照着模板就一定能做出来嘛,是否真正理解了为什么这个模板可以通用。
: \* J& C) z* i+ |1 }+ C1 ^关于分类:
# k( U: p2 M5 Z0 ?7 ]5 U& i( s. U |7 U0 m& M) ?/ v. f
) a: c% P; L- Z5 P; b5 l2 M有些分类确实不太好分,所以就单独列出来了。
# m# D* H4 R# P& V6 F8 Z主要的还是区分开来了。
4 j0 I+ S: C4 ?+ k0x03.正文–精选算法100题(附个人题解)
/ U6 W: m; f! R分类一:动态规划(dp)
0 R. L0 Q) p5 ^. v6 y: l没错,就是你熟悉的dp,dp说简单也简单,说难也实在是太难了,重点是如何找到里面的状态转移方程。经过这些题目的训练,希望你能有一些初步的dp思路了。
. f# p3 G6 b" V- ]& w
! L. Q' B( V* B5 P6 e# h3 T2 U( b1 g9 ]
题目名称 来源 个人题解 备注7 a! i$ ?: b3 @& F0 M( S: x
01.打家劫舍 Leetcode题198:戳我前往 戳我前往 估计是最好的dp入门题型了 z( Z6 P" r! q2 \1 ^1 G `& J
02.斐波拉契数列 经典问题 戳我前往 确实比较经典哦~4 e$ W/ A( F4 m$ Y: s
03.零钱兑换问题 Leetcode题322:戳我前往 戳我前往 也是一个比较经典的问题了( q: g2 }- T: g. P
04.零钱兑换II Leetcode题518:戳我前往 戳我前往 零钱问题通用解法
! K6 P6 U, z+ r0 U3 h0 z05.最长上升子序列 Leetcode题300:戳我前往 戳我前往 堪称数组dp中的典范
3 T; O: w- x) q8 c3 ~& z5 d' h3 k06.牌型种数 蓝桥杯:链接暂无 戳我前往 二维动态规划,要仔细想想4 ]" q! I) S0 V
07.最低票价 Leetcode题983:戳我前往 戳我前往 如何状态转移?
' q: t5 g/ P$ D) O' s3 m08.不同的二叉搜索树 Leetcode题152:戳我前往 戳我前往 你会发现dp的神奇之处: c" K: p- V; I7 v( [* r* r4 M2 P% ~
09.礼物的最大价值 《剑指offer》题47 戳我前往 优化dp的思路
& [7 B p& R- M" Z+ Y3 {9 a0 p10.接雨水 Leetcode题42:戳我前往 戳我前往 需要仔细思考以发现dp
& E1 Z/ @, T0 g- p' {9 a4 b11.编辑距离 Leetcode题72:戳我前往 戳我前往 最为经典的二维dp题型
1 [" D& L E& E7 ?3 H" v5 j1 {! F# G) l12.买卖股票的最佳时机(6题) Leetcode6题:戳我前往 戳我前往 统一化的dp思维,棒
$ ]1 e! x) p O# I13.鸡蛋掉落 Leetcode题887:戳我前往 戳我前往 有些难度哦~
9 ^* ^: z t" R3 L' \- v( X% u14.最大正方形 Leetcode题221:戳我前往 戳我前往 矩阵中的dp思路
% C* B8 T# w1 d. `6 S; \15.和为K的子数组 Leetcode题560:戳我前往 戳我前往 前缀和也是dp的思路
5 m* T* [7 U7 }' l5 a$ x* E; B" i分类二:搜索类(DFS,BFS,回溯,暴力搜索)3 g: l! d8 J4 u3 I$ S9 l
搜索类的算法题应该是随便哪个算法比赛都可以看到,虽然经典,但在这上面还是会有比较难的问题,所以,掌握基本思路和套路就显得格外重要。$ Z9 e- I" p( c+ e1 d0 ]# g! G
$ \$ V3 _: i$ c$ d
1 L4 d# Y) S* w! s* o+ Y& L. o题目名称 来源 个人题解 备注! U1 ^( l9 [) l% C3 U; v
16.图的深搜和广搜 经典问题 戳我前往 搜索中的经典问题
& N! i3 v. Q: I3 F; ^4 y17.方格填数 蓝桥杯:链接暂无 戳我前往 揣摩一下DFS的思路
; n' X* Y+ k$ p5 }3 B, k* m18.路径之谜 蓝桥杯:链接暂无 戳我前往 经典改编迷宫问题
- x0 I& A4 h" L+ r19.岛屿的最大面积 Leetcode题695:戳我前往 戳我前往 最常见的矩阵中的DFS: v' Y/ n6 }! y9 X/ P
20.逃离大迷宫 Leetcode题1036:戳我前往 戳我前往 各种搜索思想都可以应用
) j" ^- v$ I( s# z8 ]! `21.单词搜索 Leetcode题79:戳我前往 戳我前往 字符串中的搜索: z0 G+ k* L& j3 n4 }
22.检查网格中是否存在有效路径 Leetcode题1391:戳我前往 戳我前往 思考另类的搜索
6 s) K+ M+ `0 A' X1 Z23.地图分析 Leetcode题1162:戳我前往 戳我前往 多源BFS
% | F1 ~9 Q$ p8 w& z# t; e: L' z24.机器人的运动范围 《剑指offer》13题 戳我前往 DFS进行计数的基本思路
) l! o9 _4 Q2 o. L25.括号生成 Leetcode题22:戳我前往 戳我前往 用DFS生产括号' `6 ~- R4 B9 r+ P
26.01 矩阵 Leetcode题542:戳我前往 戳我前往 矩阵中的搜索" r3 B# D+ u" b$ f4 D$ s
27.岛屿数量 Leetcode题200:戳我前往 戳我前往 根据需求使用DFS
% n* s! R! p- o, ?28.全排列问题 Leetcode题46:戳我前往 戳我前往 最经典的回溯算法
& e) g% R1 U6 s, y) {4 }; Q# d分类三:字符串6 p4 j4 x. x: D
别忽视字符串的算法问题,它难起来可以非常难,简单的也很简单,面试喜欢提问,而且特别容易出错,需要引起重视。# [9 u+ {( O3 f. C. Y+ @: G: Z D
+ f }# w" w! Q
) {) u; d8 M! W5 p4 y5 @, m4 Y题目名称 来源 个人题解 备注0 A$ T; J+ t- a7 ?9 ]
29.KMP算法 经典算法 戳我前往 经典字符串匹配算法
6 i/ Q3 |3 p1 J8 R% K30.拼写单词 Leetcode题1160:戳我前往 戳我前往 很简单的字符串问题
9 ?6 K/ _: [0 T. g31.竖直打印单词 Leetcode题1324:戳我前往 戳我前往 简单但值得思考
1 p! v* p- p" b( t1 \32.不含 AAA 或 BBB 的字符串 Leetcode题984:戳我前往 戳我前往 巧妙构造出字符串" j6 L5 ] x& s- k
33.实现Trie(前缀树) Leetcode题208:戳我前往 戳我前往 字符串中经典的算法9 B" P* _6 D; m' Q# {# k1 V
34.最长快乐前缀 Leetcode题1392:戳我前往 戳我前往 如何处理字符串的前后缀
) P+ A K( ~6 G b5 V1 s35.单词搜索II Leetcode题212:戳我前往 戳我前往 前缀树的应用
O! n4 }# |/ R/ v; \36.单词的压缩编码 Leetcode题820:戳我前往 戳我前往 前缀树灵活运用
! l( b9 Z, Q$ H/ J! N4 K* s% V37.判定字符是否唯一 《程序员面试金典》01.02 戳我前往 简单但值得思考0 ]; K% v9 Z! F4 ^4 G
38.判定是否互为字符重排 《程序员面试金典》 01.02 戳我前往 简单的面试题
4 m0 V0 l7 G% J; r% {39.无重复字符的最长子串 Leetcode题3:戳我前往 戳我前往 字符串中的滑动窗口0 X& D9 D5 l [8 p9 e Z, r" | a
40.字符串转换整数 Leetcode题8:戳我前往 戳我前往 需要考虑的细节很多3 f$ t4 c# d$ r, p1 c8 G/ {
41.翻转字符串里的单词 Leetcode题151:戳我前往 戳我前往 正则匹配
q/ x( H! \) H/ {42.整数转换英文表示 Leetcode题273:戳我前往 戳我前往 非常实用的算法题
7 y% \) i3 P; H6 h" k& b! v P43.统计重复个数 Leetcode题466:戳我前往 戳我前往 循环结剪枝9 r( Q* v2 g9 S( X% j) q, G# F
44.超级回文数 Leetcode题906:戳我前往 戳我前往 字符串与大数的处理思路
4 R! T% l( N% H45.单词子集 Leetcode题96:戳我前往 戳我前往 特征思想的应用. z' F x# k: c/ l2 Z
分类四:容器类(哈希表,栈,队列,Map,Set) C2 l0 h8 p" {% m# t5 W
容器类的算法题一般需要根据一些容器的特点来解决响应的问题,还有需要选择合适的容器进行新的数据结构的设计,掌握它们的使用,非常重要。7 L4 m. w! y% Z7 Z) w/ P
% o# `- a: \. i$ z ~6 `
* R5 U7 Q, I# o' ?% T题目名称 来源 个人题解 备注
: |/ o2 W; m1 H46.按位与为零的三元组 Leetcode题82:戳我前往 戳我前往 哈希表优化$ n1 o2 @+ Y7 P* ^: M
47.设计地铁系统 Leetcode题1396:戳我前往 戳我前往 合理选择容器* k- S' \. G' w# S: W( t- E% {
48.LFU缓存 《程序员面试金典》 戳我前往 选择容器来设计
' B2 L0 C9 }7 ]( }3 |. { `; K49.设计推特 Leetcode题355:戳我前往 戳我前往 很实用的算法& E9 l- c+ _* X9 C0 ^
50.最小栈 Leetcode题155:戳我前往 戳我前往 两栈设计最小栈' A; c# c% C7 e$ r4 s8 l+ Q
51.子数组的最小值之和 Leetcode题907:戳我前往 戳我前往 单调栈的应用4 v6 n' k; y0 z5 W- z
52.栈的压入、弹出序列 《剑指offer》 戳我前往 栈的合法序列
0 y- ], Z5 o. Y$ S$ j) M7 D( b8 h53.有效括号的嵌套深度 Leetcode题1111:戳我前往 戳我前往 模仿栈
( f* M. `/ x; m54.逆波兰算法 经典算法 戳我前往 后缀表达式关键算法
$ m) m% b3 |: s4 [分类五:数学思维类(含位运算思想)
( c8 A* l& ^( E" L数学思维类的题由于需要很强大的数学思维,但是这又不是一天可以练成的,所以,也常常在面试中会被问到,只有慢慢的积累,才是王道。/ y0 l5 |! ^1 M0 }6 |& X
' X- c9 e) @" }& K4 @8 M, Z
2 i9 i- L1 W( H+ h
题目名称 来源 个人题解 备注
6 e O4 |5 n9 x1 ^4 _7 ^7 |* _; Z55.水壶问题 Leetcode题365:戳我前往 戳我前往 经典数学问题. ]2 I6 r8 Q3 E
56.三维形体的表面积 Leetcode题892:戳我前往 戳我前往 空间思想解决算法问题
% |3 A; p- U, I& p9 E) T5 k57.生命游戏 Leetcode题289:戳我前往 戳我前往 数学思维的运用, V# J Q) f3 F) {2 r3 Y
58.交点 《程序员面试金典》16.03 戳我前往 二维平面的交点问题7 S) R/ U( p, }6 o; ^0 |8 _7 N
59.使数组唯一的最小增量 Leetcode题945:戳我前往 戳我前往 数学思维的运用
6 ~/ s, L1 [) P& D+ V60.数值的整数次方 《剑指offer》题16 戳我前往 非常容易出错的面试题# Y! O& b( O1 y8 ?. t/ z, Q; {
61.求 1+2+…+n 《剑指offer》 戳我前往 短路原则
% A; j$ K8 h7 r2 j" u62.1~n整数中1出现的次数 《剑指offer》 戳我前往 数学思维找规律
) k; s7 ^5 @) J# G/ q63.数组中数字出现的次数 《剑指offer》 戳我前往 分组异或
6 H6 x* _# w+ q& u) D# t分类六:链表
$ v2 U) e+ q5 d. @( h/ h2 H链表是一种非常常见的数据结构,不管在实际应用还是算法竞赛中,都经常出现,掌握对它们的基本处理,非常重要。
7 M9 t' `/ _( s* U" I' T# k7 ?- o
" o! u9 _5 @& V R% A0 i. X0 [. p+ b! a8 P% N3 R1 n
题目名称 来源 个人题解 备注
3 z1 v6 e, P W: i3 g64.两数相加 Leetcode题2:戳我前往 戳我前往 链表的加法问题' V+ [+ Z; `( R( I9 o8 c5 r; _
65.链表的中间结点 Leetcode题876:戳我前往 戳我前往 快慢指针思想
% s3 ~4 d+ J0 R66.删除链表的倒数第N个节点 Leetcode题19:戳我前往 戳我前往 哑节点和双指针: d1 Q" M* X( w1 F
67.合并两个有序链表 Leetcode题21:戳我前往 戳我前往 链表的递归处理
- t* L3 Y; W+ B/ S* S68.合并K个排序链表 Leetcode题23:戳我前往 戳我前往 优先队列的使用( J s$ K4 X4 U0 T+ X0 v+ F0 Q, H% x
69.删除排序链表中的重复元素 II Leetcode题82:戳我前往 戳我前往 链表基础指针操作
# i4 P4 T' H) s4 X70.分隔链表 Leetcode题86:戳我前往 戳我前往 双指针操作
, G( o1 R6 h7 s5 e I3 j71.旋转链表 Leetcode题61:戳我前往 戳我前往 巧转循环链表" U8 q5 w0 j8 f7 ~$ y* b
72.两两交换链表中的节点 Leetcode题24:戳我前往 戳我前往 递归解决# l& A' Q. v0 r* l y$ c
73.反转链表 Leetcode题206:戳我前往 戳我前往 多种思路反转链表" j: }- _7 T5 Y! q# b( U
74.K 个一组翻转链表 Leetcode题25:戳我前往 戳我前往 分组逆转
0 m( r4 y- u2 j( v9 | l75.判断链表是否有环 《剑指offer》 戳我前往 多种思路判断链表是否有环
) U' O* v* D7 o( x7 f76.单链表的插入排序 Leetcode题147:戳我前往 戳我前往 链表的插入排序
& Q0 I, x: h; A# T) i+ j77.两数相加 II Leetcode题445:戳我前往 戳我前往 用栈翻转链表元素4 w% s: {. T# i3 M& V
分类七:树" T8 P4 R& j6 F7 q' g W
树也是一种非常重要的数据结构,因为很多容器的底层都设计到树,所以树也成了面试常问的重点了,你需要对他们的一些基本算法题,非常熟练。9 N3 E' r& [2 ^
( w8 Z, f7 o# w
/ J# I+ R1 \" f, q6 l
题目名称 来源 个人题解 备注
2 `% i# j5 O1 `) y/ y78.删除给定值的叶子结点 Leetcode题1325:戳我前往 戳我前往 树的简单删除问题
( ~# H6 |+ }5 o6 y79.二叉树的最大最小深度 Leetcode题104:戳我前往 戳我前往 二叉树的深度问题
! R5 Z; C0 x" a- t' `80.将有序数组转换为二叉搜索树 Leetcode题108:戳我前往 戳我前往 数组和二叉树的转换
: X. j$ J" @" F; @/ Q81.二叉树的右视图 Leetcode题199:戳我前往 戳我前往 二叉树的视图转换* v V7 Y- r% E- @
82.另一个树的子树 Leetcode题572:戳我前往 戳我前往 两树关系的判断
3 [! {9 ?, s- d4 j1 ?83.二叉树的最近公共祖先 《剑指offer》 戳我前往 公共祖先问题
f, F \! l/ }3 A84.二叉树的层序遍历序列存储 Leetcode题102:戳我前往 戳我前往 二叉树遍历序列的存储/ w/ i% s# v4 [
85.验证二叉搜索树 Leetcode题98:戳我前往 戳我前往 二叉搜索树的验证
& m" H$ A4 O1 J; _; ~. ]4 h分类八:数组(贪心,二分)# t. [3 D0 {- e
数组类的算法题也是,说难不难,说简单不简单,而且数组是平时编码用的最多的结构了,所以,需要对它的一些基本算法引起重视。
0 N5 e5 P n* L. L
6 p$ \7 U2 N* u+ x; G0 N$ R( g$ u- ]
题目名称 来源 个人题解 备注
8 M, f7 ^" s p& @86.两个数组间的距离值 Leetcode题1385:戳我前往 戳我前往 二分法应用 a8 b" E; x6 ]( Z7 o; f U z
87.旋转矩阵 《程序员面试金典》 戳我前往 原地修改' v; i% N; Z6 z/ q: w3 E* V5 y! K0 e
88.合并区间 Leetcode题56:戳我前往 戳我前往 排序处理数组问题3 n7 H1 p+ a8 w2 e) v
89.跳跃游戏 Leetcode题55:戳我前往 戳我前往 贪心思想运用2 N' w& ?# m1 A" [
90.盛最多水的容器 Leetcode题11:戳我前往 戳我前往 双指针
' H' b1 }) h( z8 K91.统计「优美子数组」 Leetcode题1248:戳我前往 戳我前往 滑动窗口 ~+ v4 `( R# h' ]1 C! l, F
92.搜索旋转排序数组 Leetcode题33:戳我前往 戳我前往 二分搜索
3 ~. x) X7 \9 a93.山脉数组中查找目标值 Leetcode题1095:戳我前往 戳我前往 二分搜索
; C, Z- s3 ^8 O, K94.快乐数 Leetcode题202:戳我前往 戳我前往 快慢指针判断成环思路
7 C6 o. C: D( b7 p- q95.跳跃游戏 II Leetcode题45:戳我前往 戳我前往 贪心思想9 m4 G4 i% R" {
96.x 的平方根 Leetcode题69:戳我前往 戳我前往 二分法取平方根
4 h$ T; Y% [; k' j97.数组中的逆序对 《剑指offer》题51 戳我前往 归并中的计数(分治) E) t. d$ {$ S4 H* @- l
98.课程表 II Leetcode题210:戳我前往 戳我前往 数组中的拓扑排序
% d: n: y" K; K- @分类九:经典算法列举9 H* Z* C5 V9 {: _# I- J
最后两个,凑个整,刚好100,是一些比较经典的算法列举。
- K. \, K: K6 { l Y3 U6 P1 b$ b7 m# }
( C+ ~8 z4 ?1 D5 h0 f
题目名称 来源 个人题解 备注! L6 g9 L$ q5 N( R0 m6 B! R
99.普利姆算法 经典算法 戳我前往 最小生成树经典算法 O( o2 D# j, {3 e) l0 S) X
100.约瑟夫环 经典算法 戳我前往 很经典的动态问题
8 k6 h/ s1 u- O/ {0x04.End
1 t6 n) l( E o5 m希望这100个算法题能对正在看的你有所帮助!
2 J2 Z, B& x2 Y5 Z) i5 }: F% Z后续还会继续更新更多的内容。7 S1 s( b* j! e* n. S) B
您的支持,是我分享的不竭动力!8 Z9 [9 Q/ j7 Q( V% {* V
+ d7 j7 S8 H1 K% ]. p! r2 m: f7 Q* f7 a) u
– ATFWUS 2020-05-186 u; g- d! v. |4 r" ] m
————————————————$ L: T9 C: a( W. L4 Q
版权声明:本文为CSDN博主「ATFWUS」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
3 y7 H7 |0 k8 U* o7 `/ L& [原文链接:https://blog.csdn.net/ATFWUS/article/details/1061930675 s% ~; Y1 E; k4 U( R* e
; h. @6 \7 ?& E7 H7 f% }
! w. m, U; o7 U1 |9 U. I/ m/ N |
zan
|