From d382bc86ebfaaced8c522eea83febea68b986e60 Mon Sep 17 00:00:00 2001 From: estomm Date: Fri, 19 Mar 2021 09:57:57 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=97=E6=B3=95=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 算法/A类:基本算法/1 算法概述.md | 2 +- 算法/A类:基本算法/5.6 最大子段和问题.md | 71 +++++++++ .../A类:基本算法/image/2021-03-19-00-24-38.png | Bin 0 -> 15169 bytes 算法/B类:数据结构算法/2.1 树的遍历.md | 18 +++ .../2.2 二叉搜索树与双向链表.md | 138 ++++++++++++++++++ 算法/B类:数据结构算法/4.3 数组与滑动窗口.md | 57 ++++++++ .../image/2021-03-19-01-02-12.png | Bin 0 -> 14209 bytes 算法/C类:问题类型算法/1.1 重复问题.md | 36 ++++- 算法/C类:问题类型算法/2.1 数组排成最小数.md | 124 ++++++++++++++++ 算法/C类:问题类型算法/5.1 字符串排列.md | 40 +++++ .../C类:问题类型算法/8.2 十进制数字1的个数.md | 50 +++++++ .../image/2021-03-19-00-19-33.png | Bin 0 -> 67955 bytes 12 files changed, 534 insertions(+), 2 deletions(-) create mode 100644 算法/A类:基本算法/image/2021-03-19-00-24-38.png create mode 100644 算法/B类:数据结构算法/2.1 树的遍历.md create mode 100644 算法/B类:数据结构算法/2.2 二叉搜索树与双向链表.md create mode 100644 算法/B类:数据结构算法/4.3 数组与滑动窗口.md create mode 100644 算法/B类:数据结构算法/image/2021-03-19-01-02-12.png create mode 100644 算法/C类:问题类型算法/2.1 数组排成最小数.md create mode 100644 算法/C类:问题类型算法/5.1 字符串排列.md create mode 100644 算法/C类:问题类型算法/8.2 十进制数字1的个数.md create mode 100644 算法/C类:问题类型算法/image/2021-03-19-00-19-33.png diff --git a/算法/A类:基本算法/1 算法概述.md b/算法/A类:基本算法/1 算法概述.md index ad8cc33a..dd2426d3 100644 --- a/算法/A类:基本算法/1 算法概述.md +++ b/算法/A类:基本算法/1 算法概述.md @@ -44,7 +44,7 @@ 1. 选择合适的**数据结构** 2. 选择合适的**算法思想** 3. **算法设计** - 1. 确定**算法技术**,递归技术、循环技术、位运算技术 + 1. 确定**算法原理**,递归技术、循环技术、位运算技术 2. 设计**算法流程**,数学递推关系和伪代码 4. **正确性证明** 1. 查看伪代码的流程的正确性,手推算法过程。 diff --git a/算法/A类:基本算法/5.6 最大子段和问题.md b/算法/A类:基本算法/5.6 最大子段和问题.md index e69de29b..f0344a22 100644 --- a/算法/A类:基本算法/5.6 最大子段和问题.md +++ b/算法/A类:基本算法/5.6 最大子段和问题.md @@ -0,0 +1,71 @@ +## 1 连续子数组最大和 + +### 问题描述 + +* 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 + +### 算法设计 + +* 状态定义: 设动态规划列表 dpdp ,dp[i]dp[i] 代表以元素 nums[i]nums[i] 为结尾的连续子数组最大和。 + * 为何定义最大和 dp[i]dp[i] 中必须包含元素 nums[i]nums[i] :保证 dp[i]dp[i] 递推到 dp[i+1]dp[i+1] 的正确性;如果不包含 nums[i]nums[i] ,递推时则不满足题目的 连续子数组 要求。 +* 转移方程: 若 dp[i-1] \leq 0dp[i−1]≤0 ,说明 dp[i - 1]dp[i−1] 对 dp[i]dp[i] 产生负贡献,即 dp[i-1] + nums[i]dp[i−1]+nums[i] 还不如 nums[i]nums[i] 本身大。 + * 当 dp[i - 1] > 0dp[i−1]>0 时:执行 dp[i] = dp[i-1] + nums[i]dp[i]=dp[i−1]+nums[i] + * 当 dp[i - 1] \leq 0dp[i−1]≤0 时:执行 dp[i] = nums[i]dp[i]=nums[i] ; +* 初始状态: dp[0] = nums[0]dp[0]=nums[0],即以 nums[0]nums[0] 结尾的连续子数组最大和为 nums[0]nums[0] 。 +* 返回值: 返回 dpdp 列表中的最大值,代表全局最大值。 + +![](image/2021-03-19-00-24-38.png) + +### 算法分析 + +* 时间复杂度 O(N)O(N) : 线性遍历数组 numsnums 即可获得结果,使用 O(N)O(N) 时间。 +* 空间复杂度 O(1)O(1) : 使用常数大小的额外空间。 + +### 算法实现 + +```C++ + int maxSubArray(vector& nums) { + //动态规划有很多不同的方向。例如,这里把动态变化定位不断增加的连续数组的长度。 + // 当连续数组的长度为1,2,3,4,5时,会利用之前计算的结果。求解。但是这很暴力。 + // 相当于求出了当前的所有最长子数组的解。把问题的规模缩小。 + // nums的长度。动态变化。 + + // 失败的动态规划,实际上是暴力求解。 + // vector> vec; + // int max=-999999; + // vec.push_back(vector()); + // for(int i=0;imax){ + // max=nums[i]; + // } + // } + // for(int i=1;i()); + // for(int j=0;jmax){ + // max=vec[i][j]; + // } + // } + // } + + // 正常的动态规划 + int max=nums[0]; + vector vec; + vec.push_back(nums[0]); + for(int i=1;i nums[i]){ + vec.push_back(temp); + } + else{ + vec.push_back(nums[i]); + } + if(vec[i]>max){ + max=vec[i]; + } + } + return max; + } +``` \ No newline at end of file diff --git a/算法/A类:基本算法/image/2021-03-19-00-24-38.png b/算法/A类:基本算法/image/2021-03-19-00-24-38.png new file mode 100644 index 0000000000000000000000000000000000000000..915a38e45e8ace639f57d387afe5291c82ec81da GIT binary patch literal 15169 zcmeHuS5#AL+ieiHSWrYokQN0M6lns2w754QB2DQ?lP+DP6GFs>Qnvzvv}~kz>79rW zA}vS@oj{OYLVz^V&SL-H^*_$d8RJ}hj6oO)$;w*q`;Lz|5yTlI08&`{{mHDgx7#4N8SH4{1XJKN<77I`~!G?;`syX z01)U*=ix60+ONn31X9K7Y5!>!YQHsmBGkbhCJ`R?@s{-`pRkWUlQF5<&hAwolFmNA z+%s^$YQ^KYLe!BjSEQeFHl!NKHt`rchW>^45h!WA%_;r+cCsTf|L6mWsQMF%j(zu! z`~Q_G;4SPe5!^bxD`s8qGD(qWL$AQg26odQup+YeCJ14JH#xT`tp{0@WDelu{`>R) zb_EJi?>7loT=8C?`y)mW`Q%--)PnnI!AmWr?lMIs2({|3H!Y?^d_1RjeRg$- zwOWXD-!`c;dRzF(a2x6Z-87fh#5K;|sVUC--H`0(8L=1bxnh5(xq15$)Mlek>JEz< z%ayJiOt6`{u!TJ>Rj+=)J{=M5$Y_<4=!ZJ%%*HV+v=}eB(j5{IRWw@kZW1R*t~I`w zC2CSqpcJo02`X+|BKn~arZUJdvW=#N8l{eJaa}j=rg6r7bF76?wh{~1=IEm1+NVEQ zfSJ2)*IL`EW)K}%&oY2@N*7nbH_|m^)jv+@Me1+0-08+P!S{=QuCDzlw(V|U*ZC&Q zvinMIsb>aj4~Oj!H=MeFf46vs;$u76?ykSSmQ&!rP}VRfPx~aa=-xw6_yCr}*lO&3 z{lGu_Xg2imbb)ymo#HkP0tpn{cZ2h|*7!13_e*g}?`om3W$Ls~4cccgSmTAb-9< zH%)V5N?7^t?L422^jZ%_tFpyl>khCRGwxHP&5k-#W*Un>MpqrXgTOy^H=I`(nI6^w z6kWU-jh379`55TwgwXB@&3I#i9euQyO`97?j8I7YriOq$9qDv1-g*RFepyhu&U^xu zMfZcN_+BQ}`i5#MIhl4*ND#(!E6d zixt%=xrPw~pUQ%?m%6&k%zqxhVqCy?=RoS9?~_k|N>G8&I*23axkGKRs;>|FR&&so zRY4%($}5QZX)fVVU%$w^UZ?-e63Is=>hU9TR3kwk`=xhUd;_2}b%enuTEDV!8rgNt zeN0*Eh@WB0?(8J+araWk?D^>0&!oNvP5+SkPs_OxOf{KJw9$ zK_ZXk9S?r%`^HH^Ho6mgiNM#LI1zbV32tgXyY9cuVMpm(w-B8#TTzcqN5 zVk?_1#s) z4yUZp=|{W*?{`&}ATlg?>Kc?F>_?tJF|gI!u}f2&@{?4>dJZ;evJ{#vl{D2KVjF8UMqd3=<8Xj#Yj4nQQs=i`!#}AQMK6DswLD`o! z;MB=6V9$RNVRKgJGMu6(3?sNeD*AChSq0P7FiRjapPPk^H_};I8`F1~6^9jeEyaAK z@tYGqZhdX9hGaRp_1{kT|F#SMuSdTJzV8B8IPMU(*LcHRyuMDvzG-hh%XqsloC7q^ zE%=2wFmF&Ico&W@qMg@u2e8+3H@zJYNG|!o|HUKq>&WBJnDWMOHxw=DzG2CFc)f>O zXy{S`#??l(oy=faF?%!60|=Fyf>I&D?UZO}^O@D9s*th#ZU@LvI6IyE>{jOOgK|S> zd}e%|9r~RLV@+CwQla^+YU$BB2k7OWw~rw_iZ0PoEzRJYq%prt>ufxg~~?+@a&N6o=Lva_^TVYknYM5{@Eh{Ypw7Yid&L z#RAZ0#?VO(UcI^z2PNqb)+fVdiJ4~yx&KlJfzUd9hN%yR!y^3DLaDkNQ}Eh)7_I(w zRrB-SRY;nt|45kgFxExRTv2W6Onwz(f~M=m6A>~N^-Os*j`4buufg__wUR156+CYS z0{yZnu3apv3-m=HY|T=pcya7?BG!*h{{9(e{We@t6yD?<6tE)XmYkZ{??fTjcS1sQ zq&`x}bAL=0cYhAqiol)XV&PY$rGf(sFl}4W@HW!?)NFo@VTE8*6X{VVWDD4NPE#Gz zU{b#cvA?a9N4+{n+~&r6%mead?>{;b$h{ueQV`Lyu zeP429ZJmf@b(sWWaP}Gs_A@pmJ;iI0TR@>t&?9!2{zbF|%7h%~geXw?&;93-W$sA- zBHh6Sdb;{)-a$S|N}o-2r(SykyrrT>ql4f5@7CwLm$HWacPEA+taokafE|4OqF#c^ zACg)Sm}w4OzWxS?p1W|T;3g5D=+Ay?xu!!vMGgecg*B9_k1(=R4BG#3gL$UY;ckuk z;EV);$Ia5Eyt*2dw)*qoIs4pgB+M^7b5IQm zbPjyy+8&FxFqO z=)VN<^bQ+G_Q$rUfniOHjnz=iV-CWFi2=(=1BmZ;IY5^sIuK5<>%iBjn41j&OZ-Tz zgY$oVL|ik(Wv09XuMmU6t&S zQ@M}1aXgWZsCGN9>Xb-ZGWM0qoT%(3r3>_~J{ilJ}0F%at%2)e^ZQ4wy z&Zd^{JKK)nyRS7A2FL9BzvDwdZPqznCSC17oJhhH7iXD$nc_`1U3{~2f|Vm%CeZ&2 zil_)(2|K+quD2uiEqPv<^;;ipu*Limv1WLBeC~P&=kt^C{jBAE>T8I@^F0ZB=l~sq z+$;}pYNFx>d+%gMTDF$nkjeVI-kfc&{Jr@0R&R(bV~6SS1;BpRvY^a6=NN0GRb_aC z&(@rGewjC+zP>Ezz%cV;%EI<+6|#;d@W-9+CrZ=9?E#QCU2{Mz`vX)Me-s|B6FAob zgV&o_U|WetW9<{h^8!3?di9yM(3YHAgSax|N)7@{b7A8JoC89pLLejX307^Xm*fDb zCO}Ict2z+eI{IP|4Nv(jL6GM>mU$mZ`yt&&uodh(q)KI{Kt>XWAILIEsWbYwfMhOR zrH+(3vfd2wO+t3(MDkyxEBw>!+rO!kQjdiPrZO=cRoC8?)e&oT|z zULpl4l&$aq>t|NR-s8F}7vP{}9vWe6H!8Q6XRjei^X~UT_{=7^IVatlN zS}=y3_;g0^ShnHrI^+w))ySuQcq==Rebb9C&G6It^LOjEUwM_f+lLml`2h6cU)Byk z1o3k0^_UYQxosg^rb2KAN|bMbcEf;!J#cl!xvuUT?^bq8qdDA?ya6hZB-8Qu!@g~d z0DFYGgqa6kj2`n^vHe`vy!e6?cgopII3p+sMbxt{h0d#kk3%M=W~w8@6va#iffyOG zA}vvLEVk#YEP%R)hwl5q59mM+P66V^I*%!iiYRnoW&>(MJWJ6CVP@pr|3udS&<+^n zVZuo#Yd~z^sS7bAPerOH^=#r;PS|zPAA?Uo&(rmG3h#~Ji+S5k)pkQPY2p4C$xNtP zaI0DR`vMn;ioPVeMxiEV0%j)%}+cyFoyqIj2>kFf24sw9P-3#`3U*|w4(I;O&lb6^qq zM|>`f0ATdg;)yHfB;jWOg(Q1KjNr?HYB^_lTkFQH=%Ab3K^hGbJ~sA0|8vIQTa|;y zSnuAi-GEDkmGPkbiO07gEIKZaYOj``j8U$bN#W_?Ut|$`kxLgY^gJ)oer7~#6lm1_ zZ0W0FauNbC_hQ}{&S5VCEwtneSgrg9=?x}fczhtH^S6%;93jX%V+p7>H`)`6Gd`+z z&M6r$C7#Uns{Tm-1*|tK@Uieb!6%T^RW`Wq|E5mbdH#sFE`#f;VV*sEt zQaHhKQIgJ1PYm<3Ymrd;L>zgj(4p+N3B9Ebc7RMoJ{!x;|D^yO`dt>38H0PVt7Ksm z?Q|B`wmuXQ*IE*3CI*oORl&I5U-N^q2 zXeBP?q7s`*1#`^{w6Za~t$@SYrSGzVE)L~v?>_ncl6VKA>_$MhYq|Y3si4#ORXba< z+XGMjK&7<@4P-k_$yDBIbBVC6+av|h+rTQ`Y9!@mw|;vDcK% zNkEf;MrLH^tBkF*UiS)$|5e!o7Qnwjtg)DA-lU+|I7e55jR zuvQ9}RnB8Huo+up0YL_UUXEzLf>@)*4Psxf*6%SZO7>J=jb*2O&p@x87J)HVr_1O2f~{qMWjw zsw=b1PhwH5uZ?YEIO;sP5dQZvLhri6?&mTk71Vk}Wz~`A*MY<`NKCWOJW?Izj5B>c zYSeT6`x%s_rO>kRPcZkLiWw#96Y_eqJS|GY4H;$nRRzHI`ZvHUIOmhF?#bNUZS1C+ z6R_bidq(8DJO-M-!7Kjv73>Av@|8#z9djc85wuxr)aM{1 z21t^F!*2(g01%t?J3NB1rO<{Doi`PgN^PZzo&u%0Qq^#_=o*}SZSq2phP|Ig!HpVy z2WOw@5fX3F&wc+P2B-1!PX|!FK(nwlf5nt!ZNY3n{WCHC89T3K4^`M30IN1unmzq| zBz!RglFVPr{pg&j`oiO$_P?nkZ{238LxDf20SnQD#IfyoJEv&8-#Icx!3|f4Kb?1X zbFm*y;s${v?gN`c^D0QGTjK2<8BZ@5L_9K>%SFe<7^dPPe9avT$UQX=J)nULZDSJ( zpGOmtGIvzMGZlQ7mGm*i2sK~Es7dpyB>94~Ha4fg=37@@c`s(LEAg%II#qQA{*Hip zEVBO0%g!PFk{i&y-)sVP*kywVDebALwy=yhEXFd@P}_Q$-xivAeiy68r&|uTN|uw) zuH0Q{c)WLtPvSSne*#F1BsDiy`&;W&VSl+H!c}7;Qj+8lx)nDu%6PGH9w!~YGj`$R zs+WX$!KfyX&&Lmj-a8{;^ZEGA-Pct2f}stMa+z z?Fsge^ETPdem;S2(J3iy%L6N21pxRg^Y6$zRqha5psKM+# z3DdQn<9?CpQ#nid?otv6Q~8R>uA<%d^=gsK$_+M&y*A?zp65MXd-Jb=-T{y3(}3{) zi~t}3S`=@4gC;S{$CzbG;k9!ETJEaxmXC2nA#CvTX!gN7wprwF)Z{WBBq1p;SY@;d zZZI2Ht7O!;=I$^_+=mnzrX;zcu+>^wfG8XHU4wMGp)2vcv0#g(#_sOx5R!E}gf@IQ zc-gdT@ph;bWF}yjSu$pd^^TESnfg2-!QS*GO0^6~<*s-&@@~x`mIaW#@z(n(3bVnr zSVMsK7r;U)8jgVve#E?=FWw8aBVzXO9*(mL(}-qeXyMsaAC`|psQ@Hs(YU=9HVLyH z_m6RZ`OeF4L;Y7XKESW988rX9=xdnkg~AwIOSvLK1Yqd~ui(IQD8a8n4+L5@JbZ@a ztPAKofw`j)c`$LK#%ttL(CKGCYKK`%DY-TF^Hw*z$1Rm*9_XW}#nygoC&Uj{zOfeQ z`;DA4tQ3EMkYv>L_C``BmX{zm4blDv&JuA=c)NV#o~w!M#Z&ZPk;P79e%p~>&m+mZ z4%Gk&aR-Oqu;B>*0vi!o($ytz^=*4avT^_}#ycZa0T7Pi^1XX~=`D~?<)H69ALku7 zfFj(!S*~j+*ajeZG`mXC6p(KI`}2Rl0&>EDihj)K?b?`lp?PAzMRQ%Cu>I`JmvU}H z!=PNx-oyhWUxp2jkEcd*`EylsWtpE(bOSdhrvR2*Kb-j3xkPGX1yGi1E8sF-9CBTH zJI`;nx&OHYwEG%CTiI!)ri%J51)Xv0cQ%|>i^>qwfg5%nm&R*VHvV`@{WO19AGmDRdH@|U z`9jV{RtoCor3>)g0?R~$T$UrL!m?3YGuws57_Q=-sZ6)d4w4@=8$)E&U1;IV6uBCT z@f`7d$UZMwKpVL!n{#5&`>s~vY1k7p$iaqwcN=UjZC~ibyP|Y)zm{OpXBx};6(DZT zbL#Gu@5^ac)GuYa4zn|~p=g`o-F>XW{=_e>n;A_T2U84(%ahaoDqiw|-ZsIwX1eBN z-3F$O@=0Di+}V5;Qcrdwd(JcE-G>)Qx~B^^_R0) zx(+F~(z7hhLgO}>(Hr1%!xODnk#5~y)UGZ##GXx|L%VQMD__Itt@0yY&7wm1;Wcgv z2z}rKu->J}7EgG%?}uO(;qTipPs$n}BDTPZG1`2pvQpE%BZpb8W~qLmN{Iv%pdt_3 zw1W`jPVC&C^hKV{HZ602&#$-=Ue*&PO=iMdEpKh(>VpPA0YCE;y7F}`EYO(ZV+FvN z$muNjsZ9DRB4W+vtGuUyAq6o8W6dvrEzTV&xa#Ef zW_&ckTO_BR>b3$Xrja{nXvX?|9e7oY24)Wo|JI_Cp!xiju}w{iO-+*ZaR_#(A0Cg=xJ?|D^8FxUqIM>()3jw!DtO!P z14grQ0?K|rx&fvFs+IQU*<#fJq4OPWJ{yG6^}&I}Cm}eAy_Gjn=Oa3m8u%m-H$>Bt z<~iPh%@w)fKp90aw3c$a5kqWZ`$qHB z@eTiXPFM$3iN5yN#D@cs3hLTF6Y@k)C?$^PZ2zbTeG)Qs+U^pi>Mt?KIkXmz%RUf> zUAHi&zVhh%cx8uGG4XthKEfBvbK=Gb8ZnKysR4S^_(=Yjg#Wwb*6I2RYZ?XKy1boO zMxB{{f|WJ4v2o}XZ>b0^;^Mr`|bZuF%H@QlpqTYtH4Qw`C}uzn=P@ z5GHS+DCVNun^?;Xyy6J=_9rpDrXjlz^fPnPSp0?>L_LAQiB08Bt)nx?2R>R;S|16z zB?#NjHa;aOYc?(sbMF_&<}?j*LW^!)rK)p*_hL|aqL!J!o;$6qCb~E<%7%-2D{iLR zZhqm(Y^ZR^CN#k&DT{+Y_fgJV7XH7rjINwfY;wEqft zSb92-~PP7-+YGq!9)Th0stILu5E3GzpcsusQK4X~qPI*phU6*z_ONICg?mvTh z(15gU%CYPj0LAc#66OA`0|{(j4SiRmzplITfwor875kyd3e(=)M5x-qYoe(3(60`D z@r~dsnsrZ3bCSjv z%XNQ$FxE3%{oKBQsjQ}5S9So7sC?rW+LyT4#qt<=I(otPmMn|o=|s}}CCul3ktCqU zi&`ZCGzYbws#$6+*1od1QJSF^ySN{Ak|(ST9H&Fd|C7lQ6-v1Mb#r%Z3Ek2!8BySA z)eCugA-F=)u+4;_=z+M~82VJ6AgaK{vm8TPg-XgY?)*a$|MMydA1Cimq7m5PiOq~Z zOJru!#6n-zL?0b|9=v~#{#c=XB}42L#d^TxR^r-Yw*a%VxFF&4J^WxHdx3uL{ph|q zk}NbKgf`Sn-rR948B8ZV54=ZkmSh%Hk$+5oMfZ2SZgQHgH(^u7&zru}1fOX3+&J|C zZblhZG_90ugQ*Gln;}pT5H}PEPz&uH{N?b(bLkPL@UdIEJi}lmkA6_bF^h<=0tS2o z3)R*9lt58JHT}CkXYZa@`u24_2TPGWyzwYK3 zN~b657m5bg$;WYs=Jle#le@>oQ&(`;PNO)e_ae&Ux|_B)xx^(t$aFN-AJ7D7-;c{>Ex=G+UqipxhI)+ z#3C{34+Smxw+)0jL3npofBRa(Xj1z*^VVr6j(!j)xs4CZ_o;CUKYQfRG2w0$wp3(Q zosu+C8|ry$?EFntGT1;Lbr}N;9k+!0-gr1Ka@Slm#MGbGm40h!1~hchOB$amWiL_s zKflIVo2Lt~w)UhBOB%uMk$EPw&FY(|2}%FzY+_rxYTe>*FsyOujg%wM5_uZ}$AjvI zB#*5s_&sK>wn|FoRSvpIRcfNrNe`w`tJ2}L!_^dT3sBp5$3`~ZlKXhZJH$R=crut6kYU4;$9a(q62kpB{AnaG_rgS>KgJz z{<6P&e#KA5ATYpSElm7U$Q(XY?!7DHqn{3kTwGTAJw3QgW5Gf-TW;ltm)osI$7P08 zA-dWtV0vx~2Df~+Bh%=1pV72CG$6}x>Z=ceI#1$;_h7wM=exDHlu?<-)Uojhqd4SMiNXKgqjZhUudh z<~sNM6=*tz<8g69HdSqVWJDI#`Fqd%=r24D_9BoWLtw(s)gRu1;t?8DAU>0?^3*1H zA{w`-sn!5)`uT1#^ex4#I14)YhGtnvZa0*Q4Y)1p?UNly93B-_D6U%0eA{BF*}4!l zD7@XjUDK%5wW=~0m9;TG8=#BcmL^p~q3elnM7XvA%{i65RT20UZW*Uw0Mokj9jq6= z*Xf|Yb+&N8I8A1>-p9~Z()aRIU4V=sGfB4P##EAQ+YQ(4&^w{DjutXtoP*iwZOWBY zU(Y@p4!N3aIgXkw2+q72xjw)HZ?j5D>f%X}8G@b%X(a>Gn60VS%IfRYFMR6lEyy#k zg~XHrwtMp$HC`%YYpzw6w0{TC5dKhByl;@`x+I!Mcw`?d-+@v*12*UluV(++>DD@KkkX^GEU)H#j>4Ykr0BpO3_zBkg&*Ar{BfKD z==7@JoVC!|<YygJ=)SY1ch&K0!IZ$V38O&Mh@txh` zQcs`)i1PeJR7no$wGUtnk`k%`=pX>JE58bel*?qsRspm(Z4JB70o&BJO1 z(^x=qEyPjRoK2m_3nI~LYo=Al+bNe7LEokHUqQAC`ejmnZLT9%my)6L3Vj3`wbF@3 z8xOa@-u|XTLT5{hg631iIuI989_}$ZJFtWfit?WW#p#Xj7E=a~f)7eVz*auA_oZ&1 z3-i&nceIAS9t_bE_tp`yYm<#A2p13+BSyVrPGD!#%Wmd?dt6>TgJ03cLe?C{}}IopBuiHNk1vKih3=Y%Y8LNZ5@1%fKiv391CVk2lT|5AfGk^8Oa7qANpSz-$OMU}vf+(Q>E36|jp;tPtV0 zv$>7=9>mdvdJG!brs@=Olo*ek1;&qODArzQcdeiO_>##y270M*?-k?^v9J~A-$>e8 z_i$|&r`FUEBTJ3iR3xS(;ikDb+OkkboW`ZodT-x*Wfo*>`}MFlK^7{w*sKmr{8wB z6|HM1pEZqJqs1xaAU!|lcK0RD6$)$vAY(Dce|FS&Hs~HN;6;@?oG+}O$XER$3ikF? zK`P#G1n^eaK)5y=z_yn~GmZft_#g(@TDR_ictCQS4|XKHB69w2qgHsP-EO&1Ko{0V z$oY5!=2`RI9Q3b9PwwtF9{FF+@*SQG1UQ)zNwZRZ=WrlO!!*KyW25w(pM<2im7l1Q z%}xdYEtVOsixqr>FRhB1=K#GsoL@^44$4fl>P?E=dZNdYoOmOuj<|2Wkq6kxI65aB z_BaTnYk19rTNJSVew;V9@ZVHF-K=W>-?CZJ&PD%L_&9!O91zcP-_Ru+$2imYWjze6 zA(%&*c9C*1V|zsRObHp)(j5;g0i$ju>GmCDL?!x@kI*APbS9~I?&d4IPJ`yhwu-Je z8hy`s9qk70K?9zHjN8zeSISDC<0a`dOUwJdMm2gCSPO%6YYleEyS8aElDe@KeMU3^ z^Amf@_t~aqMPJd7xN?PeMOks!Ke@#}_eLWLD{P(%&Uh6J4F zPIo85Hyv#1%53VPOM@e{D#z0Ya>w8& zy~7+S6$3tM%C*{yG%n?`Fi#snS6o{dt{b;KRh2_RIS@k0QK@1Zg)A3fux(|cmd#ZFx@G;N;b0IV4_y>C1ajU1j&lDX(F;|KcLUy2Jh&(D+C5Z2q1gWiqcpc_ zD;1|UGx<>!>IKmKUcLCGu^?V-h$a+{g?8n|rgj$q>v8Ed*T3iG>CNy7$lI|BH#h+< zmDQ}#s3#{3>B9Ov?8Y}rs@yZLOmVtUI^HYfnUWeWsi>L9Aq4e351FbUU?bDpsZ7J? z$rr%hjNBY+L03abvVe3fP<@qZd7o%w#2mQDlX-5drJ)Qyui)`mg7drFKY%(r)cDlN z{wU~aSET}@qY;b{xG=_*KxWcy4y2D531TX3o_F@wvPTPud?~qO9X$HE z-DcyMHgE4v#xp<%Oec|X2%*sEl7lAT0zKB`C-vc6qJD6{Dy>b60L+iZ@LN^ktM|OB z=3w)x)WAXK>zK0iaNo^KeNkCL)jof$&vOVo0lc9BZifoCm@!bXmv)Vrm36OWZTy~O z@{yM7%V(keoe~B@HknbHwFE*0@ypia$<80Y_5IQh-r0z)6^z9LYC6DmP@aKUyFjfu zTy-Svu*y&A&FYLR+tOJP(e>qCho<@BtbU-mhAGi{Wtn>P?afI-Xyt@6dyfBMIO0l! zJ4qHhOX(RE9j^@~8-{2*qgLjy(1%|pE~vRk&Aul3uK+g2!#fDDxZR0{dUaMg;8d|k z#dRQW17itq+a@pOp4v#YkDVn;24kl1ElcPL^cGt9B~O)cVs5yxYv(UMy^!S$Rv9bE zZ@R%_si-#{Ktf*wfTherwj+TqznETeNcGe7CMAxG#WoNotC3JVD)4F75?I?A`}S zgBMbhGU3O>v;c+8iv8UkJH!0AyaMi5MVslS$pDPwP+r+?H}(ZItaTo~#cJ-^m8dH` zlUFc**EPG_8^=4_%OAvAW`?7r7t=2mG8YHS8tBB!ULubHH7U$pUAorCF3EFpjyc3d3fm4s?pzRmSr~p55#&qV}hX!$|<+}wypl_6VM6{ zc~kZe@%Bm}f7&SEd!)OkOvQcI8qXYkX(@d|^j*f!mM{*3E-XGR#P!O1is;|l{!az9 zd4?SNJHp@<=qL{}%^UVrVLHX^BKHsF$iXMN7Y5HlF>v-cfbBGGAfo=>*(@7}U1 zyAy}UQ}>B}U(Q=>s)qN@t}%5D^IQoRPOED^h3CR_a0*YX@Ie7>CK9d~EOYS}nia3_ zivZ?&J-}eRxhl|k3mVR91<7dxjqbZz|v@jZsoZ330x>V)!b0p}^`N6X8%zw@hhlH9s14 z$SS>bUdfsbt{e+NnV864XK{FrWFX+rfLyUq|F->gV{a8AfYN=>66FIu{rPd;(Q3{5 zACvdx5*A0nRqX{Tp*Sfnp52(ku``|^ujJAkuU>#YF%ED0yb-ZgN{KZ?h}-@|XgfS0i3+4VU_g!}j z7k$qF?4Avu9uGI`+rLX6kSEc)Oj-j#0$;C&3Rsi?y6F?Ujt0fntms32<+V-jNu9g! zXV^MlLmo!GE;@M`P}~%On;u+n5oziNi|T9NsR}^=%Mj(+`dCb|B5Bi6i0>0)Xh+7AUIVmPzi*BZLLfN734)E+@8I0Go zWZAY56^aPL*N#2YjbOkuUy3mKS*e74&b`EMz*n(8!6YrF@=n$HFk!Zm7N*;Yr*sMu z3u8l#(nwe}ld{C=>HQ?xAQ1%>RB6{GJZ6O7k&6w?zblP$tC3NTj(C**;^6zmDsSj6 z6y?7P6hE<_1w_K(4LCs20-Q;6fI+ENN!uRqDtSy@2~H@_0JENKegm3x)#<&FUqQl+ z#6pLu_DwnsSYH1hG|Tvk3Vo(pHf;Vo=5#S+6DS`uVX;tKNf9f1JIgy?y%0cyQ(C!Y zKsk@zW{{XdViANJumz<{|7nIpi|!|?1Xtn|wABOwN@mL*M9j4WTTeYvT*K%4&r*r8 zOTb+qJ0)_S20^zbA3_eM7t**yE2E6le1qm;035Oh?vZo8^t8c@kyO5)zlLqWbBF!O z3u^5x{u))IFL+_l;$R4O2CcpmdOG4qV5tOrh@4xx!|}8T(8EDbB|rZAxEATk{q&jO z|5SGuzzvP8*;ty2QUW%c*lFU}=Zu@$r8ZRafkOF`=A&}TDK;gq%fcZGod0$F{?9zo dUeDE)4e2&3b35~jFXQkvJsl(Mioc$|`ad_8RzLs% literal 0 HcmV?d00001 diff --git a/算法/B类:数据结构算法/2.1 树的遍历.md b/算法/B类:数据结构算法/2.1 树的遍历.md new file mode 100644 index 00000000..12c6ad88 --- /dev/null +++ b/算法/B类:数据结构算法/2.1 树的遍历.md @@ -0,0 +1,18 @@ +# 树的遍历 + +## 1 树的子结构 + +* 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构).B是A的子结构, 即 A中有出现和B相同的结构和节点值。 +* [链接](https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/) + +## 2 树的镜像 + +* 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 +* [链接](https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/) + +## 3 对称的二叉树 + +* 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 +* [链接](https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof/) + + diff --git a/算法/B类:数据结构算法/2.2 二叉搜索树与双向链表.md b/算法/B类:数据结构算法/2.2 二叉搜索树与双向链表.md new file mode 100644 index 00000000..41bdbc4f --- /dev/null +++ b/算法/B类:数据结构算法/2.2 二叉搜索树与双向链表.md @@ -0,0 +1,138 @@ +# 二叉搜索树与双向链表 + +## 1 + +### 问题分析 + +* 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 +* [链接](https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/) + +### 算法设计 + +* 通过左旋右旋操作实现树的旋转。最终旋转成一个倒V树。 +### 算法分析 +* 时间复杂度O(n) +* 空间复杂度O(n) +### 算法实现 + +```C++ +class Solution { +public: + Node* treeToDoublyList(Node* root) { + // 类似于二叉平衡树的左旋右旋。 + if(root==nullptr){ + return nullptr; + } + // 进行左旋和右旋 + m[root]=nullptr; + m[root->left]=root; + m[root->right]=root; + rotate_left(root->left); + rotate_right(root->right); + + // 旋转完成后,制作循环链表 + Node* temp_left=root; + while(temp_left->left!=nullptr){ + temp_left=temp_left->left; + } + + Node* temp_right=root; + while(temp_right->right!=nullptr){ + temp_right=temp_right->right; + } + temp_right->right=temp_left; + temp_left->left = temp_right; + // 返回链表的最左端 + return temp_left; + } + //使用map来记录父节点 + map m; + //左树有右节点,则左旋 + void rotate_left(Node* root){ + if(root==nullptr){ + return; + } + // 头递归,子树完成了旋转再旋转本树 + m[root->left]=root; + m[root->right]=root; + rotate_left(root->left); + rotate_right(root->right); + // 右树为空,不需要左旋,只需要改变一个连接,right指向父节点 + if(root->right==nullptr){ + root->right=m[root]; + return; + } + // 右树不为空。则找到右子树。插入到本节点和父节点之间 + Node* temp_right=root->right; + while(temp_right->right!=nullptr){ + temp_right=temp_right->right; + } + // 改变3个连接。最后一个右节点与父节点相互指向。右节点的做节点指向这一个。 + temp_right->right=m[root]; + m[root]->left=temp_right; + root->right->left=root; + return ; + } + // 右树有左节点,则右旋 + void rotate_right(Node* root){ + if(root==nullptr){ + return; + } + // 头递归,子树完成了旋转再旋转本树 + m[root->left]=root; + m[root->right]=root; + rotate_left(root->left); + rotate_right(root->right); + + // 左树为空,不需要旋转 + if(root->left==nullptr){ + root->left=m[root]; + return; + } + // 左树不为空 + Node* temp_left=root->left; + while(temp_left->left!=nullptr){ + temp_left=temp_left->left; + } + // 对称 + temp_left->left=m[root]; + m[root]->right=temp_left; + root->left->right=root; + return ; + } +``` + + +### 算法设计 + +* 按中序遍历输出链表。 +* 那么就用中序遍历的前一个节点指向本节点。 + +### 算法分析 + +* 时间复杂度O(n) +* 空间复杂度O(1) + +### 算法实现 +``` +public: + Node* treeToDoublyList(Node* root) { + if(root == nullptr) return nullptr; + dfs(root); + head->left = pre; + pre->right = head; + return head; + } +private: + Node *pre, *head; + void dfs(Node* cur) { + if(cur == nullptr) return; + dfs(cur->left); + if(pre != nullptr) pre->right = cur; + else head = cur; + cur->left = pre; + pre = cur; + dfs(cur->right); + } +``` + diff --git a/算法/B类:数据结构算法/4.3 数组与滑动窗口.md b/算法/B类:数据结构算法/4.3 数组与滑动窗口.md new file mode 100644 index 00000000..da184c8b --- /dev/null +++ b/算法/B类:数据结构算法/4.3 数组与滑动窗口.md @@ -0,0 +1,57 @@ +# 数组与滑动窗口 + +## 1.2 最长不含重复字符的子字符串——滑动窗口 + +### 问题描述 + +* 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 + + +### 问题分析 + + +### 问题分类 + + +### 算法设计 + +* 哈希表 dicdic 统计: 指针 jj 遍历字符 ss ,哈希表统计字符 s[j]s[j] 最后一次出现的索引 。 +* 更新左指针 ii : 根据上轮左指针 ii 和 dic[s[j]]dic[s[j]] ,每轮更新左边界 ii ,保证区间 [i + 1, j][i+1,j] 内无重复字符且最大。 +$$ +i=max(dic[s[j]],i) +$$ +* 更新结果 res : 取上轮 res 和本轮双指针区间 [i + 1,j][i+1,j] 的宽度(即 j - ij−i )中的最大值 + +$$ +res=max(res,j−i) +$$ +![](image/2021-03-19-01-02-12.png) + +### 算法分析 + +* 时间复杂度 O(N): 其中 N为字符串长度,动态规划需遍历计算 dpdp 列表。 +* 空间复杂度 O(1) : 字符的 ASCII 码范围为 00 ~ 127,哈希表 dic最多使用 O(128) = O(1) 大小的额外空间。 + + +### 算法分析 + +* 时间复杂度 O(N)O(N) : 其中 NN 为字符串长度,动态规划需遍历计算 dpdp 列表。 +* 空间复杂度 O(1)O(1) : 字符的 ASCII 码范围为 00 ~ 127127 ,哈希表 dicdic 最多使用 O(128) = O(1)O(128)=O(1) 大小的额外空间。 + +### 算法实现 + +```C++ + int lengthOfLongestSubstring(string s) { + vector a(200,-1); + int repeat=-1; + int max_val=0; + for(int i=0;itJ z3P=tGMUtFzrl_j7>fG+v{pY1Nlc=*HifyM&}Dv6>zwKxl&DPF1? zxi^v~;`8u-6!AesRiYzx6G z*Rd7G+j|ohssb$P9g!zEUW?SBFycct#B76LCNie$d5SbX&jJekmIa4WzcjPWRd)GF zP%S@iTIeUU4G^L#H`-2FDt{go%8t6~bo+R)x+jy|x0`Wp)Ziw6 zdzl&B0-yDZf*X{R2`Alj)G(x5W=tU&xT$iQl7n0HqyPMY>y5&YNQuWf)*<2e<+b?! zH$9rZr&_|cUFM~3^H}TW<3APKZpgaLXlKa!wl-UHR*1dezwvT`u}MCUp7>7F_`nMc z+Koc*bO;MG)T6wHc0}7d-U>A-M>2^WRNvxCa&;+qFLk9;GehqS*8+P)V-Hwi4W@zf7UJ}AX5;_ zh8CJvfWEqZiC%>=-xU#$x_7fq|B_Quyc@8OWy50@(f;tyX-pG40_dYQf${Q`ban=` z&u$fhFabwgw}D_ui5SR1fpA1wb}n)`aX=u$_JKiIy2C26)%*^IkJtD>dAU(PRtYAh z;bYc>LHI2u(a6z-@SH3#%I14=^M&|bxJY(y4X#GFz2qSNSay49?(4^w zW{N(r{#|CrW2E{0ojUHO%SuRmldTqRP)$+gl4ffS!uxPk?sWOM&0H=1t#N?s07VvS zZ2d>tZjz-fGvDmmzZRhLqg{Wn=-R=v5|_!C984%#{Nn+4YAv)F?vz(f)kV`|SlH9A zsPK8V(`c^y6#f{|Hr>ExhRn|lD`b}uF~tbZeibKdQ;Kue_(tWAu^nlfc0QR}p@(lC z9s15};m6QlNUxFw+I)itx_uJ;>sPAQ)QD^b{GMKZVwEG--#Bccb@jN-bj1JVkxE%a z8JjV_@rGK+w*fcPrff<=nj_0kM#R1oU2Ejy9Ww`hzMl0y87kg%xGIeXM%3?sP9Nhy ze%u*K@c&hk5mT@KwPjw$Mdy?|m$byuBC>u%f-~bVJ+*XRRe|407HKv~Lhai0=0-M; zrdjTI^?iz7W|^b4^4j!ib;jfxVmkY$opiE;O`x=#JIwq?HMJe)5+qI#-jtut(9* z&4Rzj{`y718+Ol!VUBh5H}c=l z_eUUuItE(K-?;tm;WV%Qd=y%cDw<(|-$yQ!M+zTQ!u}w<#EVcGoxW5Z>uv#+)7PF; zwVhX=x{#xXdtZ1qn6*xHs99?0QCAzAQ4f%8iK_>r$J;{&escW_Ji%)oE6X$ zkGAQkd_fJ~FRn{whDun#`_+uRrBjWgkam4DVGr}riC zO1Z5t)0S(#!R@!VcR$*36<**VGm30{gl5OHOovSkV_#T&XiP&yQ$xNR3?HJu`& zuJ|j=@mi`V?gvJeP3P*wR?4A2zRlB-pO0pjf4c*C)da7WDt;<-s>kLPUG@=&>Lfz)0aK^WU20UjLEM=?k${fD`G>FhQ`FY2~Al2 zO=@A0@PBpKI_p1dvrIjjw1A(H95rN2a-Ly7i;8vbe*LuvP0({5{bXIgv`4pzn|4>z zd`F$2em?QIMX=Yt1(81RNrpA#nJ-~m-|-ZS4rLFkJ^UH(*4=&qa^knGq+wa=x z-{SVcW@(-f)~6o3Jo|D6zId2^wqplX|+P-z?{) z6Kv%4bnB%IgKP#eO%>OcF*bgQev6yjj4Tb@hr48s0~Y;=;p+3$W4eGuk5VTQ3E& zN^0!?!~F;z<$v6$bGyJB7N)No^ao`3 z04$%G`Gav8r?uq|8*b5FT25mHt`2eCkbnEJ4rl(JaU}oMC)-|altS)&{W+-rJvfGL zt_RWYqwV>s49WSl9EthS_71~fBD25cY4Tlf2>esbLHErBA&qls5`K90YTW#oc)yC&;%P6 z`?MN&CTs-ftn72u!fMo zzf&+KN0md`+pKs3gVMzBaDr6rrLYLp=fK+c$^V^?=Qq__U=Cvj9jg!$pe?+g{L=JL!DQ7csNPZXO zL6)mX$sDr4JyJyh<7(1e0>O?`7!&#jw5$ZGi{8iQBHKaw0xWj4+*17-bQ1-X2gNsi z7Ct{Xl`~zCrN;pdQxu9FlrFug89p~$fBY64ygl{oxb;?N;vldNU_6jWT1F3($lS=O z#9H>GVSTP8zO?ihVU$$=$A5cw^8d1c?+q1{J-|{~%;Ei+YWS1=&hG9@c@F)#x_QY6 z!m;m04fiDr3P|+^a3h)MwY4>P5$fPIB|mJIzA2g2d+vji|EjSCC4=`5oP618$>ua4*?w=G|&x9e+F0#HC$BeB$FAgXPiI zG-=W{Z)&LA2Ngxc5p4bVZ1(+Y=21mV;78Yz2u?5}06^ zASNxP@KZ$H>A568wp@^%z0}T~@^~jLlr=tRLFjo0NEuNJUHMtsTRyMqPf5IJwkl)S_n@qk$`K9U||eFFVviU-qS7Mi+HO0d38Bq!mj`A z+HUKb(_v^#Ow4R#Ud?pZKE@m|q^r*vo^uaAoUbl`61jAKw<(l{jg=O9`I1!V>*IHs z8N`o}-RD*|!X=&E45nw7KMv(#`W83xU~emWmazU?LZN0ZuET*s7Vo0IDk@`sFcRPy zB-G$|du&WHOYoONe+#3zUzaGRnH`+eVPhwmt@P<(#^FgxhbFV|kP&R@Iy#|dSvqRd zY6@xOgxc3T9a5u)dKn~&$gn}-n(s6v>c5%%T-6q4D2OskykRO^b5LP~_7d?~(qiXk zC74N6cPE6WuLiL0n3)PmGP^EqOwooT`da&8t@W*P^)~!=a4jNn44Ks+isKXaJ^x8F&GxRxPe(qFIL|{=Ak`JG$Kd0(S zr-B*J-pO0UnDA@slTj^Aq{7~=*BCZo0`#8p4^|bi=r;39ef^g37GZ-Y37}o?qA-gv zb*$_7MBt8{av_yr)?Z&i7ZMWGZP+qS;(ukaz+N1PPgZ4zal5@iS!~yuS9CavxL(&C$ogYu{&Dju_ET?7DRoy+sc@ zABIUi-_$VQ-6>j}^gBrREi@&JM1>_2>`o2t?VrT;5NstZkup8R#aq1Q2g;{hZBCn| zq3Am211k%6G0FBVGMz2gS?c)JQ?#b%2Gwi8K1|Yhkn`Cz2abz zJyda+#=ecYF9>&?kECgOvKpJ=n=B|HOjV)D_Q8MmEMA4)jbe9da1%kq_4q9aw^Lks zH=relXPG)u7M_}*gRl}LL5q^nb+8d5-GMV}oeka6*RXOyBd_V%2lb;FO|>_bBL)`N zQBfnSe~Kin)3>m%>*)6XE>ApQ%1tD%aI<>Tb+ZmAWV?D?u$%+sdzdWYYQ1%G--`c$M1;VMS?@A3u8=E6q9ot~`f7t;>NtXwSBOEV$?Tc_ z0S^pQ$$7I2?9MA6w^ADb{@|}wyVk4j$O>%Rst{4S;r!c}Wk={4qxgtpbDjV1;g60q zIeJs9Ozfhlyuw<0i-Nk%2I;%&V}WGkGff+4A_1Iznd3r$L>iXJ2A!-pofwqMnxy^+xSH(IRoqD^ zJKScpJ&-$1cE4=s-*2*pVUWy}V#7rRa?T{Q-r7fF~v)dbE&C}zF%Ogm| zZv3K|O3Lb*KTK1`_u%nHu%RusoD`8YK;mnceY5BRW%1%X&Azzh$ZE@#l9RTp1yh}z z*Q}Tw3#*DKg;eKQz4bE24D^ushQQz%C*6nsMynzYLO3d2S(>O3yw z3`rf&#VY2CTD86hA(ATt9w_pRm>FV_F(!X?PITn0MG>P)^9tM3@~W;|bz=4QzD10d zPqNyI=|EQPn-R460+=fRnTj7iUHLrvmvobic$BrdkH_jYor0JGX@xV;h&b4E^iBag z2fqwoQ1h!7!^PP=f5=wK$gSEl#cP1Dpq%hP40}5Ue{HntN77yOO8>3#*QJ8xn&juG zE>J+QdjK3m?2iTYDW;=Y7+qdGU7p<35~`jq3@)3beD!R3yzC|cx*o!_;@kf`LYAtk z2ew5P6~z(YyJ}vd@c!Lrn3Rca*X$oQGBZ)R$ z@uKy^B|t5oRt)Pr98@a~e5jykBht(np8g?xKf?>r)!)ps%PjN>E608Gv5JwRwX%QK z{Ah0O>!T?wOoEHn9{ov}-cNEj+1ol~PGRf&w4Ob3U8mrH$&>~)w?Gz)z9Oe=;_nFn zxJv?S{UDwk&k9hHvuU3mu)1u>(KKw~w#TH`cE)DKh3lWdRg|_vzR-leLfbrhfTTNT z86 zgftN>Qz=ViWYyW&{ldG~_3=)`#U7<5+@>Qx>&eqM*cq%=Xf1mV2VprTp2)Irx6nU= z=eFsfmvn997fHzsttd8M)baCEyPBtmW){D#mH`TOwC>>6sQRLbB?_29&E80T!)Q|D zlRTHUP$vcl|7}z$Q|IkRmHyFp8_+o`$f7j|SLA~GEC~4S7*kG8PG|nxw}Br?Sef#g z`DE;vQ^(5%^}3OcuvsF#!dkg=pL*4h-;n_J^2Ami>^Z9E47m@c-mQ6F2@XeJFV7sI>8<#tnUsSf{o%Rg-E=1cW>TORmOz4sk4wcH zi^aF|TAbtdRw#lpD(|n+q1<_}N5|r^xm5p@X|!Q*vpIwT+m> z?hHtnWH+j3LulA!?fNr;+u;fy9Ub+Y^j_qa-F|2N2NeG-5B-6@SYLQyD6yVYMW_zCi+O#6-=T?QI9w-RmxmM+V@nyVTuR*yxOl|Mam`-g|>f=Nq#( zpM2hO62FqBqSwVICOx#FYhEtvWA$J!AuD}KcIfD@N0a`%x9U8>LG!r5d`h<+88#D9 zMl9Z09_wHr)+k~&On1(;o^KA%Gdp@N@fywLv^JV_&vRN0ugBPynjGGMFO!Wj)GKPHobF(lfvCaqXtW@o03ES+>psW+C{h1!e zEbHf`3Vr|42a+Etb#F{`E2#{+eei#x-!jXr(lV$*M_1M0AQhN zD{R|M^$s5|hX?>4eEkj~ zuP?$y4JYv z$aZh^T1gglb^69Yz)V4eKz;d6gN*s@LL=XvQ>S1HY-y_dei)3An^QZN;lZH+P= zbX+~?Z+}y`j1{_Ls8(+-=Bc)vFF43NwV3!6hmg%sL`vvy=KJ}tvk`3D(dfG4iU*@s zF`Hd0AIkz(aV@%VI1NqrjeB1UVP01FSS~I=B{Q<3`YqWBnW)tqWT5 zPqw~rkmf(ZOUJ}s>Btq&=Se~4w@G=fG3XQ=)vcJ@3OVe*+1_@JRJ_l%s@@5xA26E} z2(04Up{GQ{)7iO<05c?^-SY18nPgLE%xTxa>`S1+39-enBO%+S-HIa2&+eZoPhMJF zONVW=GOjZI;a^8hVMimGM5&O=C#sNJ;Q`k`YGWjTf!k@3Xg95@AM8Uw#nbrBZi&Lf zx%UU6NX_QkmB_&^K+tmQ0Qym?HHCxRq0O0R0KNmSCSww5#)7`Ss_%9=5U^;Uc-~UF%FEO*@1^@ z1=m%-gZowV7e2eoQbiwZ;S_Rk-{;A}XTddKvz7TiirUAgN}R$ecTT#-63nor{;pmH zX@`%@oSuoh!7xIESJHB)f9baP0tgC%k%Oj(o9l^^Tk5x5xr5ll91~oXRBUq@&s$kQlDi5>nN$*p+7EB48RN*)2z?Npx;Y8)JD+x8Y$}8@k)%WF% zD;Y!gu5^uVofa)<80tt#|Ef@)OT0`AbaIZA3O~1<;})-ZoL`{&;~T|xPyJjmOQ>}e zwQIq<;FP3$2UXiXpW!kMYqr4d8o`pwg@DOu;Y&k;pTQ?8(UYQA^$P$e>r#7Fq&B=6 z97V?KCkUJyiyzRFMUGxStaR7s3L@%*fmP zv*#DEF7|be(>!yYllA^mNq{9mSm>}mXivoMJEKBwO`zrIX;)FO1v)HmnE!47%D?VX zlC;|@>FAqOxsSe{Vd^P3+Hag;YJZdjyqtq{N7V~~(c|ez5AC}5m(nt`N6cu6{oV;? z-hQJ!vMZGz|L6Ps|M(TkN01mLRe10%AI)kvgP18_hxKvWuozGvxB#ySMGyPj=$Fal z!B*Gb=Kv*CDhTpo?1(2z%pT7+O;D*E?f)jDgIXvFtgU;XvcF>3TcD_nbND(04qz%p zHO*Oo$XamkN$%vovd9+QY|-5%mP=8+{0orc?b0i;rZ}puCBx|awQQbAGi{R^N435I zISoB1H4=pXn@J94h9#(-Hw{fbL6Tt%JqG#>CHJUaLMO>?hQ#)#wR=)?Z#wuo+3*kg zo>qA*VP#gMOOo!nN-bV3MBsnCybi6+$X2vcV6e4gd}(pVb^bCD++v zfYaU9>ke1cZI8$5L#bpW0J)~N&a|~d`~@Y&rN`Y@VzIVv)QU1gEu#7}&kBuW-a}7P zNO_V8iTp{=_Szqg{{7vp;}_r?b|UZR0Y*3`JejZzYST(U>iB*IY7;>|9pTH2UuUTd z`s4h!7o#lfO4`ajuSr-N;E{uwpo1Ti(Ll=9BypZh9-r0a^z}HlAhJvHL*M8pE{0-~ zx_i^q50e3?`E$dx@~Ef%BD6;8qFR0dxT%XO3mi42ezP3o; z*Og3h*RcgJz3N#(>yPT+1Ac$-_9kx%pk77BF``hC?OPu{@+VfJEM2P_LWkDrMkTX~ zT?WE(HSWY*fmX`QNpN~%<1c_3cYf=L{+%%f@Ei4SX6B}wTu2g*NdYl~<}P`u&gH5) z_z1~TBp}cv@V9Hg#M zNglE~YL)=3d!=LRVD8LNMG?8Y6{)Q&+JnnPD*xrf9u5I~XUJ$2I>lPzGQeE&;VEf1 zgk9?nSZP0{gL?Zy#`q80m;P6_j6X;JeDVU+nw&0uHnT^O=%#J^B_LS z`*g5;*3}nz_Q^?K1cJH%XaOxRN8j=dw$@jLQoRBFeUqA6Di`zp)^3bRLr%XYH6-s^ zN>X9mK*RmpS>`s^?88Is4jc5fP3UbvhutFJ6jkp`?ACFmdFi&)GwRFivN_!$waopO zU;RcP<%D|wjA-9H>Kv%!J{~>HLyM#SYzJ`aknDYOs9bgS#EptKY{3b8g%;|44OSn> z;P7x`qtF7IyAD8|f4%&y4*;ubR2zHZxsu#hSbx%_uU{K-1~MWYwO-mJz(o?JCGSvG zu$r2<@BS(P#E_AoFQ||B`tt5nAy(t~fY)%!NB|qK3ibyw%2w8Y{L8QiY}GK}aiQ`j zRy&?k>!sPJZvY!iLIFlWwIfd{TG#_*A$+3&Sd9_DE}>q9h@S;hqSb-mnff2kzg92n zT-7k1cSJ(H_JAP_`~-U(&{khKjmUn1tsJlcFm~8K{tXru%lu*(^aqn_B-lIUh4smN ziytj#uI1?sty^k}1;|?UR4k{zC_I%CtZq}G>gtB`M!uBGR z+G5X`47zJ#Sh%f|g?MgJReUQLCv@po27yoi@JLCz0QI`uy-i3JEK_vhRMI{^kM_^n zk+X49H~SANcy4x;14<7n=xXlMK6DgK^Mi}5uVXo()U&;S2Q7H~z|4*4si0Y3!&AGl z$d0M8ba6YLi$-k2_Igtk0CQwS;_7-I<&R$V$J_RO>lbX*bGVS!U_q|%R&o_^tg$4e z`A?cLJ7i-->+9|ZorE0Hq`~|(WXK>97ENT>!g=x^oo%&UJwHh|_IUdir;}aBj!aQL$leehC zm_+L`GnJ(b03jFuv)+AQ+LYTO!p%nRhak1 zo%BtFQ0*37U*Ke4B4=M0&EVDZDy&9jW{X)gO2(DJ*KwV%dCJt?j#33%3G*A5SL&8N zF4gHjY>Rwb>;BG>IJLAGr5s9AcwB<=c}O4ECyby7C4<=Bz6cgDv(lQ%O3pFbC=Eh>xlpwmLeihtgJr;~Znq<+0V)=%#Z)myN4cFk8W83UBe#6_+gm ztiLe%W!tJKK^lV2gMJaH{NZBKHH8=5>6dBoJBn|+OlcMTn{c6*;cnQ*CHCp`_Xd3@ z=jhJ?pn)VFC$lt=E2AN`@X?4-1@g{KWtvg{y0G;92v1iDyT=zwsu)5+dJPCX2_YX3u4Sr>(1%q7#qt8Fcp-uOHlO`$J0^Z9&W_GYcOsgnj)r#O8%dJo<_0+k z-4@QQq3f5!5sj#+NUrOw1><8kM92c8a!Jq#OfBH0dsis&Js1N$N-$%&k}Pp#)xazT#^cO`lcS*v`$?_ZUQb4(3?xEu=3s*k<^q6c`qjrE%O|({=4oyes>gF-kc~ zqsZR^$!#-u8dSfQZH$Z;B1{)G(Bpr5_O0&1%}LGN|JfH|0n}`y19{VR2~?u83u{?Tdm(} z*UEP4c>^k02K~ZOlNy_iZ;Y5{cQqNv0zajaj{DIPsqC}*tqTfL4y&m5r)%%cHsk68 zx_=k3B_V9|vJ$OP)%IP|31*rumVPO&Tr?*;f%zXm!75X^R=F4+Fd+czOVblFA zncw$Av9v9~XGyN*ysg_3Guv_7bE2UUD&Xb8hwY;9D03sJx@vm|iK`HdjMSeM7zMN5 z2zq+rUzmM5F}7f$U4r5;{I&AY70li?joCDlL+tKZJG;)ub8vKDKl(~>Hl-al^|ji5 z{g!$_Ok&*D#)5vV{%W^LwyVk1?#!Fn;!JCg9pTv`SMde|oMn0W3r$+!auk5s`#si` zuH@%U!XK5U1lQ<+bsb$1_@wJ(P%@un?L1NWRqgGNiSY+%_I6>6jGkvr^Y{E)F}CEQZjz z2U3Mt(8&|{#@)I|&3#OfpC`E?cLv3=xx6$P>soh}qejqmMElrw&V3o#m!=Nj1MdX$ z0Pmr};1=N+{Z%+)1xv60vl!{}RS6#7$LRd&yvln0{U5{DS0I=+a6R9D095L!dsU(r zfR%7HcbX~AGP0O%NYG_5V#AOR2nhe*|0h`zKg z#dSyK-p={wQHFX4pK3wize$RC=kpvlTUV0ea8r-jvs|Y*UW}S029b-nPRvH#t@%pO zjNXo79#|a|1mW);@IDee?&5K8>BZ}-=2c>nJ|NmH#DR`k7G&~s4DRovHu-pyZY-cC zZqPw63X;$dmdDn6LEgSTJaJe#o(E)A`#D+xSNv1@7Lg9mzdYcuRh&HAq*IVbgLdc` znQAQx0R@T2=FGE61lFDu!#h{_dg|N4ehL3K6#RIFIrMEcYb~@06FL|deo77{s3(_ zyU-!}rnHS?OmV@3SK>DD{VXmyCI8pdeSG^oTJ@6p`wkhQ8vH{?WTOMyM~88}XVH=( z1o!qTbj5ZsI^Q?_Kpskc4qAlCAlX^~OZ42h$Jzcj1}ZRz2dEkw#&_rYMkqJ#Ve3?d z$7;X$uw2bIOJ^7PBmiHYv$^qM?CZ@e^#@=f?UpX5GyUQVPRYrj#p9pX|4$7RJiUr1 YPJd5%RBz@OK>DznlIFugg}+|^FKoh!`v3p{ literal 0 HcmV?d00001 diff --git a/算法/C类:问题类型算法/1.1 重复问题.md b/算法/C类:问题类型算法/1.1 重复问题.md index e5feb2a6..e7cd8c21 100644 --- a/算法/C类:问题类型算法/1.1 重复问题.md +++ b/算法/C类:问题类型算法/1.1 重复问题.md @@ -109,4 +109,38 @@ } return 0; } -``` \ No newline at end of file +``` + +## 2 数组中超过一半的数 + +### 问题描述 + +* 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。 +* [链接](https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/) + + +### 问题分析 + +### 问题分类 + +### 策略选择 +* 数论知识补充 +* 推论一: 若记 众数 的票数为 +1+,非众数 的票数为 -1 ,则一定有所有数字的 票数和 > 0 。 +* 推论二: 若数组的前 a 个数字的 票数和 =0 ,则 数组剩余 (n−a) 个数字的 票数和一定仍 >0 ,即后 (n−a) 个数字的 众数仍为 x + +![](image/2021-03-19-00-19-33.png) + +### 算法设计 + +* 摩尔投票法 + 1. 初始化: 票数统计 votes = 0 , 众数 x; + 2. 循环: 遍历数组 nums 中的每个数字 num ; + 1. 当 票数 votes 等于 0 ,则假设当前数字 num 是众数; + 2. 当 num = x 时,票数 votes 自增 1 ;当 num != x 时,票数 votes 自减 1 ; + 3. 返回值: 返回 x 即可; +### 算法分析 + +* 时间复杂度 O(N)O(N) : NN 为数组 nums 长度。 +* 空间复杂度 O(1)O(1) : votes 变量使用常数大小的额外空间。 + +### 算法实现 \ No newline at end of file diff --git a/算法/C类:问题类型算法/2.1 数组排成最小数.md b/算法/C类:问题类型算法/2.1 数组排成最小数.md new file mode 100644 index 00000000..573f532e --- /dev/null +++ b/算法/C类:问题类型算法/2.1 数组排成最小数.md @@ -0,0 +1,124 @@ + +## 1 把数组排成最小数 + +### 问题描述 +* 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 + +* 示例 1: + * 输入: [10,2] + * 输出: "102" +* 示例 2: + * 输入: [3,30,34,5,9] + * 输出: "3033459" + +[链接](https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof) + +### 问题分析 + + +### 问题分类 + +* 排序 + +### 算法设计 + +* 算法原理:此题求拼接起来的最小数字,本质上是一个排序问题。设数组nums 中任意两数字的字符串为 x 和 y ,则规定 排序判断规则 为: + * 若拼接字符串 x+y>y+x ,则 x “大于” y ; + * 反之,若 x+y& nums) { + vector vec; + for(auto a:nums){ + vec.push_back(to_string(a)); + } + // 太他妈的秀了。这个循环比较。我是服了。 + // 对compare函数有了更深的理解。return true表示第一个参数需要移到第二个参数前。 + // return false。表示第一个参数不需要移到第二个参数前。 + // 也就是说,默认情况下,第一个参数在第二个参数后边。true表示需要移动。false表示不需要移动。 + // 还是官方英文的参考文档说的比较明白 + sort(vec.begin(),vec.end(),[](const string&a,const string&b){ + int i=0,j=0,k=0; + // return false; + // 完全相等的情况 + if(a==b)return false; + // cout<2*a.size()&&k>2*b.size())return false; + // cout<b[j])return false; + else if(a[i]==b[j]){ + i=(i+1)%a.size(); + j=(j+1)%b.size(); + } + } + }); + string result; + for(auto s:vec){ + result+=s; + } + return result; + } +``` + +* 一下是官方的方法。手写快排 +```C++ +class Solution { +public: + string minNumber(vector& nums) { + vector strs; + for(int i = 0; i < nums.size(); i++) + strs.push_back(to_string(nums[i])); + quickSort(strs, 0, strs.size() - 1); + string res; + for(string s : strs) + res.append(s); + return res; + } +private: + void quickSort(vector& strs, int l, int r) { + if(l >= r) return; + int i = l, j = r; + while(i < j) { + while(strs[j] + strs[l] >= strs[l] + strs[j] && i < j) j--; + while(strs[i] + strs[l] <= strs[l] + strs[i] && i < j) i++; + swap(strs[i], strs[j]); + } + swap(strs[i], strs[l]); + quickSort(strs, l, i - 1); + quickSort(strs, i + 1, r); + } +}; +``` +* 一下是官方的方法,内置函数 +``` +class Solution { +public: + string minNumber(vector& nums) { + vector strs; + string res; + for(int i = 0; i < nums.size(); i++) + strs.push_back(to_string(nums[i])); + sort(strs.begin(), strs.end(), [](string& x, string& y){ return x + y < y + x; }); + for(int i = 0; i < strs.size(); i++) + res.append(strs[i]); + return res; + } +}; + +``` \ No newline at end of file diff --git a/算法/C类:问题类型算法/5.1 字符串排列.md b/算法/C类:问题类型算法/5.1 字符串排列.md new file mode 100644 index 00000000..b93f39e7 --- /dev/null +++ b/算法/C类:问题类型算法/5.1 字符串排列.md @@ -0,0 +1,40 @@ + + +## 字符串排列 + +* 递归、回溯。 +* 判断相同字符的选择 + +* 时间复杂度O(n!) +* 空间复杂度O(n2) + + +```C++ + vector permutation(string s) { + vector vec; + string pre; + perm(pre,s,vec); + return vec; + } + + void perm(string pre,string s,vector &vec){ + if(s.size()==0){ + // cout< se; + for(int i=0;i1){ + result+=(i-1)*wei*pow(10,i-2)+pow(10,i-1); + } + else if(wei==1){ + result+=(i-1)*wei*pow(10,i-2)+end+1; + } + end+=wei*pow(10,i-1); + // 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