From cbc415cedaae1e620b78469ba59f8d4d3266f082 Mon Sep 17 00:00:00 2001 From: vihowe Date: 2022年2月16日 23:07:57 +0800 Subject: [PATCH 1/7] start leetcoding --- leetcode/64.cc | 53 +++++ leetcode/analyse.py | 1 + leetcode/binaryTree.cc | 208 ++++++++++++++++++ leetcode/eggDropping | Bin 0 -> 68264 bytes leetcode/eggDropping.cc | 71 ++++++ leetcode/isPalindrome | Bin 0 -> 42009 bytes leetcode/isPalindrome.cc | 41 ++++ leetcode/kthSmallest.cc | 37 ++++ leetcode/largestNumber.cc | 30 +++ leetcode/majorElement.cc | 75 +++++++ leetcode/maxProduct.cc | 30 +++ leetcode/mergeTwoArraies.cc | 35 +++ leetcode/numberShownOnce.cc | 28 +++ leetcode/palindromePartition.cc | 75 +++++++ leetcode/roads | Bin 0 -> 142082 bytes leetcode/roads.cc | 64 ++++++ leetcode/rotateVector.cc | 54 +++++ leetcode/search2dMatrix.cc | 32 +++ leetcode/sort.cc | 132 +++++++++++ leetcode/wordBreak.cc | 63 ++++++ ...16345円240円241円351円227円256円351円242円230円.cc" | 58 +++++ .../345円260円217円346円270円270円346円210円217円" | Bin 0 -> 64534 bytes .../345円260円217円346円270円270円346円210円217円.cc" | 107 +++++++++ ...5207円345円255円220円345円272円217円345円210円227円" | Bin 0 -> 35410 bytes ...07345円255円220円345円272円217円345円210円227円.cc" | 41 ++++ 25 files changed, 1235 insertions(+) create mode 100644 leetcode/64.cc create mode 100644 leetcode/analyse.py create mode 100644 leetcode/binaryTree.cc create mode 100755 leetcode/eggDropping create mode 100644 leetcode/eggDropping.cc create mode 100755 leetcode/isPalindrome create mode 100644 leetcode/isPalindrome.cc create mode 100644 leetcode/kthSmallest.cc create mode 100644 leetcode/largestNumber.cc create mode 100644 leetcode/majorElement.cc create mode 100644 leetcode/maxProduct.cc create mode 100644 leetcode/mergeTwoArraies.cc create mode 100644 leetcode/numberShownOnce.cc create mode 100644 leetcode/palindromePartition.cc create mode 100755 leetcode/roads create mode 100644 leetcode/roads.cc create mode 100644 leetcode/rotateVector.cc create mode 100644 leetcode/search2dMatrix.cc create mode 100644 leetcode/sort.cc create mode 100644 leetcode/wordBreak.cc create mode 100644 "leetcode/345円237円216円345円240円241円351円227円256円351円242円230円.cc" create mode 100755 "leetcode/345円260円217円346円270円270円346円210円217円" create mode 100644 "leetcode/345円260円217円346円270円270円346円210円217円.cc" create mode 100755 "leetcode/346円234円200円351円225円277円344円270円212円345円215円207円345円255円220円345円272円217円345円210円227円" create mode 100644 "leetcode/346円234円200円351円225円277円344円270円212円345円215円207円345円255円220円345円272円217円345円210円227円.cc" diff --git a/leetcode/64.cc b/leetcode/64.cc new file mode 100644 index 0000000..1b1112e --- /dev/null +++ b/leetcode/64.cc @@ -0,0 +1,53 @@ +/** + * @file 64.cc + * @author vihowe(vihowe@outlook.com) + * 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 + * 说明:每次只能向下或者向右移动一步。 + * @version 0.1 + * @date 2021年12月02日 + * + * @copyright Copyright (c) 2021 + * + */ + +#include +#include +#include + +class Solution +{ +public: + int minPathSum(std::vector>& grid) + { + int m = grid.size(); + int n = grid[0].size(); + int sum[200] = {0}; + + for(int i = m-1; i>= 0; --i) + { + for(int j = n-1; j>= 0; --j) + { + int r = j < n-1 ? sum[j+1] : sum[j]; + int d = i < m-1 ? sum[j] : sum[j+1]; + sum[j] = grid[i][j] + std::min(r, d); + } + } + return sum[0]; + } +}; + +int main(int argc, char* argv[]) +{ + std::vector> grid; + std::vector a{1, 3, 1}; + std::vector b{1, 5, 1}; + std::vector c{4, 2, 1}; + grid.push_back(a); + grid.push_back(b); + grid.push_back(c); + + Solution solution; + int res = solution.minPathSum(grid); + std::cout << res; + +} \ No newline at end of file diff --git a/leetcode/analyse.py b/leetcode/analyse.py new file mode 100644 index 0000000..6343fe6 --- /dev/null +++ b/leetcode/analyse.py @@ -0,0 +1 @@ +# %% diff --git a/leetcode/binaryTree.cc b/leetcode/binaryTree.cc new file mode 100644 index 0000000..9be5378 --- /dev/null +++ b/leetcode/binaryTree.cc @@ -0,0 +1,208 @@ +/* + * @Author: vihowe + * @Date: 2022-02-15 09:10:12 + * @LastEditTime: 2022-02-15 16:39:27 + * @FilePath: /leetcode/binaryTree.cc + */ +#include +#include +#include + +struct TreeNode { + int val; + TreeNode *left; + TreeNode *right; + TreeNode() : val(0), left(nullptr), right(nullptr) {} + TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} + TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} +}; + +class Soulution { +public: + std::vector preorderTraversal(TreeNode *root) { + std::vector res; + preorder(root, res); + return res; + } + + void preorder(TreeNode *root, std::vector &res) { + if (root == nullptr) { + return; + } + res.push_back(root->val); + preorder(root->left, res); + preorder(root->right, res); + } + + void inorder(TreeNode *root, std::vector &res) { + if (root == nullptr) { + return; + } + inorder(root->left, res); + res.push_back(root->val); + inorder(root->right, res); + } + + void postorder(TreeNode *root, std::vector &res) { + if (root == nullptr) { + return; + } + postorder(root->left, res); + postorder(root->right, res); + res.push_back(root->val); + } + + // 迭代版遍历 + std::vector preOrder(TreeNode *root) { + if (!root) { + return {}; + } + std::vector res; + std::stack
s; + s.push(root); + while (!s.empty()) { + TreeNode *cur = s.top(); + s.pop(); + res.push_back(cur->val); + + if (cur->right) { + s.push(cur->right); + } + if (cur->left) { + s.push(cur->left); + } + } + return res; + } + + std::vector inOrder(TreeNode *root) { + if (!root) { + return {}; + } + + std::vector res; + std::stack
s; + TreeNode* cur = root; + while (cur || !s.empty()) { + while (cur) { + s.push(cur); + cur = cur->left; + } + cur = s.top(); + s.pop(); + res.push_back(cur->val); + cur = cur->right; + } + } + + std::vector> levelOrder(TreeNode* root) { + if (!root) { + return {}; + } + std::vector> res; + std::vector temp; + std::queue
q; + q.push(root); + while (!q.empty()) { + int qLen = q.size(); + for (int i = 0; i < qLen; ++i) { + TreeNode *cur = q.front(); + q.pop(); + temp.push_back(cur->val); + res.push_back(temp); + if (cur->left) { + q.push(cur->left); + } + if (cur->right) { + q.push(cur->right); + } + } + temp.clear(); + } + return res; + } + + std::vector levelorder(TreeNode *root) { + if (!root) { + return {}; + } + std::vector res; + std::queue
q; + q.push(root); + while (!q.empty()) { + TreeNode *cur = q.front(); + q.pop(); + res.push_back(cur->val); + if (cur->left) { + q.push(cur->left); + } + if (cur->right) { + q.push(cur->right); + } + } + } + + bool isSymmetric(TreeNode* root) { + if (!root) { + return true; + } + return isMirror(root->left, root->right); + } + bool isMirror(TreeNode *t1, TreeNode *t2) { + if (!t1 && !t2) { + return true; + } + if (!t1 || !t2) { + return false; + } + return (t1->val == t2->val && isMirror(t1->left, t2->right) && isMirror(t1->right, t2->left)); + } + + + bool hasPathSum(TreeNode* root, int targetSum) { + if (!root) { + return false; + } + if (!root->left && !root->right) { + return root->val == targetSum; + } + return hasPathSum(root->left, targetSum - root->val) || hasPathSum(root->right, targetSum - root->val); + + } + + bool hasPathSum2(TreeNode *root, int targetSum) { + if (!root) { + return false; + } + + std::queue
nodeQ; + std::queue valQ; + + nodeQ.push(root); + valQ.push(root->val); + + while (!nodeQ.empty()) { + TreeNode *cur = nodeQ.front(); + int temp = valQ.front(); + nodeQ.pop(); + valQ.pop(); + if (!cur->left && !cur->right) { + if (temp == targetSum) { + return true; + } + continue; + } + if (cur->left) { + nodeQ.push(cur->left); + valQ.push(temp + cur->left->val); + } + + if (cur->right) { + nodeQ.push(cur->right); + valQ.push(temp + cur->right->val); + } + } + return false; + } + +}; \ No newline at end of file diff --git a/leetcode/eggDropping b/leetcode/eggDropping new file mode 100755 index 0000000000000000000000000000000000000000..956dd45cd5f8107c312d4c04532e86896e44f949 GIT binary patch literal 68264 zcmeHw4R{sRx$f+pAR9qJjRh4UC~DLQNeB>Z)M$tjh>${5v>b+zY+%>?H3>id)mZQr zTWqzZ$~jUGDB94fms)#oXz`RD>?!wLj|!!hww8kWw4v%bYPC&NjsUZ&_#Hn1RE# ztFOGK;--qZb9mSLbI9IX35fCJApzU2shD5meeCedy!R}@gK(S23G&#s+oP-61>oe5 zujf;4W}Z9O4MWU)#edmWNBkNWw%yjgd~sX+mOs87m%8!gN+yZT_#zS?bm;tSdud&r z9bHuyZE3gLYZv?Dd*#z^eEAX|u^C@nka&D`ZSAeGrloQ0)nDW?H@@leoY?&N(ajNizca<*snt>V-(`kHd`Lwxi4JC9SoMQTMJtzHL{y@>L6oILnN{cTGFl zfWx+@Us-ddT|Q^_Jl9&v+;}XUouBW_IC)U5BXFP`nhi5a8D9^=I=?cnT(q}Q?i1&4 zUp=U*oIR^zdZpTMhsd>40t55c`DOP^d8DYF8^xB@LHTHfc`)org7faStOyiMT{GSN zU$U&x$k3`ELLb*!)==D29e#*FJWj;DK?pMv=TyH9+bwHql7}bbUM>#W?ZoA6trHt! zizn9K(ohe~-&r^)8ドルY!STK2;grN8=i;f?p6{J>AHDZ;&69B!WIIfgmc)V*c>EPN6E zI{9-j@`(H~9@azi8ドル-yD@EP-LWo^r5tZ`W&Pu;~APbi!Kp<;_2izmp&)>vrI8-Cs` zZSB#<30db)v0ctjpgaz8xd7}v3z{pfi~xa|kbee<4uqnz8~g$d1r4l55niikk%jv@ z1Aztt4FnnpG!SSY&_JMpKm&mW{?;{cv^=!u$ZgqMk7R}J-&AMqIXKkn9b;MR4-PHs zz0&HKdrqih?i&$n{i|8lcV0cq+J5M)GR&k|Z(GG>y;(!#{$Q*3;NY@e%!R!@uB5E@ z9`G60R-7^IHTTGE)3+j>`*&v9FL!5!zH{(2tG9cswVh!$F|E_edS65uM^{^rCA9TO zxpn_RiSuBV)%ys;WR>+Ex$VlW2;;=#kvnT_&*oiYx*l0QrmHi{?&$`%bJxPI$RO+U zcUe|V=jw%Box8?%*_M^V>t&WT`NzPY1*Y7acRk$oAA_y+n^!;F)q``yD%%cjVQ$E( z(dU1V=Wok%#y1Q6h}Ai_vwTcf9`f0JuC<-MyP@MS&ObYP^uccEoicQfw6<@?bh;y|&k^sb@f^c` z-aQg&o#v+1C^9n+=AW``E{9AAgE&vQ4SL=Lc`;||Fl2Z1hPa650W+G&gkd?N3Ou>o>x)NH=#aKACw#K4%WkddoacP z&XBOwE#MERYskMD*RLYac+ZA9XyvF~(PtbUj`BtwXu&f~c;_(hrac`TUe^0hh{vxh z)zKZ`bwf8}Lslp^P5re;Bd9#l2d7y>=9^RGpB7Zo_dbi?PWXO=O&}SWF z80f*tH^QMl!KZfYeI56Y+*ZC7vPhXyrW0Tft{qY)_`aUa(8(dh^9bTR2zk#ABffJT z-vNJ%GyN{~dw3*e9rDIbDT6M=PdlQ$y%w_8qb`1jx_AWTaTepi{m3cS{mO?=>HT;3 z1;>|5xiGzR5f<-@a(jdk>m#>a4LfvYX8Byt@-g)ZxmAaq&}{^DxjSS%!?2a$^L#&K zbL7D_?VdWLuKtN~LRV~;sMBi@-n9usPvvf1q-`B7ck9EE+kU*Y1#;9;mJI6#>@C4I zJo$j^EQ42}3&$tW-cbg4x8ur=^zoj_$?zkI@+Ol}(_p^;#5Mr&pzb3s zqu!^9i|su5teZ~99ドルazh>g095PZwt0Pt>ztKP;QiBhPq$yS@{$u?#msXDfiUjXP8a z8-ot#$vyhkZpdiCE=)ar4S7!0ejI|`J_P=;d_3zI>;F3$hI`*1&g?Tu*)xBePzNok zKbuf@Xs;hhUWnOdh4Gwzh;^LzoVt%ZziWnrZhD9zrzafiFYY`39`)fh)Jy7)@z9TC z!;kF8bJH&-vmeUJI7T~Rk6q??FPo7rC-}m#o*l`u?w{h^|4AqNex@w6Kl&=C4nvkr zgRMPyx4XW>vZgTK)D_;P=CJ&E?f1k?kTdh?v5E}^UYb$_0;ZKi%5xsku`vJZzi**2hGT!X&zHY>OI ze)#|Oj%~mHg`eLAACLFUNYf~bUEVg|3U}|W>iorMA|6E6RM%$l6 ze(LGsc)CXWg|MbCVf>Cifjv6sLC`DuYD|la#e_FOp6BK%a0B(kxGIYqX&d!kpsh!pL6=*|Z(t*unMlhW|-Y7CPREKp$+U zSssU>EBe|FjysXp^FC&O1iHd~>lEu9>UB1Jpwov#I<)b3(rvziu;ep8x4}5u$g$h@ zR5nN-7S~IP{8B#Jdk8-Fi>Mp)UuGHH!n9LxRab8MhMra@_oWGP`ogiSewyv`WoEwu zeWT6&7(+ddxEQC7p=Kg)@TWOWTY&rK7^)S|koTlxs7A!&*MZjEeCUV1I@K6zCF1qh z>G9NQ5?gZO)H)3tS%`G~W2kw|6UuB4;^i3XIh;|Kl8&KH%<9;c;t0USTh(#!`>SSn5v5mTW9FjdDU)I+og$Y%Fz*dcpjvU+)_q z7zpA$wyuvK_C1g?$M@CqfT-5mRn*wV~&fS6mG(}$jHb4jWJLo@=}Mx z90N^u>J{u7dDJn`sd6vX7-%-~=kLR4KaOJ{jlY_aZFq z%ozirpM-v|Q*WIy5X$>&#KEdo?)wI-`VL?K#zM;j4j@QZ7|Fb=+(Mo$U~t}$KEX1liAiK%XdaH z9Yijgef>F(4X5un4?!E@w(Um061LFaezVz552XL>v|sRV?pVoa zWBO5lbnKaQ{8~=GChxVms)!`mf`(U-h&^Le#|>D z&aWcOA^4>$*#_g9^WUM6dkzo691fmchG+4<8p4?4_gdmg`e4$&8tqi#jopodem8)5 zBx!54|F#2hnf*6sTn^vbU5EY%{K-+s&bHV;wwf$?HQV2(5SOOS@lYP}av}1?v4D;{ z<1+0^-p6_re!fkzdstdonacbd@-1ドル^ejb=!kgpzv`%hwptoth|3&o2m7_(30%tdp4 z4DY-6yn}I|E!YmbRXOR~`(#S&KO}pnlC(dwD>>Kcf51-IXT2BtQCs~Qu9-H<*zjfz zjM;X$^{M|hZ1!_>{@3H%lh}aHRnRt_cMeic5%@WlJ=^05-pkyJaU6ASp)9F)-VbBE z^aS+yM_hByBHs@*1F@>7K~w? zvO|8;jaT37J64ドルVp-qL)OqhFvJ)DPlJbj52Hl|}(woxIp?P0X-^PIZSr;DE@k%{)l zemdtMXm<}ijb9^}kqa|ypx2k=rwt!c3-yrtpl>(?A8`%qrC`o&T=r{R3@KMx#r_Tot=eWn>xo3`Bd>~{LJEknC zV=^Y>yWx1fPZ8Eayzww7Bd1-%`^Hy&@7KSKIb6O==bWlDKaKb0yvBHCdwebke6x&I z_kF&^(D^42R?GBu`aI;@V@IpK{dBekEYmHp`*@k6zr9Ju8!Th`gU5+k-=&=WeRTG@ zzhQDvZhW`Ja*OxT5m&sAj&lBz86Ng=FEGP$OneA^_D8Z7_Lya@efG~IoTtw&W15ドルr zwBHslN5h`kKClnn**3O>I_Ru(-7ドルl?`ha}mvn+Rw3-ZA_wz=(hC44`^F)`W&XRQk7 zRG^dX_*m*R)Beo1hih8O7$@>XeI)B=W6pltxY9CbosGAwymoVFtTm0Y9U8lH8s~K* zXVWiV@v=3V>G#u&jpcwIQpe%Du-hrNb5& zVTM_`mX(`bYK_-8=4Y>pKWF&yk&-w*8uF%B9O-X*k@>l|TdOp!n(Spp+`}x0S(ROH zRToHp{IcXlNuTGZTT5#$zw}Z;(Y&_Utx>x@x9P&%3z{y- z1t;Jg;+8svQ=&XFR-h4XHlyKr8B3Gv-H z??mT!KhF1I;M9%tzG>j%4BwA$F+Xdq3Nb5Icpd)aXIbGbcrYW|3crLS7YcZ0kQHvh zMBXbWSfRI1uuk|0*Xssbp-phw`*D5~=jjnEG(Td6yU; zIFEw9*TXUF9ASm_;d%sK5Ue}J3g?_^h3ij+;HO#P9hhXBak>>+a5}C}hwesNp?Z8! zyB6n-IFBBM^hQBnI4>JzWv|8cK3sR>+#^OWXJi1Zk=m|R*eab7&g|iIf!G8K5*3eK~3&&`pF|64t*=k zXZ(e3t*&xdgCBYaa0I#TZ$t-e6}LK^QpK6&OpJb^M%$L-f26nVn`W2HYi?NH z9&2tYEW&mj(bkHkOQ*Lsw^YPp-p7*~V@-N<*1yyfwq00mvb0iab=vzdur>K2wdhlRPb5*vexF6c0;sjY5Oue+S=OOTCu{3RQOZ4rAR|`+H!E0)Ye7YE9TCg zS6~;#>MK0K+%zirtTHxxo;@wT8A)ZV0>9bw3hl~ylWbg;VCxZ^n~nHVk|>g}Q!q+m z&23JurYw!NLr#frUVC9-L-W#DotvNXqKfKSb&jxjQe%bYfONyGBCWdlgBp{>F#X173#>za|i zWQWNYN1N&!Qpn1}vi;erv16ODgBLwH8ga?O2;# z*V0lr)n3xvy0W&l-j20LTe*8qWev1586q!-g;o?(FH{!(Il|9tpN4>_X|?T9r>fLc z`t6E&thqkf-TH=Vhtsr@aoKgNYHd}G&7FB#Sj+Xv;^@*?lU-NaUbjqdEoqHL69YPx zm_e4VT4lpOv^6)?HpJR*u~!sWc4M@$uH_c`HY;RfU!SmTjcBZmHCdNf;YQT?RnfZT z?NNJKw6;FlYF&8KY^#VHsAO3^m*8*Q^;kE24ドルUTyonk1)q)$ zfEeF?!PfyZz8q|{!|->?bM8|`{DeH`epSQ=1asdi;w5j+wbGBN(q=$qkWEficJ_-leo1V1g9`-(CAe!*`F{y=aJ_NLY*{1`CfUoZIg^86XWqp?92`L76GB$)fX;kLC!@H)YV1$PM^hK;qz=e}?ZUo1G1 z=i-|Lmk7R3@FKzg3{3gBpB(vNY|zE{xUU@XEWzAgj`&-^4FAkUF8;kd&%M~i*JEQZ z@)rpH7s1;EkHLmteBLd1o#32&m;bEbGQlTeV=#t)M({$x2L(SVIC6>0|5$K=;2H3f z&xM%#~YaUP~_G+9Q+Z_ z#vc=tul>d8!dI+(xKrn+d=rzu4Stf(t{1*ylW$`3wLjb|e8tK)(@U1V_MeBM9i;vhD}R-fdSCh`cI1a& zXV|laul;Z3!#tcHG1E6O`Px69DSXA5^0hzzW#KDUe!Bc?|Nj}`D^~tmpZq4K{5oDZ zBz(onulDgxO#Z0RuKrF#zk~W$to-#pzKO}#@yQI~D^~svAK%2}>v-l%!dI;P1|Q$V zonyYLk&KgY*6G5I=PdR_R6l|RhKH!=A-zWPY`ij{BL+icu4G5IR++) zYkcXOn0y_-Jtcg_$~W`N^i52@j`!XWzGCI0Idgu*T@5--O`DS{_(%13i zD&Z?uK5l!`H!;)K@#h}lE6$X!uUPr%lV&9ドルprT$DzzK*9K5WZsN!!0{MV)9K)es-=a{|mxboGCwF_!0EenSaH~f5J)K zO@ry1nCb5q{*}U4tb8-S-@)D;VV{tI{9_J zWQFh*E8o;N^=D$Huk$P47rtWUr%PYwV?GeRV&zAC`8P4s*ZG@^F)pM26)S(fk8fh~ zb-rh|@D(e6fsb!u@^yZwUHFQXZ`#{z+%z%yI-m4_@D(fHEN}8nOuo)PeNXs`m2cV` z`6eb`=c}FKr>Fh`6&+ZVuV&9ドルiCX-+1 z+q#6WSo!JF*ZH~s5WZsN=lbl&#MIvm2*|M0F|KF+6)WGg7s_v9@^${NRrrdPpDzD8 zU${m1ij|)(|D7T~=Ork=V&#|l@^50w-!1$w<|)wmtb8-s$?~ubmzn1&vgux9u*|h- z5x!#Or^~<2ka6@1ij{bn7b(aqnsy&6{j=~de8nciBZ2#N_LIa2Do?SpJHYpHBZee|)9z6)Qj2C%=iA zzRov)QTU3LpU(bte!5Heij@zwI6q?M-^5H`=d(W&zGCIy?&F)7e4YO;!#o-Fr&#%B zc{68zrIg+Son&SU+v?YnEVBp zH(=O52w$=CH~RP{CSTuQT!Mii^RHO>JA8Z-ldtbP?i9XaUB0#mY}te`|#QrtlRje-Yy5kC^f=BEXNB@;@W|iI~S` z{uT3iCiy=o{MEu&to(HKSKn{#6~5w3`T9QWTo@MRSFHTq%q)Jy%)g15e|>+}D161r zPv<}meh-v^nz9d>r^~;-pBr_V%U7)YQI7O|@|&3QFTl8$VLu~$#mY}7zrO!_O!$hG zpU(dDePQTwSN=GLOiX)$Pks|qeto|nbm;pShl^3$cS??=BXe8tMo_36*V)StdjeNXs`m7mW3^!@9kGFN`Z%1@VneP6pm z_==UEF8>EHZ@{o!!dI+(+;)D%v+<|qg>nC-?}LY2>B_HI`RVen?~gw#e8tL7mw$cV z{FLw&D?eTS_5F1ARj&Msl@GV#{D_%<6smsfefcylsfhrhak%2}>-+DY3SY7E;ohAe zG1E6O`TD+mWVtK9V&9ドル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ドルssg+bZ@*I+{3PK;Wbtmo79D!Jpk+Re7-}#R&!P;G9ou@4HKN^RHn~E z#?mfp)Qcs*KH=e)Hs+o2+>;lcJaKT=i`RT9_t~cpp8LwJKV2|vYUw?B3*RU|`{DL? zKKNxBcH|2$?^^tWho;W@#rKDeUUL1^&R_O^{G+Yc|7G=-riSe2e>v{q z$f&12ckke97ae?|?dETM@bB#lqG!&j+WP61=N^7y(AAecw5smOJD+%Ze)GQ^Ua~X$ zmwWcy9G)|O(9zqUx&79=fBo!NX55qi?c;qua!YpSeRtgT)W5Ah?S^4r{me-xU;Nrv z*Yxaqu&Vr0oLCR}^pmh+xmyLaU|kIlW| zTc5k@zi+(Z@)r)bR8MSwykSGzN544p)GKD3G5znuU;bv13S(bz5M=zjSaao zd)umhuyW#@i@x{31J=cRYqDRscFR+_wcEeb^7&t#^SuKXt(cW})vzai^ZufS%JWXS z_`RwPlP@h;_xgM9Uw2R8ueO}N`|-wKMuu*=-rD!gb2qO%@S6wz{ +#include + +class Solution { +public: + std::vector> ret = std::vector>(110, std::vector(10010, -1)); + int max(int a, int b) { + return a> b ? a : b; + } + + int min(int a, int b) { + return a < b ? a : b; + } + int superEggDrop(int k, int n) { + + if (k == 1) { + return n; + } + if (n == 0) { + return 0; + } + if (ret[k][n] != -1) { + return ret[k][n]; + } + + int res = 1 << 30; + int low = 1, high = n; + while (low <= high) { + int mid = low + (high - low) / 2; + int broken = superEggDrop(k-1, mid - 1); + int notBroken = superEggDrop(k, n - mid); + if (broken> notBroken) { + high = mid - 1; + res = min(res, broken + 1); + } + else { + low = mid + 1; + res = min(res, notBroken + 1); + } + } + // for (int i = 1; i <= n; ++i) { + // res = min(res, 1 + max(superEggDrop(k-1, i - 1), superEggDrop(k, n - i))); + // } + ret[k][n] = res; + return ret[k][n]; + } +}; + + +int main() { + Solution s; + std::cout << s.superEggDrop(2, 9) << std::endl; +} \ No newline at end of file diff --git a/leetcode/isPalindrome b/leetcode/isPalindrome new file mode 100755 index 0000000000000000000000000000000000000000..7200c15589b417365e7051680624c52d7463ca22 GIT binary patch literal 42009 zcmeHQ4RBP&9p9G=5pCcb5P{ zHDhGdk+w!drM60d+9nRppySvuRm)7QAEVW#wG>-zfztM1!0}_I5~nf!{rBx2dzWA$ zk+zPzbc&tVmale1}>bMH42fQ{U~UfUe79T>TNFXPR(NiPeHbfRKhgl*19;QoRF?Br^0DW z5ドルiJ&VQN=0WU`KA8VS>k#oHQV$*gpJ-QRHZ^@mOyqKmx7LVHDW|5Pw&nxuhiu;7skgnS_+rn$@aKN;~O%W7K z*B2N1HVY+$({-r&sb9BpJxdmO7n#+|>l&QibqlA$m4~#e3z-zD@3RrXTSVzr;IZ}H ziLyMn9eIJ+Sx8Ki0N0a#TU%4N%(J9M`dmkvUBDE+kndc{9`270WaW%?kbUGeFMx=- z0>5w@>_$Q2hWF*|jBy|N0b`Xj89NvG^@tRp2 z_~q^6n6U!1kMz*EQ3KUmf=KtcKe%>hlGdaxu*ZM-Gy|Fe&46Y=GoTsJ z3}^;41DXNNfM!55pc&8%Xa+O`ngPwgXNZB30b_7@!&!a9okmxWpA8;3mknX7$vv0U zf4%F=jCCJ8*FAJ#C+m94VBI~||X%ow+9t!p@#f^TdIvY=~@JN@b_IhlV#SMm>zzGg3`$%j_F=8C?n3dqC9N z>&iXxtAW}5A+!&B+TQ8yoZa6$aASX8=Z*bY#@VZnp3A&_z>g4y?UxzntR`FM7|cud zY#(^2e*cw8CHHizh&7v}iT=yRAjhavTvZk=}dr{Bvk&z2V>AOhL*ZELC z_PlX@x2pP3CUKF_N4891Ysgm8r`mhXStspUDfGmkhqoE_CeTl0a~Dda{hYRf!9n^7APF0{5P?!3}ZQ!C-en;64CfC`7%eYyJWF!hEF3 zFR*DVhwwsyNBKu5`ION&Tn(QZ$nEbLF#C<3j^bm1jpddg)hecoby(v;s&sxgiw%)3 z>a&E)J;Yen-KQ!q^}=^PQYY!dey{GVZ@IzS`gapkx6N|eerh{N2K&RhStj}YN0-Am z&VLHlUXWqEHV5n8R~_8X(#3rKJW87 zrn`sWOB_@GP(P*ETRny!Qyz_H*f*B%(DRVmO@2Xr>F88^ag078eY`AhvobEns2@JJ zJNqomAsM;*c={YAJxxi^P|}}Q(zBHGY$g3AC4H%qo};9Tl=K26{S76(*h!C!80WKm z#`3e`tgzsAJPEyc>@&6~FXRgs=K1nkgU;3O3;Ti#^6GI3`JBDD7o!~QqlGwzsI%9V z@2kz`*_kbFOaRz}i{}tSl5N4ha|(nhpZ1N@9^UiV=Ww4iu#8@)%EzFo%w)zBxbDYw zD@flpg&Dua^)Rl-=;dN6GlFmm1jk^O-N7~B%5A`vbYrJ&2h{K@#Q7EC{OX8jcVJ%P z_-t{-{K2ua2ドルq%$_6?IBj3s`BPx32#kzdij6gv2?{?QC*1~dbj0nLDBKr^5j& zGy|Fe&46Y=GoTsJ3}^;41DXNNfM!55pc&8%Xa+O`ngPv#WGy|Fe&46Y=GoTsJ3}^;41DXNNfM!55pc&8%Xa+O`ngPwgXPALJw7nh? zhj*~^5uLLDkU((u|2t{=x4&iJX*W&-aLXJ=E&~S$&_60Zd<|j%@fo6bh)*k68q9bk z@!AY#BoL!6X1sy;p$jsZEMqa^D%6O7{M~BuwFToV+QL?C#P17Q$Xn_B!}TkySX+qj z^%Zu^7Yw(BYzbn1+jc-a5{#_1q8wD3rX7o~Z?)_Y6|Adlhy>f>b|hR{X2nUCg#?KtUj+H)$iC!(yn)U#q)!#s1+ zRxK&@w5v+yIwVHGqU8$_i=)l)1Y@2?MX1~#X^Rt$X7jprW~&vAMR0D09ba#@mr!oV z7h4^LM^IXHFr#h)xo|#{O<@@(%msvmfe_vkp%&9xxzhrwmf2$y0#=k2t+d4bd$Hdw|PbB`B|@txz23|Hpc5ey-?Haln}-S`9yb6ovB!}0RlQ1YHQ zb7dyz=jC?%ys#EOn{f&kLU*{=D1XgWTTqf;UQn2yvoXK6pddddKWEj#{Q8`nLYxi7 z!*UQZ4FmouoGC)%{sDoXt#a_+1g>1*-~t>BLghCL+%E85fnO3hA@C&_&Qv}Jhhvfc z?+IKfunPx^(EVcquN1fv2UJmcoL22ドルe@EaH{k4m6?iy9K^iV21No$ezCooFi}u2cJ;+0)d|s*emcMfjb1Ag#%Ki zfg?J7NEib?)$QU5U^FR_%zIdweHh3Z!^$xHvL!9g)(zr<9y?62k0c+k-+ z$!81yx>v|cEaeN*P|7RgDv6NTs9m{?> zUnPXR#8SRCt$r2r_KW#v0S-js?H5?etNlgwtC-~FeAp%AC7!6foIj5Ud5NX`c(lC2G1V`h zXAcT_iKYB_{K@Cv+d^LAiOS38Sj_gj9|0$xX z1CZs>_s6I8Lvr*d4!)7_^)tcm=Tm<0j{a1`=udw6uko-i>ob(r7bf>TUb7_ZNv;zt zn~bjVn0>RA`c-~f3l8==kF(G)DQl`|6~+uk!p*{@NogycheZM_&h?o}J13_UK21tv zEs-dGPqHVqR+y$g5^9ZFv6vMwTYYx4hSoJsi&ZorYPEW>_Trh>WJhE1R9ec)M%86n zK`S)r3Ty2WPig3HV1TR?UdE)`%UBThUKKBi3Y+z55BOg%6(W-!b+6H+t9^ z)Bl?eE*GtqOPTe4PiaXqFXCCDu20rh`2qoQ_DB=0aMpXx6%D16Un;CFOPS-u6nBQ0 zuP)^y1`ZW)mX!J8sTub*dm0v*9?x>Gx!hZl(x@|KN!iD>q_(0d5?$+y22Lr+?O#E2 z(EO+sinLppQ<|)(74};-4p~amor+=sh3pzzb=75995+khbai~e#mamk>_~mlsI^Nm zUzK`16H}Zb43U&YY0U58NEp6vx7)s;X*bo7=F#sqTyAM~H5QQlR%;yI(ipT#Sn7$)K^gyVe(y0a&~&p84LjRjpB^0Zd2dN=j3TU z5S7=Jl=tyTy-&$^mx|;{`lRjDFEXir_xitjkx~DcgPtZwO8!xBQjVlwa-2VVrhf*W zs`vFvPRg|VfA^9zu|H7jS0VZT08C^_M2v;x7uLkySU#1nLbP z_tke5{(QXq>z+G&`QkOdd2!QEZn&(XsQkOn-+IlrXJ5Fj>ZRVtnqA(ankiY|yy1+2Jao_&XWE2cK&78zq{UdU3tki`_QvrIy#>I$=;9cx$f~J&pg_j*l)hM@U`Z^ zzNg(E-uKM0W4Dwv*0wBl?QeSc&IR{ge9JkZ#9!N9|JSa$YYt}ayZejrV}Jbp&NWxe tINtqM=VQCpX5aMW+}>9fZhUybbyffPXZx-9Uq9#m>4zUX^5&1P_zxaUi +#include +#include + +class Solution { +public: + bool isPalindrome(std::string s) { + int i = 0, j = s.size() - 1; + while (i < j) { + while(i < j && !isalnum(s[i])) { + ++i; + } + while(i < j && !isalnum(s[j])) { + --j; + } + if (i < j) { + s[i] = tolower(s[i]); + s[j] = tolower(s[j]); + if (s[i] != s[j]) { + return false; + } + ++i; + --j; + } + } + return true; + } +}; + +int main() { + std::string s = "A man, a plan, a canal: Panama"; + Solution ss; + std::cout << ss.isPalindrome(s); +} \ No newline at end of file diff --git a/leetcode/kthSmallest.cc b/leetcode/kthSmallest.cc new file mode 100644 index 0000000..a7cc274 --- /dev/null +++ b/leetcode/kthSmallest.cc @@ -0,0 +1,37 @@ +/* + * @Author: vihowe + * @Date: 2022-02-15 08:38:39 + * @LastEditTime: 2022-02-15 08:54:24 + * @FilePath: /leetcode/kthSmallest.cc + */ + +struct TreeNode { + int val; + TreeNode *left; + TreeNode *right; + TreeNode() : val(0), left(nullptr), right(nullptr) {} + TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} + TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(nullptr), right(nullptr) {} +}; + +class Solution { +public: + int getNum(TreeNode* root) { + if (root == nullptr) { + return 0; + } + return getNum(root->left) + getNum(root->right) + 1; + } + int kthSmallest(TreeNode* root, int k) { + int n = getNum(root->left); + if (n == k - 1) { + return root->val; + } + else if (n> k - 1) { + return kthSmallest(root->left, k); + } + else { + return kthSmallest(root->right, k - n - 1); + } + } +}; \ No newline at end of file diff --git a/leetcode/largestNumber.cc b/leetcode/largestNumber.cc new file mode 100644 index 0000000..8dace11 --- /dev/null +++ b/leetcode/largestNumber.cc @@ -0,0 +1,30 @@ +/* + * @Author: vihowe + * @Date: 2022年02月15日 16:51:38 + * @LastEditTime: 2022年02月15日 17:09:00 + * @FilePath: /leetcode/largestNumber.cc + */ +#include +#include +#include + + +class Solution { +public: + std::string largestNumber(std::vector & nums) { + std::vector sNums; + for (auto item : nums) { + sNums.push_back(std::to_string(item)); + } + + std::sort(sNums.begin(), sNums.end(), [](std::string s1, std::string s2) { + return s2 + s1 < s1 + s2; + }); + + std::string res; + for (auto item : sNums) { + res += item; + } + return res[0] == '0' ? "0" : res; + } +}; \ No newline at end of file diff --git a/leetcode/majorElement.cc b/leetcode/majorElement.cc new file mode 100644 index 0000000..e24ee1e --- /dev/null +++ b/leetcode/majorElement.cc @@ -0,0 +1,75 @@ +/* + * @Author: vihowe + * @Date: 2022-01-21 09:04:55 + * @LastEditTime: 2022-01-21 10:39:02 + * @FilePath: /leetcode/majorElement.cc + */ +#include +#include + + +// 给定一个大小为n的数组,找到其中的多数元素,多数元素是指在数组中出现次数大于 +// floor(n/2)的元素,假设数组非空,并且给定的数组元素总是存在多数元素。 + +// 1. 排序后取出,O(nlogn) +// 2. hash, O(n), O(n) +// 3. +class Solution { +public: + int majorElement(std::vector& nums) { + quickSort(nums, 0, nums.size()-1); + return nums[nums.size()/2]; + } + + int majorityElement(std::vector& nums) { + int candidate = -1; + int cnt = 0; + for (int num : nums) { + if (num == candidate) { + cnt++; + } + else if(--cnt < 0) { + candidate = num; + cnt = 1; + } + } + return candidate; + } + + void swap(int &a, int &b) { + int tmp = a; + a = b; + b = a; + } + + int partition(std::vector& nums, int left, int right) { + int pivot = nums[left]; + while(left < right) { + while(left < right && nums[right]> pivot) { + right--; + } + if (left < right) { + nums[left] = nums[right]; + left++; + } + while(left < right && nums[left] < pivot) { + left++; + } + if (left < right) { + nums[right] = nums[left]; + right--; + } + } + nums[left] = pivot; + return left; + } + + void quickSort(std::vector& nums, int left, int right) { + if (left>= right) { + return; + } + int pivotIdx = partition(nums, left, right); + quickSort(nums, left, pivot-1); + quickSort(nums, pivot+1, right); + } +}; \ No newline at end of file diff --git a/leetcode/maxProduct.cc b/leetcode/maxProduct.cc new file mode 100644 index 0000000..39c322a --- /dev/null +++ b/leetcode/maxProduct.cc @@ -0,0 +1,30 @@ +/* + * @Author: vihowe + * @Date: 2022年02月14日 16:48:38 + * @LastEditTime: 2022年02月14日 17:20:05 + * @FilePath: /leetcode/maxProduct.cc + */ +#include +#include + +/** + * 给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字) + * 并返回该子数组所对应的乘积。 + */ +class Solution { +public: + int maxProduct(std::vector& nums) { + std::vector maxF(nums), minF(nums); + for (int i = 1; i < nums.size(); ++i) { + maxF[i] = std::max(maxF[i-1] * nums[i], std::max(nums[i], minF[i-1] * nums[i])); + minF[i] = std::min(maxF[i-1] * nums[i], std::min(nums[i], minF[i-1] * nums[i])); + } + int ret = maxF[0]; + for (auto item : maxF) { + if (item> ret) { + ret = item; + } + } + return ret; + } +}; \ No newline at end of file diff --git a/leetcode/mergeTwoArraies.cc b/leetcode/mergeTwoArraies.cc new file mode 100644 index 0000000..1675fa6 --- /dev/null +++ b/leetcode/mergeTwoArraies.cc @@ -0,0 +1,35 @@ +/* + * @Author: vihowe + * @Date: 2022年01月21日 10:55:44 + * @LastEditTime: 2022年01月21日 11:07:37 + * @FilePath: /leetcode/mergeTwoArraies.cc + */ + +// 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n , +// 分别表示 nums1 和 nums2 中的元素数目。 +// 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 +// 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况, +// nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n + +#include + +class Solution{ +public: + void merge(std::vector& nums1, int m, std::vector& nums2, int n) { + int i, j, k; + i = m - 1, j = n - 1, k = m + n - 1; + + while(i>= 0 && j>= 0) { + if(nums1[i]>= nums2[j]) { + nums1[k--] = nums1[i--]; + } + else { + nums1[k--] = nums2[j--]; + } + } + while (j>= 0) { + nums1[k--] = nums2[j--]; + } + } +} + diff --git a/leetcode/numberShownOnce.cc b/leetcode/numberShownOnce.cc new file mode 100644 index 0000000..56a6b3a --- /dev/null +++ b/leetcode/numberShownOnce.cc @@ -0,0 +1,28 @@ +/* + * @Author: vihowe + * @Date: 2022年01月21日 08:49:30 + * @LastEditTime: 2022年01月21日 09:02:06 + * @FilePath: /leetcode/numberShownOnce.cc + */ +#include +#include + +// 只有一个数字出现一次,其他数字都出现两次,找出仅出现一次的数字 +// 通过异或位运算,出现两次的数字各位经过异或都消除了 +class Solution { +public: + int singleNumber(std::vector& nums) { + int ret = 0; + for (int num : nums) { + ret = ret ^ num; + } + return ret; + } +}; + +int main() { + std::vector nums {1, 1, 2, 2, 3, 3, 4, 4, 5}; + Solution s; + int ret = s.singleNumber(nums); + std::cout << ret << std::endl; +} \ No newline at end of file diff --git a/leetcode/palindromePartition.cc b/leetcode/palindromePartition.cc new file mode 100644 index 0000000..749bd86 --- /dev/null +++ b/leetcode/palindromePartition.cc @@ -0,0 +1,75 @@ +/* + * @Author: vihowe + * @Date: 2022-01-27 11:21:07 + * @LastEditTime: 2022-01-30 16:11:09 + * @FilePath: /leetcode/palindromePartition.cc + */ +#include +#include +#include + +class Solution { +public: + std::vector> f; + std::vector> ret; + std::vector ans; + + bool isPalindrome(std::string s) { + int i = 0, j = s.size() - 1; + while (i < j) { + if (s[i] != s[j]) { + return false; + } + i++; + j--; + } + return true; + } + + void preprocess(std::string s) { + int n = s.size(); + f.assign(n, std::vector(n, true)); + + for (int i = 1; i < n; ++i) { + for (int j = 0; j + i < n; ++j) { + int k = j + i; + f[j][k] = s[j] == s[k] && f[j+1][k-1]; + } + } + + } + + std::vector> dfs(std::string s, int i) { + int n = s.size(); + if (i == n) { + ret.push_back(ans); + } + for(int j = i; j < n; ++j) { + // whether s[i-j] is a palindrome + if (f[i][j]) { + ans.push_back(s.substr(i, j - i + 1)); + dfs(s, j+1); + ans.pop_back(); + } + } + } + + std::vector> partition(std::string s) { + preprocess(s); + dfs(s, 0); + return ret; + } +}; + +int main() { + std::string s = "aab"; + Solution ss; + std::vector> ret = ss.partition(s); + for (auto item : ret) { + std::cout << "["; + for (auto i : item) { + std::cout << i << ","; + } + std::cout << "]" << std::endl; + } +} \ No newline at end of file diff --git a/leetcode/roads b/leetcode/roads new file mode 100755 index 0000000000000000000000000000000000000000..f403f96e1d27e37e03ed0dc707d3c40ea7469f74 GIT binary patch literal 142082 zcmeHw3w%`7wfCMRKtNQ~C{z)mrV=zt5(0!uH5j5qBBl_PDmo0wKt}R14?wYPEVN>^ ztthqDXHZ&$#n!gy4J}kG+G1;O#agwk+Mrww)!wR~y-lo?@4xn5Yi6G_XEGCl`uo0n z1}10z=j{J}tiATy?|pvv!QcKpQmKH#Ck@|Y@XZ~n)K}V1qFd@y_|C>R7_6Lme%WPZ z^Dd&h&W|QLZ^a?zR5>4Oe!KIYVmt)5={t-c2ZOEQm8}eLar^gVzDdkN ziZniiDP7S|hWKpm1cNQDZHrr?kKO)dUt|1h=R^{={mW$kAVd8L1|toT)?nk3B`x7r zcM0`*4ドルQmrF3Xw7NPNURfP(Y7MrA7Q6l1$o^Gv{0Q6ri9d1;2CG|I zn(~U2L-G12q2ZQ0- z;F9K0ec0S}`}fF~jDM9(BFtXf-b8K zYeKCd^Nju`@=x@Q{1+!{|1!a+B-%yTPNyVa_>@j#KPt-S&MBK! z9wi2}KPoCP!%REfT*&q`JuBNj2Bh)d17y1bitT z$K1O3Q+K^skheW>&Bfc6oze+m|cTD>51D{-^kNkNO3AaDQ z%*U6W>3mFo1X&x1#Rc)HKK=AF3(iEOB8zoAi*5I6JW}p-KmVGR)^Poq=Q0JZl{yt) zickB|&q^~<&^*t3(>$}rS`u4Ayxe0F8 z?MM&4kjQOuTIz1Un4Y@Zmxp+`ElopwGdJx|Pg~cqb9`6l&R|!$QjbhLyku);VED4@ z1FEV7SSy!`kUbdd921nYf;$)ViQj>-UW>>C03lTXO?y>jI^+wA&qO-G*b-?!|cC zv3gwZhV=2hkC%??>MXsttLFsOXZ%y^>hZki1n>jut&@kVsttH9&zkTI3(!B?k$%sN zP3c#3J%o5=s`hyk10$C8Oj27z>8h%8r`jDjO0APHyN^_TE6C4u^-%YbC4HM-SG)He zqxw2mkL|r)?jKXqwsG~X|yB{4mFna&0*_#fO zrWxHq+V`(Y+q56L)UkSe?;gadV|5VMlDRkv%Vue*t-FK?q5~9=>TM=br#P^ulFHMxkF0&CI%?~ zhQBpDt^GN5_|tbDDCIEO9sGr#ex{OG8AE6v?V!yd$= z8)?`B|ErEt>m>~xr>NbRk0jlrxLa~?@rk<=?)iew$|~_l^x~~{mt5{8mfqo7&lw2u zQKm~t))^>Ifpw3gJY_>KRAq@NGudk047k_jCtt0bF276Ex~cg6_-d5D)m;9LGUe|A z=(+f@VY1qt2X`Av)$Y^iIv@E&*J`!w%qDc5PgJWmk7K(gis|uhvsu zYyDcJ*1^B^6pq#{g!wvjD;wot|Gy7>TbF@A$=2bja~_p}hp@du?)4n0wqlP!7Rt=g z^n2ftC0ps)aFqQ3I69tHC4D0i7ubhKPFhgXhb;pr$MAdAEa)!l&`xjNCH>3HDA782 z=Hbvw$auIi`t=&(LHTtl?nC|$ku9Bs-`LBNMfX2v-Jg%&iSnJw%7)VMU9TOZw!V%u z>^%(S6na8oZzv7oehKcE;C{*0^AUGrvn?G;pbI^u+ktalaOi@|Eu{yxNtcJ=0hFEV zuk2NU;Wy0=w9gBisE)}U#kLE65#9n!diE$^9e!Ifl(InO;5EpiW0=~Fy(a71Vbdf` z%C{aoqwu}bBzEC7lqqtD^17AEILadI8EoN$TozZy>MqS0t+v{-B)ifx8XN_?30Y!K z+SVS(Gcyxc$TV}L+M2BX!={khY)ihbF?>hVphAnP!`u$^)Cm1HB~Qh9m}+*n*K9kJ}K);H9D zufgu3%=K#fnjY-M-Wj9E@I%KDayy>l3XJ_M`s!tO?f81dQNo}y@qbYFko)mUq1|D{ z&m--&U!+gOCp)jx2R|JA)lPdzVNm&r$--*mc!iaKkA0OoudtsgKL0JdD*4|5xz2%G zvIkUG?SYJ`%tFUCCSAW!W2$@1y-d_UJ!lhr)^>+MMJNlL5aWYuFyk*4es%_;w!QYFtA#Xj~o0MLKI2;bY z9Ja+He}=o=3?N@efJ=2hr3LoH(O&2;Tpd4@XKd+88oxLd`m9qn(*?;c&26`mu{W~z6| z_TGnkT33*dlt1sG9;bFD@pFeznUCql)6j2se*;`y7bKFM*hSkmP}w8BBzfp~A?(24 zuKWF$Rr_;P{%t4ドル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
EpeIoRe_91Nw{U)rx*Y)u5Oj;+e zmSvvw^qth+HMYjGXC7rF)aNQk9yU+fw->^#PBUakX^=Hb6xMn4Ozb`E9%Q+N%3wL} zQ-Aq$I-HojcDHNodMK{kde|Z%tNCw(N{n@0W@jMgm z;@Tjk#-8dhj@t33?)1!uyzHv9A*4OuacI`#nm!rit;c94#IMJ-``@YCJ*Pb43ドルFAk z3FlV((Wk#ipV>p7UZQ6n`qV&eTIiF}5lf#ubVTZ>%#%u{&*t`=)?36^>jldHTGCH$ zBd=l|-UZ#Iye6ALc}eqEH)#Ehm8JjleyqJAy4#bEJc9l7(hX^+QQJeu3vr4!ffsT|>+Li^=7`b}}b z{e*Gw@LOyJ$&K1=#7{Ne4mm>h4q2|I_TmtX?FH7!m>#visLb69yH4X~0nFWe7r%A9 z5kA$G4+7KLSgPAl7oa}GoFsmK-*QLw&mPn}zr;Pt2eNB4R7ドルaB9=am^(R(y+vk(1< z*;MD?8F4njPip(>c^m92$fo)m&mPA!3hNdMOV?{WZv!`w^H%DQ!2hke*keTQe*$;9 zp2z%7APs&X4O?)J$`?KVHToqwZO|7zmxDAvhUXoqx2Q~XoT7HWgn2l~O^^Lbyq}|b z41Qr8(CV+0VH}Y6WvsSr0flvn!VqQqb5Fr9lYe$QD?vU$uW9_eDI=ygo8T|)nWB7n zQ_4ExvF8EQ%gB?X5T8YeJNCcyLRYf7F%Gr?oU7oL!lgV3!awR?K)%oE@m$n>`&U_U zFEzHAbjQ>IW;}W#@=V)H86z&`vFx1`|Do7F6fw;}kal{&KxHWyj^RNfYxo=9BBj^_8i9@eTWBc$(4=IfjFKTC! z?n=DghYg~!Ydxlne5bMLKC)Rg!?X@QQCfiD|E4s+Pc^asN+v@G2`u+r$nCZ!Lyg( zPU;FH2NNGk6WLVqm-dOwVYy_|+zIS7$?+fPH$r!`{78r16ui^y4Wn{R<2s1zk3h#t zoUR*sxenN|FAsWa*TcI0K>bn!y>a$atn$NoP2(68b~p5i>Y6a=8p4X8jv@O-b8aWo zZ|Ec0JiNZh(I2iQ_oRz(r^f}*-&m=`jg=D`1L=l-p^vha+%^#h>4;#=5%ouWe=(i( zav0{zVQ-^4Y1RanA}(6z5J%c8(f4i)2hd0PI>nFcFB(&M7tf{tPWvXhcdB(X2dc{* zbdK84fBiout(3l5#79}v^Chrr`4m@#wFf-X1)WCd#c~=i#l1h``TkYsW6sXZYv{C+ z&7Xj@;`wgkL+{R{w7T+%%4J-8(@P#ZDSw^&F1^MPXq=1U>ZtP)a7kw&M_uRBdPb2M z`QhMu#b>os-zXhaPn;SJ-?rJvU&vY3Yf)VyI=UHzh8$u?xlP{yc}zwJ!B}{U%p4>yQHrU=^)z?2%vw8 zyr4WuM|-S<<_vm4z~%bau(mpyt?9ドルst*_`W|AzBD$`eW# z)g`tJkA>9X&(6|Q(to~L4;Ff44wmseZ3ドルuL?j_L=6sU*~oN$(Y(0 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ドルhMYX5I!Tn9|)?PmNGHf z7cu@eF!47s{!f0sm+`T%`}91c!SFu^tixygO~H-k`P1w^zscY?882j9hj8A~wCifc| z-_1C)&A9(F<1lio4leqlpjzgeo!9b%@xa;u!@gp{us_goB?@UYj7#! zEsQT={3PQDlt6dcq8Mh7>^BjEh@TCvox%gva;>-Bd9Oes7l`rF2tC%l1RlbaW zJaL!Q?&_`N{a)*~}L#{0a&jAHo#A zjVXK?&%2HJf`y-}*)hJ2i7(@Szhb^%;ZqvuLzu1ドルG4W-*@Sn^VEc|@Uj`3|wd>LOn zdy$d9VBwdz_%a#A#!Jr%nP-B@J;@r?rT!2mzKw|=9bXL@zF=}sd|O|LZ)4)icV)()JYd1q&Z$Q-25(-^Rq3@!!MHE+yFrCikhtU&f2iV!mMEBYX6RFokbp z3SY*TFK51B;m>mMZA^R_kFI0BVBy>HqVR1@d>OyKoB4u;U+D_p#>AKL?&p~=Som2k zzKw}5P+Ay2iv`u<&hrl3|q%u*-cunj-xqc6eul%lyfu%oi+ttvih8v+vp9 z8&ufDUvR2?nV-mJzF^@ei+|5_Q~s$RM)@yT_(iV#voXbA=09#`zF^^Zx%f6FzRZ{W zr^Np=CO*QibMb9Ve3@Svihd!*U$F4AU3?o8U*=;%%oi+tyS|-^n>HrC%-?*A`GSR? z;|kx##FzP=-!fmY@RQ}=jUOS#oxvhf0;kKmidB( zpDcWtZ|h>dVBufq%0C-Z_%c725i#)>Ec|5Q%Y0rX^92iklq-B2Q}{Cf*UEgs!nf-S zlAn!GheXq7r4T=G4W-7aToIi3qRY%w=wZ$KJp#r3l@I9i*IA%%lzdOj3ZI` z5iI;<@|xf}wy}{we7nawis4@MV5|U^RL+$C!_QW z7JjnwEAzEiF<-fo?eu!3u*>nam@hb0zRU*?LB&Gx7cBgnUHNZglHaHjV}Iu{U$F4= zTznf7e+KhkX1?H5`L)b1$G9NHU$F4)@<#hrf@?x8`fam2ah{-n=d*8)!nrxgox1s? z!XG))$gdUSmK1-%_^EZ(jxX_TOnjMN|2Ojmr^=W4_=hk~s`G!Qv;DCM@t_a+N8v9b zfDd5`U*_*GX)=7l^qk6CGX0nN{$DU(u<%rz2ym=r_37ドルjaxz=r`hyx)qf-0@({l>n zmN)TjOng~S@CW7#PL(g~4`yNd2vvR>g~<_k`hfy6m7w89x)7cbfl z$bdeCDSR7K__7{iEAs^lKUx0C`iXxqU$F2?C~$lTQ}`tW@F7g$%X*75T21@~)ALmF zPu6EV%6!48@?|}T!Z@^+-z*b1;U`PKtp8Zbe8IvmqQv4un9^@!O24cZd7k-#g>UOC z@oh|eSzl6)ad3*i;8gjt9_3Ny3r>|U>sS8He8IvWqf;MCzl|yWvfgDP#^ovgf`xCV z*DL+9KISs!3l@H|{FC)G4>Dh{@T*+$w=ucBVv94mi;8gjteoKA9gfCe5MLPDe z_}iG`|ML0fSsU{O3*VMErQgQHm-S(9GGB12d|6L+$rnxh1q*+MEB-d7@MZnk51B7m z_;!4~;xFsfKJ_INzF^@e%RgD)_6_C>7JjnuWj)+KnJ-xQ$-3o6Hw1{AA(F`pOTOFIf0luJCP4;mdl=i`SU+3l@H|@MZnxPna)Q_;z@6 zanr^WzO465`-%x)u<%e@;%{t(%lgohnj-xqc6eul%x-pm<_i{ni7r{?q~0v}^vlc_ zEc|5Q%X-x}m@ioPm9Fq@OySG=)>&WW{HrkbK=?&2zKw}5>tVMsU$F3JWf%_#ll*K< zd|5wRe}f5Mu<(|U>*J66x=Fua;oI_}_}iG`FYD>snJ-xQc{=s6^xK&Dvi^QA z^92h(S^1Oo`o-Tc@fR7ドルyT3s3w=sn;>-)dKe8IxE^NaX4Ccf+kc#`>og`cea%Km{N z-!$AKXEm_|(e8Iv`CV$xvvzqyWg}=}hzKtpT_djoJ0k^F2-;miJ<&ow=i@e5q^z)4)iex4xn1q(l!{>lEI)yx+x{7hH)Hm2}p zzt9%u3l@Hni*IA%%l@L@F<-fod_ndv6jpct{gwhgg>RRaxwvU#;>-S}+;5xw6D<5> z`X~FHE@i%8;TOB&Z(|By_D4O$e8Ix6a`A0UeA!Rcbccz*VBu%E_%%oi+tJ3O!OWxv_byG;0kg>Q#Pd>d2vvOjG#^985M-+P6T{}$#87Jf4OCHvn# zeYc6fVBsfAzwDR0m-&K)pRD}I{<_~yuvr2?*^f8!9ut4t!cp|e>#j8NJD2%_g@1FJ zQ6R#Ue>SH4ll_0UGheXq7a4lA|6ya|*M>~^k4gL)3qP6sWPjnTdrkTU3%}MCzKtn- z*^hYKeTFYs__n>I^xK&DvVU<6^92ikfh&9)6jpc_zqbcj!cv5zvolt-!^b^(@w;bs zw=sn;`zdRgFIe~$F20S4FZ(a=V7_4C7rFR0Ccf;~>|(xP;U~*~+21*FgGs+&;V097 z*$=v$`GSR?Ed1#HQRWL4ezNdoziHw9CjNqjpYM{NjY)p8KlOIz3l_eu?{jg}#>AKX ztbqqi_)&~-DebMU@NGDh{@E5xHHYUF8uiejl!NN}_ zf7y?_WTQ#H;8gjtfA<0a3l_c|-?_mhv=ce1v41cg*mu+oe}!mJ~j-@a^9V?-7jOlVBs%v@oh|eIgjB1<_i|s9o}5rv@!aj{dvo(fif1ty&}gi zi7)3pjQoK~zu;8)az4Zy<_i{nvhpm6ni;hfu<$ef^0p6;u(tpnknjxypx1`&nd}yd z#cRwLEc|5gm-8*o_@R-XVBu%F!nZMnUx9VkAKNIZi{wX#JmH;oJH~d>a#A&hxm6`GQmB%lRLhnJ-xQ zH7@ztn8KIyLjK8o!NO0L|8l;_>>ru*3l_dDZ%V(7DSSDP_EPT7aOne&?U(PT2 zIr9Yz-Pfx%Xuo_V7_4C zx4Xi(G4bX6m47f_u<-5trtob{d^xxw`a1DoP;oJ6x!nZN;<@}rt9yrf~ec_-{_%AKNb^gJ8 z!NRxoo%l8;zMRKX{FsTqVBxQE#oxxnm-Bn-nJ-xQw!A2O8xvp7``O5R!NMPfx z%lSZ0Fki6n?fj|U=MTNhe8IvW3T z73DLQ^NLCt%XvkYFqZR*B8=s{qU#uEU|l=;e+y$duV^FV9Dd%#Sk5bYhOwMi)Xlht z-M`OR&MV67GU-{v&&M*B^NR8rZ{+8*7|VG@3mD6JMRknjyrOo-a$eDT;B1yHUG8?_ z`&{^b7yhmbZ+78FU6^E8Lx1>_hU<|dv83@5`3_+`l5r;eqh&2g48ekxl%;wdwebse zSjJD#9EAJ!==$ihz$Gl}%l0#t@t*4uA$l(3A4Ad&mi1VdGM4d)ml?}^Lq2qo_;UWr za>ml1c|~JWdyp93C5-eh*kRJ&r=Q2pvpGO`I2`ixVMC1jF^rF3oX>bPF#IL4>dyp& zDJcC}>cZb};mt1mOBeo&3xD9k`9pR1vG82D!-fCg!vE#M|Kq|(40HOQ4cM7On}lgj)yt!cSM|gY?Z6 zw~EOy5cG0Ndfg;mX@~#RPLgKM;9@>C($Era#@krun3n{m`p&i@>m988X1`?b@QbW; zykjwZH3B`Dw_Q44G&o3E>sOvdQ_n5O!HIM-UZCiDPvfAJi(3_vLn%sodJ|q3i8sJj zFDttU??TiXqu;6vU5()5P$BcS%l_Y6iT6lWo=2}#oL>~Q-xta1iJZhc8tcL>E#(n< z2d>f9DM7rtRo>Jpx)pO)T}Pr9g*MSEbVn~~S;lL9ov+1oys9|yyM$f5{6ドルp+PJ`8T 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ドルKkmV!XMfc zu(YwUCfJNQOj-l4eQ@+`4tk7Xx@lmep~2l4d*CCkOY)J_$zJ9@)xL5}SL{x5(vk6m z8WP>cT@F1VQPj_ygI|`yR8VfT);2e;z($jXrLDEWaC0--ot1N{ZC5l7#|uWI>g-tc zT2R!`Rv&JTRKr<)q_qxjrbej{nm~nexuv|s9qwap4njep9up41l}tq7ra@ay2n7|? z6L+s}#p>Jg3+m(7)KYL<0-?@^8ドルzs8llxzeiud>7-q0C zg4{6*0;?0ZZ3gDVY*M*s{!Ck|y@rhwvg*3XTAqnX@l8SxVnVHstwr&OqaI+>o z^iDi(4OQ1&>)e851{7gCAT_9llDEm zLygu?9_9NZt+^eMHzhQo6-r>@`;EI@+P#xLaDls5349b`@Om_Al)9Q7gXtOTl~qNy zkEu^!p+%mcAReNjQ8W(v8ya=AkW!B}ifunrA27&qZJ}5|^A`6@_Sy;_9Tq;AY0tug zpY|MRa5P3jM`FYa(w&q{+GgPTu^J2yj42#FU*0;5w_ z=3Fq4IPRIaXr>vt zRyBtjS}-$-2AdvzbS>aX)x~}daf%AfGDlxfr%P)p?K(FnB^1RA;$UMCt;)IGl++*Ua5rNUc6~i<(|0su zvGu#9sSanVEN)wZ^GnRudK%}kn#`uiK}G88VP~zHoeqIak?j(`ITR<+?03?}wwyxe zVxAmrF}qr^shTQuT0PeLxkp0l;zvR`Es$A?4ex;&2xr$mSyS1Wb1bL+R=6b|$E}MW z$E6Y30c1LgN}S4gj18C*fD$MjPQ$@yis#^5ss<|7gqj5b4prlss7j~lave!-sqoti zL8k*HkVnj}x~NiG`fF1{#BpuPgnb%s{~aS{9;1bpMKLjo<%=uv2bsm-;*q2?ml%e- z_9J!lU49uO=~0_k6u~USss}o8jLwh>u87e5%*yI;6IH;$rEMWp$E{(k*YzyJbT$gw zJ@cwir{)LIj&m>mENWR1YU0yw;s$I&Aq?3RU_p^Sswx_r2%Sq28>?w)E+`f^p_Z1& zQa2ドルRt{c~`(HuQ!KFw4HDOW?NE~1AWxld3@T8Ysiqmc%TDMfIw5!!<|vocupwm4>{ zq$z033M>cY+5dEdV-jru_AOcwbE`P@>d0lUvn8gTezc4QS-qT_o~Pfa4< zNbu8W`Sem8o@2@YRJ@!Q5;?}2QV%T7kc#*QW;YxqmA#m5&iRWpwv<;>+zYB}L(!Gr z)#!FiSrNf3d6{E2b$VM%m=^fqR7`N9XO;5Eo9-D-#W72vIzA4L!-_hz{0vsFTp3(i z*SHwcT8@xuLolS|b^FW$JUGANqH||fpbBbR94t4-@Zr7-T+)XDL;;)&Cy#&P~>sXE8ODvFbX}wE%XSZ zaB{qu3X9_7S2)eX-82t(#RY28#W*~)Wzvdpq&CzzsV*FDt;U-1NlKq&Oj$Jv**s}U zV;xRbZJ9K^Wm3(QsV%`NS2awYw!CP{vgI|CuUS^y+!QR%7ドルgB7q^e1pdB*ho#nTF^ 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ドルJKcjjp`uhvr$N8Tt{ gaPQ +#include +#include +#include + +int K, N, R; + +struct road +{ + int s; + int e; + int L; + int T; + road(int ss, int ee, int ll, int tt) : s(ss), e(ee), L(ll), T(tt) {} +}; + +std::vector roads; +std::unordered_set visited; + +int minLen = 1 << 30; +int curLen = 0; + +void DFS(int s) +{ + if(s == N) + { + minLen = std::min(curLen, minLen); + return; + } + visited.insert(s); + + for(int i = 0; i < roads.size(); ++i) + { + road r = roads[i]; + if(r.s == s && (visited.find(r.e) == visited.end()) && K>= r.T) + { + curLen += r.L; + K -= r.T; + DFS(r.e); + K += r.T; + curLen -= r.L; + visited.erase(s); + } + } +} + + +int main() +{ + std::cin>> K>> N>> R; + for(int i = 0; i < R; ++i) + { + int s, e, L, T; + std::cin>> s>> e>> L>> T; + + roads.push_back(road(s, e, L, T)); + } + DFS(1); + minLen = (minLen < (1 << 30) ? minLen : -1); + std::cout << minLen << std::endl; + + return 0; + +} \ No newline at end of file diff --git a/leetcode/rotateVector.cc b/leetcode/rotateVector.cc new file mode 100644 index 0000000..ea5be21 --- /dev/null +++ b/leetcode/rotateVector.cc @@ -0,0 +1,54 @@ +/* + * @Author: vihowe + * @Date: 2022-02-14 19:16:22 + * @LastEditTime: 2022-02-14 20:46:43 + * @FilePath: /leetcode/rotateVector.cc + */ +#include +#include + +class Solution { +public: + void rotate(std::vector& nums, int k) { + int n = nums.size(); + std::vector newNums(n); + for (int i = 0; i < n; ++i) { + newNums[(i + k) % n] = nums[i]; + } + nums.assign(newNums.begin(), newNums.end()); + + } + + void rotating(std::vector& nums, int i, int j) { + while(i < j) { + int temp = nums[i]; + nums[i] = nums[j]; + nums[j] = temp; + i++; + j--; + } + } + void rotate2(std::vector& nums, int k) { + int n = nums.size(); + k = k % n; + rotating(nums, 0, n - k - 1); + rotating(nums, n - k, n - 1); + rotating(nums, 0, n - 1); + } + + void rotate3(std::vector &nums, int k) { + int n = nums.size(); + int cnt = 0; + int start = 0; + while (cnt < n) { + int prev = nums[start]; + int cur = start; + do { + int next = (cur + k) % n; + std::swap(prev, nums[next]); // store nums[cur] in prev + cur = next; + } while(cur != start); + start++; + } + } +}; \ No newline at end of file diff --git a/leetcode/search2dMatrix.cc b/leetcode/search2dMatrix.cc new file mode 100644 index 0000000..9b397d9 --- /dev/null +++ b/leetcode/search2dMatrix.cc @@ -0,0 +1,32 @@ +/* + * @Author: vihowe + * @Date: 2022-01-21 10:39:40 + * @LastEditTime: 2022-01-21 10:54:03 + * @FilePath: /leetcode/search2dMatrix.cc + */ +#include +#include + +// 从一个二维矩阵中搜索target +// 矩阵从左到右从上到下都是升序 + +class Solution { +public: + bool searchMatrix(std::vector>& nums, int target) { + int m = nums.size(); + int n = nums[0].size(); + int i = 0, j = n - 1; + while(i < m && j>= 0 ) { + if(target < nums[i][j]) { + j--; + } + else if (target> nums[i][j]) { + i++; + } + else { + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/leetcode/sort.cc b/leetcode/sort.cc new file mode 100644 index 0000000..b7bc7ab --- /dev/null +++ b/leetcode/sort.cc @@ -0,0 +1,132 @@ +/* + * @Author: vihowe + * @Date: 2022年02月16日 19:37:10 + * @LastEditTime: 2022年02月16日 22:56:27 + * @FilePath: /leetcode/sort.cc + */ +#include +#include + +class Solution { + +public: + + int partition(std::vector &nums, int left, int right) + { + int pivot = nums[left]; + while (left < right) + { + while (left < right && nums[right]>= pivot) right--; + if (left < right) + { + nums[left] = nums[right]; + } + while (left < right && nums[left] <= pivot) left++; + if (left < right) + { + nums[right] = nums[left]; + } + } + nums[left] = pivot; + return left; + } + + void quickSort(std::vector &nums, int left, int right) + { + if (left>= right) + { + return; + } + + int pivotIdx = partition(nums, left, right); + quickSort(nums, left, pivotIdx - 1); + quickSort(nums, pivotIdx + 1, right); + } + + void reverse(std::vector &nums, int left, int right) + { + while (left < right) + { + int temp = nums[left]; + nums[left] = nums[right]; + nums[right] = temp; + left++; + right--; + } + } + + int count(std::vector &nums, int left, int right, int target) + { + int cnt = 0; + for (int i = left; i <= right; ++i) + { + if (nums[i] == target) + { + cnt++; + } + } + return cnt; + } + + void wiggleSort(std::vector &nums) + { + int n = nums.size(); + quickSort(nums, 0, n - 1); + + int k = n / 2; + if (nums[n-k] == nums[n-k-1]) + { + int cnt1 = count(nums, 0, n - k - 1, nums[n-k]); + int cnt2 = count(nums, n - k, n - 1, nums[n-k]); + if (cnt1 + cnt2>= (n+1) / 2) + { + reverse(nums, 0, n - k - 1); + reverse(nums, n - k, n - 1); + } + } + + for (int i = n - k; i < n; ++i) + { + int temp = nums[i]; + int j = i; + for (; j> 2 * (i - n + k + 1) - 1; --j) + { + nums[j] = nums[j - 1]; + } + nums[j] = temp; + } + } + + void threeWayPartition(std::vector &nums) + { + using std::swap; + int i = 0, j = 0, k = nums.size() - 1; + int mid = 1; + while(j < k){ + if(nums[j]> mid){ + swap(nums[j], nums[k]); + --k; + } + else if(nums[j] < mid){ + swap(nums[j], nums[i]); + ++i; + ++j; + } + else{ + ++j; + } + } + } +}; + +int main() +{ + std::vector nums {2, 0, 2, 0, 1, 0}; + Solution s; + // s.wiggleSort(nums); + s.threeWayPartition(nums); + for (auto i : nums) + { + std::cout << i << " "; + } +} \ No newline at end of file diff --git a/leetcode/wordBreak.cc b/leetcode/wordBreak.cc new file mode 100644 index 0000000..ff6dd08 --- /dev/null +++ b/leetcode/wordBreak.cc @@ -0,0 +1,63 @@ +/* + * @Author: vihowe + * @Date: 2022-01-31 10:18:32 + * @LastEditTime: 2022-02-14 16:47:22 + * @FilePath: /leetcode/wordBreak.cc + */ +#include +#include +#include + +class Solution{ +public: + + std::unordered_set wordSet; + std::vector memo; + + bool dfs(std::string s, int i) { + int n = s.size(); + if (i == n) { + return true; + } + // start from s[i] to find a word in dict + for(int j = i; j < n; ++j) { + std::string temp = s.substr(i, j - i + 1); + if (wordSet.find(temp) != wordSet.end()) { + if (memo[j+1] || dfs(s, j+1) == true) { + memo[j+1] = true; + return true; + } + } + } + return false; + + } + bool wordBreak(std::string s, std::vector& wordDict) { + for (auto word : wordDict) { + wordSet.insert(word); + } + for (int i = 0; i < s.size(); ++i) { + memo.push_back(false); + } + return dfs(s, 0); + + } + + + bool wordBreak(std::string s, std::vector& wordDict) { + auto dp = std::vector (s.size() + 1, false); + auto ws = std::unordered_set (); + for (auto word : wordDict) { + ws.insert(word); + } + dp[0] = true; + for (int i = 0; i < s.size(); i++) { + for (int j = i + 1; j < s.size() + 1; j++) { + if (dp[i] && (ws.find(s.substr(i, j - i)) != ws.end())) { + dp[j] = true; + } + } + } + return dp[s.size()]; + } +}; \ No newline at end of file diff --git "a/leetcode/345円237円216円345円240円241円351円227円256円351円242円230円.cc" "b/leetcode/345円237円216円345円240円241円351円227円256円351円242円230円.cc" new file mode 100644 index 0000000..22aa8b4 --- /dev/null +++ "b/leetcode/345円237円216円345円240円241円351円227円256円351円242円230円.cc" @@ -0,0 +1,58 @@ +#include + +const int MAXN = 60; +int room[MAXN][MAXN]; +int color[MAXN][MAXN]; +int max_area = 0; +int cur_area = 0; +int room_num = 0; + + +void DFS(int i, int j) +{ + if(color[i][j]) + return; + + color[i][j] = room_num; + ++cur_area; + + if((room[i][j] & 1) == 0) + DFS(i, j-1); + if((room[i][j] & 2) == 0) + DFS(i-1, j); + if((room[i][j] & 4) == 0) + DFS(i, j+1); + if((room[i][j] & 8) == 0) + DFS(i+1, j); +} + + +int main() +{ + int r, c; + std::cin>> r>> c; + for(int i = 0; i < r; ++i) + { + for(int j = 0; j < c; ++j) + { + std::cin>> room[i][j]; + } + } + memset(color, 0, sizeof(color)); + for(int i = 0; i < r; ++i) + { + for(int j = 0; j < c; ++j) + { + if(!color[i][j]) + { + cur_area = 0; + room_num++; + DFS(i, j); + } + max_area = max_area> cur_area ? max_area : cur_area; + } + } + std::cout << room_num << std::endl; + std::cout << max_area << std::endl; + return 0; +} \ No newline at end of file diff --git "a/leetcode/345円260円217円346円270円270円346円210円217円" "b/leetcode/345円260円217円346円270円270円346円210円217円" new file mode 100755 index 0000000000000000000000000000000000000000..1aa59d5a8d576dd95cc01184b7b237cb37e68f2e GIT binary patch literal 64534 zcmeHP4R}=5nLc+WA(Idw0s=xvf>2B#kROteL{$T6UkLk1Z&*wXRmMTWecv1ELLT{kKirjoJ6R_nhI(O+pZ5 z+x0nDPtJYsIp24_^Pcbg+&Sm++=qYuD3vjd;j$r2LU=Kev9CmD(Ia*q!U_akuUfj? zb%m??GI|<+8n%_8h9j_djrjjn*0rwkkg~3w#y?{m!xtng3{teeh;m6z14lgrsq@xs z^qynpAx!m(T?s52yT^^Lha;Qn!m&qIeeW+Z_2u$P5|;HjxIS=bT)Mu&I?Avgk^pFaV*kxPdF0tH*Mfgton9xeW<2!5tc8jze8ehw8h`#)%{kn zL1eV*>*D(QxDvuv9kPC1_ciGCA$OzCd}`I#d9hjFDlSCWE-SFylb_s)pzF())-Kg6 zE?Zq=dW+N4!w?&nB_^E|sF~6b&<;v#o-9ubhu4&mgu|%ph?l=sbl;0$+9jsmj#}&j zHZG?b3A+S`y6$yH+-4g69Z6r7$Pyime^0QnG1w%sTlHl@o;XP@6glGcakq{oQa#Q7 zUb%AhD%Y}=qOTsX)DxJlDd-P$kseuB5tyNNUt;@{e?F{T*YAhe;fdXITi;Kl3()LwNyzU7mMazza;* z3QW3S1{4E|0mXn~Krx^gPz)#r6a$I@#eiZ! zF`yVw3@8Q^1BwB~fMP%~pcqgLCu z-HvnE#(CpOpWbz1YP5UaJJEJNdH&7Q!e*=DY2VyuW!Jbyd%k>0`CtXufP zo)&i43m*2|!4B6^8{N-Z*He54Yh8y}_6g_*j#krH(8gFvyB&6DY-8_l?wxLo5Ac6S z68hzA#IT_ki{z@~ximvjss0I;@QoV4*dh$SHfRyMthK)56?e@-=84fP(}wY z<66ooepxj1ドル{>hxaXv}DKzZW)r9$!p%;_VxJ=%Q_+WkIzM&JD{GyC?U%m>~}FD348 zVeH>2Zb$#|Q2Vr8CEDzD;)-l~0QU4;fHniK9rm@ru11jSK>fN0;~dRZCopDZ!*(%WWsfuGom0(k7ドルFjh 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ドルQjoDt{irbc7Uyu?VRMGZ4}d zW+G%DWFllC%tAOHVI0C-gbNU|5y)rBx8@kMKE!QG$d=}S8*M` z?HfOf>-h0q7r(jdThL5rci&L$;(7GoDL4N<1g{*mznfi?x5v)<-j=l0udh!`gv-y< zb~Dbixh`%)&$^R2yc9M~t1hLjT5N8{?b(l7UQxZkpIyL}9#umQV$fb=*)U~FR{-+(^n9(jgrn!X= zy~C>+o<-x3rjjk2$dw!(?1dustqh@sx;kr5={pu|{q(q*aihipyb8tt&pzruvlm%+ z;RrTwjU8d#6L2?ez(#E#pvSg#hp*rkzZWMj;!b)L$Ie~gm;+j8ghnh5qk)^~&_+OR zk24zY(K4UHfsG=sJK~P3OU!GE&3b+cmKItpU5vf*U}JO07Y_TpaDRWu*o8kM8j5vn z`Zv33igi~-fuW{U*S)@a_ohI^IM$*^+#6gqOX04U)#{hw%!ADQ*|MbY<62u=xip%# zg5CWQ1r7U+zE~3SH3m2PQ15zQ$T;>vy|KtRRU}oeuy6>?x-Z~s{KQ;W`tx0tb@?t= zMWHb&4M+HC+7W*esnTBn#RaFUI8GS0#Pvvwt4+Zs9KP~z_PYbRzkVfY#!wa~WfUdL zRThA?NKkisz2u&BKB}r#2ftE<3elz;3vg@&cq4a$adz0flfl$ddy+leg926r>w#d? zhWNUlnSE$RvX9hRjN~sNXQmcLlG<=xff>x-&r&ZeuJ?z+k9ドルrdey6~Ig!;xe$p1wJ z%|`m$)USv;wK(fog~N{dv1dV7wR}#mvW1ドルGAf`#9dsWvI#PzRXmpLP>PYO?SeKP8D zpg82k#2xP~C+EUp5=YmF3DnmVcSf=D7oWiVLRjXI8!b5)aG;Vbj%Se;5 zMQ6-Nc|o(hq5{XkJica}Hg(qpe5K6#q@ZBPBW$!=a}_OSd0!0Uz*^oGpTEH!%nSH% zS}o}H<*`>fZ-2F`>(yIsU+D3$yv^=VUVSitb7$eavT&ZaxFoC>U){85@#do9Yc_iq zZM&v4)U220@-nZT$&;9EdHIt?OP| z3tNu$x?DqFH9no+IQZl+YQ=|nDTz6SoW_TUvweKjN|1c4PI~Vf@=h@x_3FLpW1eJD9Np$+suvjY!(6q^#lTI8@Q!mStn99FGz?MYSZ~ND9;(xvO^q1e7c+rl_+&eCR_{$GHx+eIu6ZHoYeslQn zHMYyvBo6M_x8vHc{O-rMt@v8*55_e9^ef*O-~N+*!GEgWeBk>T4Xw}J_04k@K7Gxb zt7?+rn;see>N~FG_Kwcp4U--q3*0N=3xhXH$j(l+YN7HX#x%<#b z*0+3fVw!#Df-MUcO$=l{wC}o`pFWtnd}jHczl17R@3?aRodY-aPJivzx(nBGvBSdX~p$N@4Y#>;=E^Oe*O!NidDZ~yRxzS^5iK? SCwbQuy_{H@yLaF1Kl@(?guPGz literal 0 HcmV?d00001 diff --git "a/leetcode/345円260円217円346円270円270円346円210円217円.cc" "b/leetcode/345円260円217円346円270円270円346円210円217円.cc" new file mode 100644 index 0000000..2ec88a2 --- /dev/null +++ "b/leetcode/345円260円217円346円270円270円346円210円217円.cc" @@ -0,0 +1,107 @@ +#include +#include + +const int MaxLen = 80; +char board[MaxLen][MaxLen]; +bool visited[MaxLen][MaxLen]; + +int w, h, minStep; +// for directions +int to[4][2] = { + {0,1},{1,0},{0,-1},{-1,0} +}; + +void DFS(int x1, int y1, int x2, int y2, int step, int f) +{ + if((x1 == x2) && (y1 == y2)) + { + minStep = step < minStep ? step : minStep; + return; + } + if(step>= minStep) + { + return; + } + for(int i = 0; i < 4; ++i) + { + int x = x1 + to[i][0], y = y1 + to[i][1]; + if((x> -1) && (x < w + 2) && (y> -1) && (y < h + 2) && + ((board[y][x] == ' ') && (visited[y][x] == false) || + (x == x2 && y == y2 && board[y][x] == 'X') + ) + ) + { + visited[y][x] = true; + if(f != i) + { + ++step; + } + DFS(x, y, x2, y2, step, i); + + // 回溯 + visited[y][x] = false; + if(f != i) + { + --step; + } + } + } +} + +int main() +{ + int board_num = 0; + while(std::cin>> w>> h) + { + if(w == 0 && h == 0) + break; + ++board_num; + std::cout << "Board #" << board_num << ":" << std::endl; + for(int i = 0; i < MaxLen; ++i) + { + board[0][i] = board[i][0] = ' '; + } + + for(int i = 1; i <= h; ++i) + { + getchar(); + for(int j = 1; j <= w; ++j) + { + board[i][j] = getchar(); + } + } + + // 在矩形板最外层加一圈格子 + for(int j = 0; j <= w; ++j) + { + board[h+1][j+1] = ' '; + } + for(int i = 0; i <= h; ++i) + { + board[i+1][w+1] = ' '; + } + + int x1, y1, x2, y2, count = 0; + while((std::cin>> x1>> y1>> x2>> y2) && x1> 0) + { + ++count; + minStep = 1 << 30; + memset(visited, false, sizeof(visited)); + + DFS(x1, y1, x2, y2, 0, -1); + if (minStep < (1<<30)) + { + std::cout << "Pair " << count << ": " << minStep << " segments." << std::endl; + } + else + { + std::cout << "Pair " << count << ": impossible." << std::endl; + } + } + std::cout << std::endl; + } + +} + + + diff --git "a/leetcode/346円234円200円351円225円277円344円270円212円345円215円207円345円255円220円345円272円217円345円210円227円" "b/leetcode/346円234円200円351円225円277円344円270円212円345円215円207円345円255円220円345円272円217円345円210円227円" new file mode 100755 index 0000000000000000000000000000000000000000..14e4077696e1c9546d6cfdc2d91bb17dd7f6347a GIT binary patch literal 35410 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 tKW+a5FPz-IrSL~*qhH +#include + +int main() +{ + int N; + std::cin>> N; + + int data[110]; + int dp[110]; + memset(dp, 0, sizeof(dp)); + + for (int i = 0; i < N; ++i) + { + std::cin>> data[i]; + } + dp[0] = 1; + + for(int i = 1; i < N; ++i) + { + int temp = 0; + for(int j = 0; j < i; ++j) + { + if(data[i]> data[j]) + { + temp = dp[j]> temp ? dp[j] : temp; + } + } + dp[i] = temp + 1; + } + int ret = 1; + for(int i = 0; i < N; ++i) + { + if (dp[i]> ret) + ret = dp[i]; + } + std::cout << ret << std::endl; + + + return 0; +} \ No newline at end of file From c057cfd5337d4d9b8ca12dd2a8c264523aa03e63 Mon Sep 17 00:00:00 2001 From: vihowe Date: 2022年2月22日 16:56:30 +0800 Subject: [PATCH 2/7] leetcode --- .gitignore | 3 + leetcode/array.cc | 92 ++++++++++++++ leetcode/containDuplicatie.cc | 73 +++++++++++ leetcode/copyRandomList.cc | 98 +++++++++++++++ leetcode/linkList | Bin 0 -> 63016 bytes leetcode/linkList.cc | 224 ++++++++++++++++++++++++++++++++++ leetcode/minStack.cc | 66 ++++++++++ leetcode/sort.cc | 135 +++++++++++++++++++- 8 files changed, 687 insertions(+), 4 deletions(-) create mode 100644 leetcode/array.cc create mode 100644 leetcode/containDuplicatie.cc create mode 100644 leetcode/copyRandomList.cc create mode 100755 leetcode/linkList create mode 100644 leetcode/linkList.cc create mode 100644 leetcode/minStack.cc diff --git a/.gitignore b/.gitignore index 259148f..2cdb370 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,6 @@ *.exe *.out *.app + +*dSYM +.vscode diff --git a/leetcode/array.cc b/leetcode/array.cc new file mode 100644 index 0000000..050a3b1 --- /dev/null +++ b/leetcode/array.cc @@ -0,0 +1,92 @@ +/* + * @Author: vihowe + * @Date: 2022年02月17日 15:43:23 + * @LastEditTime: 2022年02月17日 16:57:17 + * @FilePath: /Algorithm/leetcode/array.cc + */ +#include +#include +#include + +class Solution0 { +public: + void moveZeroes(std::vector &nums) + { + int n = nums.size(); + int k= n; + for (int i = 0; i < k;) + { + if (nums[i] == 0) + { + // move nums[i+1,...] forward + for (int j = i + 1; j < n; ++j) + { + nums[j-1] = nums[j]; + } + nums[n-1] = 0; + k--; + } + else + { + ++i; + } + } + } + + void moveZeroes2(std::vector &nums) + { + // partition的思想 + int n = nums.size(); + int ptr = 0; + for (int i = 0; i < n; ++i) + { + if (nums[i]) + { + std::swap(nums[ptr++], nums[i]); + } + } + } + + void moveZeroes3(std::vector &nums) + { + // 覆盖 + 补0 + int n = nums.size(); + int i = 0, j = 0; + for (; i < n; ++i) + { + if (nums[i]) + { + nums[j++] = nums[i]; + } + } + for (; j < n; ++j) + { + nums[j] = 0; + } + } +}; + +class Solution { +public: + Solution(std::vector &nums) + { + this->nums = nums; + } + + std::vector reset() + { + return nums; + } + + std::vector shuffle() + { + std::vector rand_m(nums.begin(), nums.end()); + std::random_device rd; + std::mt19937 g(rd()); + std::shuffle(rand_m.begin(), rand_m.end(), g); + return rand_m; + } + +private: + std::vector nums; +}; \ No newline at end of file diff --git a/leetcode/containDuplicatie.cc b/leetcode/containDuplicatie.cc new file mode 100644 index 0000000..cfb21d2 --- /dev/null +++ b/leetcode/containDuplicatie.cc @@ -0,0 +1,73 @@ +/* + * @Author: vihowe + * @Date: 2022年02月17日 13:43:16 + * @LastEditTime: 2022年02月17日 15:05:34 + * @FilePath: /Algorithm/leetcode/containDuplicatie.cc + */ +#include +#include +#include + +class Solution { +public: + bool containsDuplicate(std::vector &nums) + { + std::unordered_set s(nums.begin(), nums.end()); + return s.size() < nums.size(); + } + + /** + * 给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。 + * 假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。 + * 你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。 + */ + int findDuplicate(std::vector &nums) + { + int n = nums.size(); + int left = 0, right = n - 1; + while (left < right) + { + int mid = left + (right - left)>> 1; + int cnt = 0; + for (auto item : nums) + { + if (item <= mid) + cnt++; + } + if (cnt <= mid) + { + left = mid + 1; + } + else + { + right = mid; + } + } + } + + int findDuplicate2(std::vector &nums) + { + int n = nums.size(); + int bitMax = 31; + int ans = 0; + while (!(n-1)>> bitMax) bitMax--; + + for (int bit = 0; bit <= bitMax; bit++) + { + int x = 0, y = 0; + for (int i = 0; i < n; ++i) + { + if (nums[i] & (1 << bit)) + x++; + } + for (int i = 1; i < n; ++i) + { + if (i & (1 << bit)) + y++; + } + if (x> y) + ans |= (1 << bit); + } + return ans; + } +}; \ No newline at end of file diff --git a/leetcode/copyRandomList.cc b/leetcode/copyRandomList.cc new file mode 100644 index 0000000..12c1fd1 --- /dev/null +++ b/leetcode/copyRandomList.cc @@ -0,0 +1,98 @@ +/* + * @Author: vihowe + * @Date: 2022-02-22 11:04:33 + * @LastEditTime: 2022-02-22 12:06:29 + * @FilePath: /Algorithm/leetcode/copyRandomList.cc + */ +#include
    +#include +class Node +{ +public: + int val; + Node *next; + Node *random; + Node (int _val) : val(_val), next(nullptr), random(nullptr) { }; +}; + +class Solution +{ + +public: + Node* copyRandomList(Node *head) + { + if (!head) + return nullptr; + + std::map m; + + Node *cur = head; + while(cur) + { + Node *newCur = new Node(cur->val); + m[cur] = newCur; + cur = cur->next; + } + + cur = head; + while(cur) + { + m[cur]->next = m[cur->next]; + m[cur]->random = m[cur->random]; + cur = cur->next; + } + return m[head]; + } + + Node* copyRandomList2(Node *head) + { + if (!head) + { + return nullptr; + } + + for (Node *cur = head; cur; cur = cur->next->next) + { + Node *newNode = new Node(cur->val); + newNode->next = cur->next; + cur->next = newNode; + } + + for (Node *cur = head; cur; cur = cur->next->next) + { + cur->next->random = cur->random ? cur->random->next : nullptr; + } + + Node *newHead = head->next; + for (Node *cur = head; cur; cur = cur->next) + { + Node* newCur = cur->next; + cur->next = cur->next->next; + newCur->next = newCur->next ? newCur->next->next : nullptr; + } + return newHead; + } + + + std::map mm; + Node* copyRandomList3(Node *head) + { + if (!head) + { + return nullptr; + } + if (mm.count(head)) + { + return mm[head]; + } + else + { + Node *newNode = new Node(head->val); + mm[head] = newNode; + newNode->next = copyRandomList3(head->next); + newNode->random= copyRandomList3(head->random); + } + } + + +}; \ No newline at end of file diff --git a/leetcode/linkList b/leetcode/linkList new file mode 100755 index 0000000000000000000000000000000000000000..78b53b98ec352b229364c246cdc7a5c98ab66f7a GIT binary patch literal 63016 zcmeHQ4{%(?ecqF7EMwz4z<|r)9|;g+z&gp2zn-qtm^ykb%lrt*i4*#cx;se+r#o?x z@}IU!Wo&hHK0Bx>gfyW+lSyYhq@7VilQ@~+9DyL0CWAsIjY*hRnUM5}5KtN*N}yH0 z-|lbk-aW}!n28}QZo0+VW!-)&#a4cNm2gf(c2*$++umV)Xh&rd$#1TV6O7@CpyMpQZQHr{ z-W&s5y!IwmqcDhHex6E0ctJTifdMzP?QE{EBU_5{+I!^&Wp9{MXsih}Y_IGe*|WRj z$=-MdiM;j>-l*)2vH`-Rd+9UFzpiN1j_-}edvkU!(&4q&@P1`)nhg-Huvapy0=6B^ z<}!&?7sq?;uh1whpun2u{^)oexwmP~8V`*mhUi)l5!lFNn1A)2#T6WP4ko0j}hi zgG2e{x-sDK3s`=d)kXWI%WT`ph@IWn(~(Zvy}8UO?G+VWP-`U{`h&hIF4X{6+m1zY zk#dCBzv6)MuZEKlcH1j6RjAzGw{6+J)w+3$?yE&lIf3c3YMr{0?sVwSyWx3=Kv4+F zy9QV4L!ZKR00~!o6SpAB$tQ$p1txt+@9rmsxCZ#dvqH3^pi261b<%ydzo;(|dq;;8m*w@?j(j@sd1wdj--m*5~jui<#8vmszi#$vk#)&7x( z#-IMXdc*~BAX|LE_AQlRrR7)^h8fxJCk1imqC12oA z^xA9J)UAP2i4N)K26uX~62oC-`nG-9T)bz^O-v!H;%XcL9IK#bGp^S#CVkDvC}0#Y z3K#{90!9I&fKk9GU=%P47zK<1mggomqnso*6fg=h1&jhl0i%fxz$jo8fbwt2i~>dh zqkvJsC}0#Y3j84`urr+hY52g4?PJy(x6mYB>A7y72cNBSq6%cTK0bD)1p_z!*> zq;TQJWy@v3rV1gaiE}v8c-8r^8YW22OGDPw~oF~FK%qFByfrkq2f6qUo&#G4`X3bj`->{-ki2o!=O3gOs3+Is z1iNT5)X=P>1?#~B#TnR{e1v>1JgQt*^;67SUw4}Qpgjd2rP+hh%6)*+O5PgwxUqY- z8x(bDkj^DHNYPWfAx2ドル}`C9A2yfsu;JkWnw3=Q_VOb@9NQq&=Nqh$I{WqPE53|fXa z`us=eEl7k%kRcjnxCU2*W%(iEVOjpelUJxz!>&{a%Ty@ikW4isZ>q@A$rv&x&-@2b z_s9WO^Ml=poTT?vfrlA~3r8qgTPDt^Z)mU!asGQ%jiEdbp~fickUW>lqdE2IWk!lV6}bfB0WBGmz}D2{h7UlYb9{{7x`y8sX{i{wGG@nCxIh=MB7ssyhw$uORg= zbe1WZnmULa$j}!G{Zr1%ARvH9^rrkbooaZF-WR;%@nJV#_D^I6dZFc&e2ue`#K^IP9UglU#hG#N?ks6IJ-dT9%kcmWAKu>axPPU>7~kdip!|m& z41x{@wK+xzHJ-T3I)-$ljDO_-1!Q^lzc`FwIRD*}Dj5G@bsAotbbf_8R-KyA&(R@< z9vf=;ii|pBeWg@=>t$Dwq+`zKF}tv)M`;iX7Z#y{oUm`q`6_N|$j66d z4%?`C7AWCPaQluPvK|8G*vDGP&YWUz`Te$n|fjFrl`UHU`C z(HS16VZ!+-5=r*tb(Dff{qel@?MZr@SxWmP>T5jT@@*;V=g$U#UW!(ElCpnAQHT+f z*OuZjAvs?{d}Se>kLjci*^zB${}WV)Xz^5wIxA;TC*-2R+)InepE0KcE_dqotlAUm z$@wrDlrv3vexde*_IXHL>GOZN=$?ZVfB%c)$ou9Y4D&n%<#$e?zcc8)%ray>t!i-a zL)6$`e}g6r*7hYiBcYGTd*P-N{y`cfxW=a^-=`*llc+u?d=1Q7$DqWx^Q4-|Fj8Q& z*k~Q|e;gA%Xf3#n7@2ZZHJ&kxS{Ip|C|lu4=Hr{?9r#Smsj%~?nlCq6NBswBFmkpl zXGc(FBhDt3DH79~$C{pe5RFIadZ2$)zz5XXg~a4%hsJW3a5nADRA zL#~7rhWn*rj149c1J}i*9Ef!L8OR^`b4rSWI4|JOFeXDtq7ow@Wc)LTFG&7i(SHyv zha2!c6q57jASI=xWuaw4)r;1Ci@YPXN6kR{bIDz){WZAdJo8&wpmyoQqjYh;A$x1t z^+}psrAl>0QV=cUqpHQo3PQd#6HwcfGr@rKpJ$OGV@@Xw`Io%uc=|nbkJ$rqc|3(} zOjGW@Q0^~!e5U-NwDUK}7Rzt6o5JWYmF*rxl*W|H5Ch+*jtA-1wUBLyW{oNT@qf+_ zQF2KfppgG~k$v*aXCXOqQ+`+spwl_`{f5*-BWXFw%}6cpQEgMs9x{rXw7x^1yRRtw zH7ti{{3x$j;g#du0AI_C&Qq*U`{4C#wQk1WvN*5dmhy+X77$@iZOAHlG5Waor)wX9`CU?!JNW>xD$ zeUzmy>4*9MlzKRFLB_>{{+xfaRwJAz&1Acz;j~B%&rwTd%ysx#r^~3dtdul$wEP$}vU(y#N4)S9E@Fe5CkG2c_=eiI3752ROX+5Z2ARk$t zQuo3$sq9|PZ4|)jY*I}zNM~~lRhnuNv**LRkjDRIlzqY%J}^ydaot%^ggNHVjWWCD zfNDFl?a^ZyJv|*5^Evq2K;6bX{khy8PoW3Z;hg!;FMX)g9#mVP+D849)@Y5=%ZlLx zNm@>Z^ED_Kn&qrv;sOl3{*}7D&C7rE_f;r^>w#9ar+oh#`Mzm9ByY5)_2A^L|6`a7 zW-8lHbMw#?6=}%&HTn>(TOGg?4*l62igv=ul?pV@<6-}}|9ic8odryqt5(k8)5`r~ zkPca6YOqC%FDHjTp%xTtk^lHFXIeLu=73rKM}J?iC%6P(8MKo_GKZO~&e|-*%vCk=e6~C< zmFH#h9FXVpw<=3vnh?^px9;%*5m_3o!75 ztq5UtbiG(D#Okvjtr87bBz^SkA5@7>tn@$OJNuVa;z3_Xh;RGOE>w$u^-_Yn79Q6ynFExpYKmg*#$u*oAmd$$WXu~ ziD{Wg73ドルTQTcBC}-RE8a1jVa2;Dirh`g>6N8|`tZ)s1VQ4u2?$YwKG4JuJoJ?`faM zRbbqlCXDM+jEmKXS}Fo!n<|ybh@7t;!wv>$p|gZ9R3k)h4XzmPrj`g_J097Gmx`(p zT!R7O8wemC*I|036jkglh0Vt(U=%P47zK<1mggomqnso*6fg=h1&jhl0i%fxz$jo8 zFbWt2i~>dhqkvJsC}0#Y3K#{90!9I&fKk9GU=%P47zK<1mggomqnso*6fg=h1&jhl z0i%FXz$jo8FbWt2i~>dhqkvJsC}0#Y3K#{90!D%VZ3Tk(jRE@60{T4yy54uAx_*|g zBl!IRiZAjtfZr(~e3b8hk*{Cp>yvyP=PUib0j2*T*!>0Sw8YArfRIz_c z`FbH=SM$}K)`X1$MggOMQNSo*6fg=H1&jhl0i%FXz$jo8FbWt2i~>dhqkvJsC}0#Y z3K#{90!9I&fKk9GU=%P47zK<1mggomqnso*6fg=h1&jhl0i%fxz$jo8fbwt2i~>dh zqkvJsC}0#Y3K#{90!9I&fKk9G@Q13vx$hC}=iRhJoZD>MySBIG*4lPmLp0r&v&3x~ zG3<(mjoooniEs@QwwOTjOb$dD% z7q?|=+z!^&MY|&zJC}(ha#{FUR~NtAPNZ@+`E4ZZH_T_BKKN8KwGj=w9cV9degceBL-Hv{Y_@K%->dY2U%JNOHnbfLYk44HBjTJmtEev;)a|R z=b;LAruLvx?AznnzMeR0CL2)gWUFc@>yqhcBpGk&%f{`_NHm_Ka)oTwKty&$MdA&K zbk;_RDdSu^gIcz%bv9}_k+XVGDI(ka z_6^=#r+f=nnDW%t+!ebn8&Bmj`!?5Ex3{ge$)DCUHlp45&|9~V%vuS`yxUFX+R|ow z-SJA&Gerc>DjdZwL;=ejfLJxZLtbJ825$#^7V-AS1b`DBu| zToZakPa+k`#buR`$ap)tH)40hyAmlIRT=Fj#?kT}w5z1umx}N0jiW=w=+wE>5Mz%p{jRiz__={JJg8#s;U~9Vfk100 z7zzf0f%YKKh%bbncafi(1wvfz8xSM>J2MwEZsy;Axej<4eh6lo@m9v8ji)f3j6cpa zit(e2L;U+RuLDzlt&GzPmHogv^?NgqGj3))!ML6A^0QR>amG6tH?LRx!@y*}m+|NM z{s7~b84ojFx=7g@W&Atc1kwMp6g z9OHJztIt;Vdl?^KJk0nZ#-ogXz_`fx4aVb)Z(XA71>dLg`&-7Xj9+Ek%Xs@zm41Zr z*BBQWht5&=#~DW$Pcc5gSn%%>{eW>h-O3FF=yl)v{g9%1}Nou2V` z38PIl@b3=&gmE|HR~Zj5UgTHli;OR3{5<398ba5ax1w$r%aypesi%gl!x3ad?n`tz z=)uFloz*_k^tt8e=!&xj{b^#g3V#pxuXJJh&7~`G6e)lYUAE)o#>ChC^;za?OzDY_ z?k7K*@5aQ}zbo}~=4)KyS9|y_Onl0KF3SSSe~mT2SgOv7R=4-6^xLv__W8&-a@oDC3tocC? z-;If{f4}P$=4-6^g62bdJ*4^iLd9cXPB??eEE95JO6xDevLKXU0%xHjVXUUKYoz;8f$*Q8J60`FcIDo%tHi zm#^0k4=`Wj`SSI8;}Pa-tof~;`g3C{zh0mGhWQ6ドルzFV)k^qb=K%z+D(ej00jyC;7) zruT`SM4Z ze+Tn5)_iw)Nq;w{{PlY8e&%aDU;a4f|25`otof~;^1CtRuh*03tWf3GSo1?3z8e!? zuRlM+e2q2Vtv8k5jfvmO>&-`)ud(L4^CP|+6JM`ym%dB+ud(L4^P4OGBIm!C`5J3} zz*BxVru@g5{}S^x*8J1uKgIl&7c2iY)_iw<kQUO#VL$yh&ct!J#Cw?4>NKW|a~F*@;wmW6&i-|Od>s0S|%-TIAFH1Y5*oI1|aY65yZm#DTwU@E2t`X+3-IMA|CVO+( zJjLb?nc!C5REm%8Zrx#TDOt8SoibBSh8$aH3lL_p-&2v7D^dL%i8x2^rs$h)vqg7z zRQOSct-#($Ozv7?3maRqbMGNq7VV@q@y2UMU#FeG7M0vk)SIxhb&5^cwhi=;c56$m z#X_{yNR@qVGjqF5+k%v{x1Y7uW4G3=dnvQV&Sa!3>!}pANs8^%QpCNeWIR@(Y}4uT+<;bpyz|v|*!!b4oq$nputkswywc{mymx1!pc)pb(pcl3#cnt% znGh+dq&&QsATL!yE@UC4f74LNG?)Q z7;iy;2d>s@S6Qz0sJV1cZzi72#$)J8iHv;b;EZ&@5Ri%YT5XNCwYg53*y&7E)(xb?~bF~ zo$-u({eyaTgM9zQRk-^4Su)%4WW48XYrQQIvbJ@EEDOUt^{BZ7pQj&{?^tY0)WLAw zd<|es;y&ra#2b4qr|_civs|2vv=g0m$thlmv9bi9ylr(*etj?!A-K8?Z*36 zr!f2u^~A=`L?-K5ZoKmyLoIhI8)O4lyMA*Fvw&3>Dn+L8Do>qzY}(euZ7|)bTjA~K z=dOw!ZhEI} z>kj+&t%&61cEyUOl(2EO&61PuMZ_(eH{*SsXuKEi??pP2@sRMw)X1ドル(niW$wJ5k-b zS*aRkr)pS_`jo5dUJO)N*NEDkS-iejyCUd&eYoVyBiws+8tZF@2(A*UV8(*Jkyn` z-BGK_*GJ=x>tc0l(n3Fj&bgp}^EV@DL{#9~? zxF+FJe>P7qo>!7FN}8t^^_XU!UgrFcVD>uL{TyYUUdl7un=KYAA0^DwOO(DZd<(dc zo2M7~6=7vFvRpmUJiX9g*vN +#include + +struct ListNode { + int val; + ListNode *next; + ListNode(int x) : val(x), next(nullptr) {} +}; + +class Solution { +public: + bool hasCycle(ListNode *head) + { + if (!head) + return false; + ListNode *slow = head, *fast = head; + while(fast && fast->next) + { + slow = slow->next; + fast = fast->next->next; + + if (slow == fast) + return true; + } + return false; + } + + bool hasCycle2(ListNode *head) + { + std::unordered_set seen; + while (!head) + { + if (seen.count(head)) + { + return true; + } + seen.insert(head); + head = head->next; + } + return false; + } + + + void swap(ListNode *a, ListNode *b) + { + int tmp = a->val; + a->val = b->val; + b->val = tmp; + } + + ListNode* sortList(ListNode *head) + { + int n = 0; + ListNode *temp; + while (temp) + { + n++; + temp = temp->next; + } + + for (int i = 1; i < n; ++i) + { + ListNode *cur = head; + while (cur->next) + { + if (cur->val> cur->next->val) + { + swap(cur, cur->next); + } + cur = cur->next; + } + } + return head; + } + + ListNode* sortList2(ListNode *head) + { + if (!head || !head->next) + { + return head; + } + + ListNode *slow = head, *fast = head->next; + while (fast && fast->next) + { + fast = fast->next->next; + slow = slow->next; + } + ListNode* temp = slow->next; + slow->next = nullptr; + + ListNode *l1 = sortList(head); + ListNode *l2 = sortList(temp); + ListNode *ret = new ListNode(0); + ListNode *h = ret; + while (l1 && l2) + { + if (l1->val < l2->val) + { + h->next = l1; + l1 = l1->next; + } + else + { + h->next = l2; + l2 = l2->next; + } + h = h->next; + } + + if (l1) + { + h->next = l1; + } + if (l2) + { + h->next = l2; + } + return ret->next; + } + + + ListNode* sortList3(ListNode *head) + { + if (!head) + { + return nullptr; + } + + int n = 0; + ListNode *temp = head; + while (temp) + { + n++; + temp = temp->next; + } + + ListNode *ret = new ListNode(0); + ret->next = head; + + int interval = 1; + while (interval < n) + { + ListNode *pre = ret, *h = ret->next; + + while (h) + { + ListNode *h1 = h; + int i = interval; + while (h && i) + { + h = h->next; + i--; + } + if (i) + { + break; // h2 not exists + } + ListNode *h2 = h; + i = interval; + while (h && i) + { + h = h->next; + i--; + } + int c1 = interval, c2 = interval - i; + + while (c1 && c2) + { + if (h1->val < h2->val) + { + pre->next = h1; + h1 = h1->next; + c1--; + } + else + { + pre->next = h2; + h2 = h2->next; + c2--; + } + pre = pre->next; + } + pre->next = c1 ? h1 : h2; + while (c1> 0 || c2> 0) + { + pre = pre->next; + c1--; + c2--; + } + // pre->next = h; + } + interval *= 2; + } + return ret->next; + } +}; + +int main() +{ + ListNode *head = new ListNode(4); + head->next = new ListNode(2); + head->next->next = new ListNode(1); + head->next->next->next = new ListNode(3); + + Solution s; + head = s.sortList3(head); + while (head) + { + std::cout << head->val << " "; + head = head->next; + } + + + +} + diff --git a/leetcode/minStack.cc b/leetcode/minStack.cc new file mode 100644 index 0000000..5a5077c --- /dev/null +++ b/leetcode/minStack.cc @@ -0,0 +1,66 @@ +/* + * @Author: vihowe + * @Date: 2022年02月18日 17:40:10 + * @LastEditTime: 2022年02月18日 17:46:39 + * @FilePath: /Algorithm/leetcode/minStack.cc + */ +#include +class MinStack { +public: + MinStack() { + } + + void push(int val) { + if (s.empty()) + { + s.push(val); + min_s.push(val); + } + else + { + int cur_m = min_s.top(); + s.push(val); + min_s.push(val < cur_m ? val : cur_m); + } + } + + void pop() { + if (!s.empty()) + { + s.pop(); + min_s.pop(); + } + } + + int top() { + if (!s.empty()) + { + return s.top(); + } + return -1; + } + + int getMin() { + if (!s.empty()) + { + return min_s.top(); + } + else + { + return -1; + } + } + +private: + std::stack s; + std::stack min_s; +}; + +/** + * Your MinStack object will be instantiated and called as such: + * MinStack* obj = new MinStack(); + * obj->push(val); + * obj->pop(); + * int param_3 = obj->top(); + * int param_4 = obj->getMin(); + */ \ No newline at end of file diff --git a/leetcode/sort.cc b/leetcode/sort.cc index b7bc7ab..3f1cf8e 100644 --- a/leetcode/sort.cc +++ b/leetcode/sort.cc @@ -1,11 +1,12 @@ /* * @Author: vihowe * @Date: 2022年02月16日 19:37:10 - * @LastEditTime: 2022年02月16日 22:56:27 - * @FilePath: /leetcode/sort.cc + * @LastEditTime: 2022年02月19日 18:41:04 + * @FilePath: /Algorithm/leetcode/sort.cc */ #include #include +#include class Solution { @@ -117,14 +118,140 @@ class Solution { } } } + + int partition2(std::vector &nums, int left, int right) + { + int pivot = nums[left]; + while (left < right) + { + while (left < right && nums[right] <= pivot) right--; + if (left < right) + { + nums[left] = nums[right]; + } + + while (left < right && nums[left]>= pivot) left++; + if (left < right) + { + nums[right] = nums[left]; + } + } + nums[left] = pivot; + return left; + } + + void kthBiggestHelper(std::vector &nums, int k, int left, int right) + { + if (left>= right) + return; + int pivotIdx = partition2(nums, left, right); + kthBiggestHelper(nums, k, left, pivotIdx - 1); + kthBiggestHelper(nums, k, pivotIdx + 1, right); + + } + + int kthBiggest(std::vector &nums, int k) + { + kthBiggestHelper(nums, k, 0, nums.size() - 1); + return nums[k-1]; + } + + /************************heap sort*******************************/ + void adjustHeap(std::vector &nums, int i, int n) + { + for (int k = 2 * i + 1; k < n; k = 2 * k + 1) + { + if (k + 1 < n && nums[k+1]> nums[k]) + { + k++; + } + if (nums[k]> nums[i]) + { + std::swap(nums[k], nums[i]); + i = k; + } + } + } + + int findKthLargest(std::vector &nums, int k) + { + int n = nums.size(); + for (int i = (n - 1) / 2; i>= 0; --i) + { + adjustHeap(nums, i, n); + } + for (int i = 0; i < k; ++i) + { + std::swap(nums[0], nums[n-1-i]); + adjustHeap(nums, 0, n - 1 - i); + } + return nums[n - k]; + } + void heapSort(std::vector &nums) + { + int n = nums.size(); + // construct the heap + // start from the first non-leaf node + for (int i = (n - 1) / 2; i>= 0; --i) + { + adjustHeap(nums, i, n); + } + for (int i = n - 1; i> 0; --i) + { + std::swap(nums[0], nums[i]); + adjustHeap(nums, 0, i); + } + } +}; + + +class MedianFinder { + std::priority_queue, std::less> queMin; + std::priority_queue, std::greater> queMax; + +public: + MedianFinder() {} + + void addNum(int num) + { + if (queMin.empty() || num <= queMin.top()) + { + queMin.push(num); + if (queMin.size()> queMax.size() + 1) + { + queMax.push(queMin.top()); + queMin.pop(); + } + } + else + { + queMax.push(num); + if (queMax.size()> queMin.size()) + { + queMin.push(queMax.top()); + queMax.pop(); + } + } + } + + double findMedian() + { + if (queMin.size()> queMax.size()) + { + return queMin.top(); + } + return (queMin.top() + queMax.top()) / 2; + } + }; int main() { - std::vector nums {2, 0, 2, 0, 1, 0}; + std::vector nums {3,2,3,1,2,4,5,5,6}; Solution s; // s.wiggleSort(nums); - s.threeWayPartition(nums); + s.heapSort(nums); + // std::cout << s.kthBiggest(nums, 4) << std::endl; for (auto i : nums) { std::cout << i << " "; From 68591f2f2f456f8773b95268d989245f1185dcc1 Mon Sep 17 00:00:00 2001 From: vihowe Date: 2022年2月23日 10:22:40 +0800 Subject: [PATCH 3/7] leetcode --- leetcode/linkList | Bin 63016 -> 0 bytes leetcode/linkList.cc | 214 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 206 insertions(+), 8 deletions(-) delete mode 100755 leetcode/linkList diff --git a/leetcode/linkList b/leetcode/linkList deleted file mode 100755 index 78b53b98ec352b229364c246cdc7a5c98ab66f7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63016 zcmeHQ4{%(?ecqF7EMwz4z<|r)9|;g+z&gp2zn-qtm^ykb%lrt*i4*#cx;se+r#o?x z@}IU!Wo&hHK0Bx>gfyW+lSyYhq@7VilQ@~+9DyL0CWAsIjY*hRnUM5}5KtN*N}yH0 z-|lbk-aW}!n28}QZo0+VW!-)&#a4cNm2gf(c2*$++umV)Xh&rd$#1TV6O7@CpyMpQZQHr{ z-W&s5y!IwmqcDhHex6E0ctJTifdMzP?QE{EBU_5{+I!^&Wp9{MXsih}Y_IGe*|WRj z$=-MdiM;j>-l*)2vH`-Rd+9UFzpiN1j_-}edvkU!(&4q&@P1`)nhg-Huvapy0=6B^ z<}!&?7sq?;uh1whpun2u{^)oexwmP~8V`*mhUi)l5!lFNn1A)2#T6WP4ko0j}hi zgG2e{x-sDK3s`=d)kXWI%WT`ph@IWn(~(Zvy}8UO?G+VWP-`U{`h&hIF4X{6+m1zY zk#dCBzv6)MuZEKlcH1j6RjAzGw{6+J)w+3$?yE&lIf3c3YMr{0?sVwSyWx3=Kv4+F zy9QV4L!ZKR00~!o6SpAB$tQ$p1txt+@9rmsxCZ#dvqH3^pi261b<%ydzo;(|dq;;8m*w@?j(j@sd1wdj--m*5~jui<#8vmszi#$vk#)&7x( z#-IMXdc*~BAX|LE_AQlRrR7)^h8fxJCk1imqC12oA z^xA9J)UAP2i4N)K26uX~62oC-`nG-9T)bz^O-v!H;%XcL9IK#bGp^S#CVkDvC}0#Y z3K#{90!9I&fKk9GU=%P47zK<1mggomqnso*6fg=h1&jhl0i%fxz$jo8fbwt2i~>dh zqkvJsC}0#Y3j84`urr+hY52g4?PJy(x6mYB>A7y72cNBSq6%cTK0bD)1p_z!*> zq;TQJWy@v3rV1gaiE}v8c-8r^8YW22OGDPw~oF~FK%qFByfrkq2f6qUo&#G4`X3bj`->{-ki2o!=O3gOs3+Is z1iNT5)X=P>1?#~B#TnR{e1v>1JgQt*^;67SUw4}Qpgjd2rP+hh%6)*+O5PgwxUqY- z8x(bDkj^DHNYPWfAx2ドル}`C9A2yfsu;JkWnw3=Q_VOb@9NQq&=Nqh$I{WqPE53|fXa z`us=eEl7k%kRcjnxCU2*W%(iEVOjpelUJxz!>&{a%Ty@ikW4isZ>q@A$rv&x&-@2b z_s9WO^Ml=poTT?vfrlA~3r8qgTPDt^Z)mU!asGQ%jiEdbp~fickUW>lqdE2IWk!lV6}bfB0WBGmz}D2{h7UlYb9{{7x`y8sX{i{wGG@nCxIh=MB7ssyhw$uORg= zbe1WZnmULa$j}!G{Zr1%ARvH9^rrkbooaZF-WR;%@nJV#_D^I6dZFc&e2ue`#K^IP9UglU#hG#N?ks6IJ-dT9%kcmWAKu>axPPU>7~kdip!|m& z41x{@wK+xzHJ-T3I)-$ljDO_-1!Q^lzc`FwIRD*}Dj5G@bsAotbbf_8R-KyA&(R@< z9vf=;ii|pBeWg@=>t$Dwq+`zKF}tv)M`;iX7Z#y{oUm`q`6_N|$j66d z4%?`C7AWCPaQluPvK|8G*vDGP&YWUz`Te$n|fjFrl`UHU`C z(HS16VZ!+-5=r*tb(Dff{qel@?MZr@SxWmP>T5jT@@*;V=g$U#UW!(ElCpnAQHT+f z*OuZjAvs?{d}Se>kLjci*^zB${}WV)Xz^5wIxA;TC*-2R+)InepE0KcE_dqotlAUm z$@wrDlrv3vexde*_IXHL>GOZN=$?ZVfB%c)$ou9Y4D&n%<#$e?zcc8)%ray>t!i-a zL)6$`e}g6r*7hYiBcYGTd*P-N{y`cfxW=a^-=`*llc+u?d=1Q7$DqWx^Q4-|Fj8Q& z*k~Q|e;gA%Xf3#n7@2ZZHJ&kxS{Ip|C|lu4=Hr{?9r#Smsj%~?nlCq6NBswBFmkpl zXGc(FBhDt3DH79~$C{pe5RFIadZ2$)zz5XXg~a4%hsJW3a5nADRA zL#~7rhWn*rj149c1J}i*9Ef!L8OR^`b4rSWI4|JOFeXDtq7ow@Wc)LTFG&7i(SHyv zha2!c6q57jASI=xWuaw4)r;1Ci@YPXN6kR{bIDz){WZAdJo8&wpmyoQqjYh;A$x1t z^+}psrAl>0QV=cUqpHQo3PQd#6HwcfGr@rKpJ$OGV@@Xw`Io%uc=|nbkJ$rqc|3(} zOjGW@Q0^~!e5U-NwDUK}7Rzt6o5JWYmF*rxl*W|H5Ch+*jtA-1wUBLyW{oNT@qf+_ zQF2KfppgG~k$v*aXCXOqQ+`+spwl_`{f5*-BWXFw%}6cpQEgMs9x{rXw7x^1yRRtw zH7ti{{3x$j;g#du0AI_C&Qq*U`{4C#wQk1WvN*5dmhy+X77$@iZOAHlG5Waor)wX9`CU?!JNW>xD$ zeUzmy>4*9MlzKRFLB_>{{+xfaRwJAz&1Acz;j~B%&rwTd%ysx#r^~3dtdul$wEP$}vU(y#N4)S9E@Fe5CkG2c_=eiI3752ROX+5Z2ARk$t zQuo3$sq9|PZ4|)jY*I}zNM~~lRhnuNv**LRkjDRIlzqY%J}^ydaot%^ggNHVjWWCD zfNDFl?a^ZyJv|*5^Evq2K;6bX{khy8PoW3Z;hg!;FMX)g9#mVP+D849)@Y5=%ZlLx zNm@>Z^ED_Kn&qrv;sOl3{*}7D&C7rE_f;r^>w#9ar+oh#`Mzm9ByY5)_2A^L|6`a7 zW-8lHbMw#?6=}%&HTn>(TOGg?4*l62igv=ul?pV@<6-}}|9ic8odryqt5(k8)5`r~ zkPca6YOqC%FDHjTp%xTtk^lHFXIeLu=73rKM}J?iC%6P(8MKo_GKZO~&e|-*%vCk=e6~C< zmFH#h9FXVpw<=3vnh?^px9;%*5m_3o!75 ztq5UtbiG(D#Okvjtr87bBz^SkA5@7>tn@$OJNuVa;z3_Xh;RGOE>w$u^-_Yn79Q6ynFExpYKmg*#$u*oAmd$$WXu~ ziD{Wg73ドルTQTcBC}-RE8a1jVa2;Dirh`g>6N8|`tZ)s1VQ4u2?$YwKG4JuJoJ?`faM zRbbqlCXDM+jEmKXS}Fo!n<|ybh@7t;!wv>$p|gZ9R3k)h4XzmPrj`g_J097Gmx`(p zT!R7O8wemC*I|036jkglh0Vt(U=%P47zK<1mggomqnso*6fg=h1&jhl0i%fxz$jo8 zFbWt2i~>dhqkvJsC}0#Y3K#{90!9I&fKk9GU=%P47zK<1mggomqnso*6fg=h1&jhl z0i%FXz$jo8FbWt2i~>dhqkvJsC}0#Y3K#{90!D%VZ3Tk(jRE@60{T4yy54uAx_*|g zBl!IRiZAjtfZr(~e3b8hk*{Cp>yvyP=PUib0j2*T*!>0Sw8YArfRIz_c z`FbH=SM$}K)`X1$MggOMQNSo*6fg=H1&jhl0i%FXz$jo8FbWt2i~>dhqkvJsC}0#Y z3K#{90!9I&fKk9GU=%P47zK<1mggomqnso*6fg=h1&jhl0i%fxz$jo8fbwt2i~>dh zqkvJsC}0#Y3K#{90!9I&fKk9G@Q13vx$hC}=iRhJoZD>MySBIG*4lPmLp0r&v&3x~ zG3<(mjoooniEs@QwwOTjOb$dD% z7q?|=+z!^&MY|&zJC}(ha#{FUR~NtAPNZ@+`E4ZZH_T_BKKN8KwGj=w9cV9degceBL-Hv{Y_@K%->dY2U%JNOHnbfLYk44HBjTJmtEev;)a|R z=b;LAruLvx?AznnzMeR0CL2)gWUFc@>yqhcBpGk&%f{`_NHm_Ka)oTwKty&$MdA&K zbk;_RDdSu^gIcz%bv9}_k+XVGDI(ka z_6^=#r+f=nnDW%t+!ebn8&Bmj`!?5Ex3{ge$)DCUHlp45&|9~V%vuS`yxUFX+R|ow z-SJA&Gerc>DjdZwL;=ejfLJxZLtbJ825$#^7V-AS1b`DBu| zToZakPa+k`#buR`$ap)tH)40hyAmlIRT=Fj#?kT}w5z1umx}N0jiW=w=+wE>5Mz%p{jRiz__={JJg8#s;U~9Vfk100 z7zzf0f%YKKh%bbncafi(1wvfz8xSM>J2MwEZsy;Axej<4eh6lo@m9v8ji)f3j6cpa zit(e2L;U+RuLDzlt&GzPmHogv^?NgqGj3))!ML6A^0QR>amG6tH?LRx!@y*}m+|NM z{s7~b84ojFx=7g@W&Atc1kwMp6g z9OHJztIt;Vdl?^KJk0nZ#-ogXz_`fx4aVb)Z(XA71>dLg`&-7Xj9+Ek%Xs@zm41Zr z*BBQWht5&=#~DW$Pcc5gSn%%>{eW>h-O3FF=yl)v{g9%1}Nou2V` z38PIl@b3=&gmE|HR~Zj5UgTHli;OR3{5<398ba5ax1w$r%aypesi%gl!x3ad?n`tz z=)uFloz*_k^tt8e=!&xj{b^#g3V#pxuXJJh&7~`G6e)lYUAE)o#>ChC^;za?OzDY_ z?k7K*@5aQ}zbo}~=4)KyS9|y_Onl0KF3SSSe~mT2SgOv7R=4-6^xLv__W8&-a@oDC3tocC? z-;If{f4}P$=4-6^g62bdJ*4^iLd9cXPB??eEE95JO6xDevLKXU0%xHjVXUUKYoz;8f$*Q8J60`FcIDo%tHi zm#^0k4=`Wj`SSI8;}Pa-tof~;`g3C{zh0mGhWQ6ドルzFV)k^qb=K%z+D(ej00jyC;7) zruT`SM4Z ze+Tn5)_iw)Nq;w{{PlY8e&%aDU;a4f|25`otof~;^1CtRuh*03tWf3GSo1?3z8e!? zuRlM+e2q2Vtv8k5jfvmO>&-`)ud(L4^CP|+6JM`ym%dB+ud(L4^P4OGBIm!C`5J3} zz*BxVru@g5{}S^x*8J1uKgIl&7c2iY)_iw<kQUO#VL$yh&ct!J#Cw?4>NKW|a~F*@;wmW6&i-|Od>s0S|%-TIAFH1Y5*oI1|aY65yZm#DTwU@E2t`X+3-IMA|CVO+( zJjLb?nc!C5REm%8Zrx#TDOt8SoibBSh8$aH3lL_p-&2v7D^dL%i8x2^rs$h)vqg7z zRQOSct-#($Ozv7?3maRqbMGNq7VV@q@y2UMU#FeG7M0vk)SIxhb&5^cwhi=;c56$m z#X_{yNR@qVGjqF5+k%v{x1Y7uW4G3=dnvQV&Sa!3>!}pANs8^%QpCNeWIR@(Y}4uT+<;bpyz|v|*!!b4oq$nputkswywc{mymx1!pc)pb(pcl3#cnt% znGh+dq&&QsATL!yE@UC4f74LNG?)Q z7;iy;2d>s@S6Qz0sJV1cZzi72#$)J8iHv;b;EZ&@5Ri%YT5XNCwYg53*y&7E)(xb?~bF~ zo$-u({eyaTgM9zQRk-^4Su)%4WW48XYrQQIvbJ@EEDOUt^{BZ7pQj&{?^tY0)WLAw zd<|es;y&ra#2b4qr|_civs|2vv=g0m$thlmv9bi9ylr(*etj?!A-K8?Z*36 zr!f2u^~A=`L?-K5ZoKmyLoIhI8)O4lyMA*Fvw&3>Dn+L8Do>qzY}(euZ7|)bTjA~K z=dOw!ZhEI} z>kj+&t%&61cEyUOl(2EO&61PuMZ_(eH{*SsXuKEi??pP2@sRMw)X1ドル(niW$wJ5k-b zS*aRkr)pS_`jo5dUJO)N*NEDkS-iejyCUd&eYoVyBiws+8tZF@2(A*UV8(*Jkyn` z-BGK_*GJ=x>tc0l(n3Fj&bgp}^EV@DL{#9~? zxF+FJe>P7qo>!7FN}8t^^_XU!UgrFcVD>uL{TyYUUdl7un=KYAA0^DwOO(DZd<(dc zo2M7~6=7vFvRpmUJiX9g*vN #include + struct ListNode { int val; ListNode *next; @@ -87,8 +88,8 @@ class Solution { return head; } - ListNode *slow = head, *fast = head->next; - while (fast && fast->next) + ListNode *slow = head, *fast = head; + while (fast->next && fast->next->next) { fast = fast->next->next; slow = slow->next; @@ -201,17 +202,214 @@ class Solution { } return ret->next; } + + ListNode* getIntersectionNode(ListNode *headA, ListNode *headB) + { + int n1 = 0, n2 = 0; + ListNode *temp = headA; + while(temp) + { + n1++; + temp = temp->next; + } + temp = headB; + while(temp) + { + n2++; + temp = temp->next; + } + + int d = abs(n1 - n2); + if (n1> n2) + { + while (d) + { + headA = headA->next; + d--; + } + } + else + { + while (d) + { + headB = headB->next; + d--; + } + } + while (headA && headB) + { + if (headA == headB) + { + return headA; + } + headA = headA->next; + headB = headB->next; + } + return nullptr; + + } + + ListNode* reverseList(ListNode* head) + { + ListNode *pre = nullptr, *cur = head, *next = nullptr; + while (cur) + { + next = cur->next; + cur->next = pre; + pre = cur; + cur = next; + } + return pre; + } + + ListNode* reverseList2(ListNode *head) + { + if (!head || !head->next) + { + return head; + } + ListNode *newHead = reverseList2(head->next); + head->next->next = head; + head->next = nullptr; + return newHead; + } + + + ListNode* front; + + bool checkRrecurrsive(ListNode* curr) + { + if (curr) + { + if (!checkRrecurrsive(curr->next)) + { + return false; + } + if (front->val != curr->val) + { + return false; + } + front = front->next; + return true; + } + return true; + } + bool isPalindrome(ListNode *head) + { + front = head; + return checkRrecurrsive(head); + } + + bool isPalindrome2(ListNode *head) + { + if (!head || !head->next) + { + return true; + } + ListNode *slow = head, *fast = head; + ListNode *pre = head, *prepre = nullptr; + while (fast && fast->next) + { + pre = slow; + slow = slow->next; + fast = fast->next->next; + pre->next = prepre; + prepre = pre; + } + if (fast) + { + slow = slow->next; + } + while (pre && slow) + { + if (pre->val != slow->val) + { + return false; + } + pre = pre->next; + slow = slow->next; + } + } + + void deleteNode(ListNode *node) + { + // can not access the head node, so we need to find the previous node + // just to delete the value of node + node->val = node->next->val; + node->next = node->next->next; + } + + ListNode* oddEvenList(ListNode *head) + { + if (!head || !head->next || !head->next->next) + { + return head; + } + int n = 0; + ListNode *temp = head; + while (temp) + { + n++; + temp = temp->next; + } + int k = (n - 1) / 2; + for (int i = 1; i <= k; ++i) + { + ListNode *start = head, *pre = nullptr; + int j = i; + while(j--) + { + pre = start; + start = start->next; + } + + int round = k - i + 1; + while (round--) + { + // swap (start, start->next) + temp = start->next; + start->next = start->next->next; + pre->next = temp; + temp->next = start; + pre = start; + start = start->next; + } + } + return head; + } + + ListNode* oddEvenList2(ListNode *head) + { + if (!head || !head->next || !head->next->next) + { + return head; + } + ListNode *odd = head, *evenHead = head->next, *even = head->next; + while(even && even->next) + { + odd->next = even->next; + odd = odd->next; + even->next = odd->next; + even = even->next; + } + odd->next = evenHead; + return head; + } }; int main() { - ListNode *head = new ListNode(4); - head->next = new ListNode(2); - head->next->next = new ListNode(1); - head->next->next->next = new ListNode(3); + ListNode *head = new ListNode(2); + head->next = new ListNode(1); + head->next->next = new ListNode(3); + head->next->next->next = new ListNode(5); + head->next->next->next->next = new ListNode(6); + head->next->next->next->next->next = new ListNode(4); + head->next->next->next->next->next->next = new ListNode(7); + Solution s; - head = s.sortList3(head); + head = s.oddEvenList(head); while (head) { std::cout << head->val << " "; From e8c991ef32e48ddcc94b60f7e9f434055617d7d4 Mon Sep 17 00:00:00 2001 From: vihowe Date: 2022年2月23日 17:01:51 +0800 Subject: [PATCH 4/7] leetcode --- leetcode/trie.cc | 71 +++++++++++++++++++++++++++++++++++++++++++ leetcode/wordBreak.cc | 64 +++++++++++++++++++++++++++++++++++--- 2 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 leetcode/trie.cc diff --git a/leetcode/trie.cc b/leetcode/trie.cc new file mode 100644 index 0000000..620e231 --- /dev/null +++ b/leetcode/trie.cc @@ -0,0 +1,71 @@ +/* + * @Author: vihowe + * @Date: 2022年02月23日 14:48:54 + * @LastEditTime: 2022年02月23日 15:47:06 + * @FilePath: /Algorithm/leetcode/trie.cc + */ +#include +#include + +class Trie { +private: + std::vector
    children; + bool isEnd; + +public: + Trie() : children(26), isEnd(false) {}; + + void insert(std::string str) + { + Trie *node = this; + for (auto ch : str) + { + if (!node->children[ch - 'a']) + { + node->children[ch - 'a'] = new Trie(); + } + node = node->children[ch - 'a']; + } + node->isEnd = true; + } + + bool search(std::string str) + { + Trie *node = this; + for (auto ch : str) + { + if (node->children[ch - 'a']) + { + node = node->children[ch - 'a']; + } + else + return false; + } + return node->isEnd; + } + + bool startsWith(std::string str) + { + Trie *node = this; + for (auto ch : str) + { + if (node->children[ch - 'a']) + { + node = node->children[ch - 'a']; + } + else + { + return false; + } + } + return true; + } + + std::vector findWords(std::vector> &board, + std::vector words) + { + int m = board.size(), n = board[0].size(); + + } + +}; diff --git a/leetcode/wordBreak.cc b/leetcode/wordBreak.cc index ff6dd08..bc2235c 100644 --- a/leetcode/wordBreak.cc +++ b/leetcode/wordBreak.cc @@ -1,12 +1,13 @@ /* * @Author: vihowe * @Date: 2022年01月31日 10:18:32 - * @LastEditTime: 2022年02月14日 16:47:22 - * @FilePath: /leetcode/wordBreak.cc + * @LastEditTime: 2022年02月23日 14:09:07 + * @FilePath: /Algorithm/leetcode/wordBreak.cc */ #include #include #include +#include class Solution{ public: @@ -44,7 +45,7 @@ class Solution{ } - bool wordBreak(std::string s, std::vector& wordDict) { + bool wordBreak2(std::string s, std::vector& wordDict) { auto dp = std::vector (s.size() + 1, false); auto ws = std::unordered_set (); for (auto word : wordDict) { @@ -60,4 +61,59 @@ class Solution{ } return dp[s.size()]; } -}; \ No newline at end of file + + std::vector ret; + void dfs(std::string s, std::unordered_set wordSet, + int start, std::vector temp) + { + if (start == s.size()) + { + std::string r_temp; + for (int i = 0; i < temp.size(); ++i) + { + r_temp += temp[i]; + if (i < temp.size() - 1) + r_temp += " "; + } + ret.push_back(r_temp); + return; + } + + for (int end = start; end < s.size(); ++end) + { + std::string sub = s.substr(start, end - start + 1); + if (wordSet.find(sub) != wordSet.end()) + { + temp.push_back(sub); + dfs(s, wordSet, end + 1, temp); + temp.pop_back(); + } + } + return; + } + + std::vector wordBreak4(std::string s, std::vector wordDict) + { + auto wordSet = std::unordered_set (); + for (auto word : wordDict) + { + wordSet.insert(word); + } + std::vector temp; // store the intermediate result + dfs(s, wordSet, 0, temp); + return ret; + } +}; + +int main() +{ + std::vector wordDict {"cats", "dog", "sand", "and", "cat"}; + std::string s {"catsanddog"}; + + Solution ss; + std::vector ret = ss.wordBreak4(s, wordDict); + for (auto s : ret) + { + std::cout << s << std::endl; + } +} \ No newline at end of file From e72a13a847d90e3c18af68166b2f6c42ec46b29e Mon Sep 17 00:00:00 2001 From: vihowe Date: Thu, 3 Mar 2022 14:13:06 +0800 Subject: [PATCH 5/7] leetcode --- leetcode/1297.cc | 58 ++++++++++++++ leetcode/476.cc | 55 +++++++++++++ leetcode/795.cc | 36 +++++++++ leetcode/array.cc | 146 ++++++++++++++++++++++++++++++++++- leetcode/dp.cc | 60 ++++++++++++++ leetcode/maxSlidingWindow.cc | 98 +++++++++++++++++++++++ 6 files changed, 451 insertions(+), 2 deletions(-) create mode 100644 leetcode/1297.cc create mode 100644 leetcode/476.cc create mode 100644 leetcode/795.cc create mode 100644 leetcode/dp.cc create mode 100644 leetcode/maxSlidingWindow.cc diff --git a/leetcode/1297.cc b/leetcode/1297.cc new file mode 100644 index 0000000..39424b9 --- /dev/null +++ b/leetcode/1297.cc @@ -0,0 +1,58 @@ +/* + * @Author: vihowe + * @Date: 2022年03月03日 13:05:26 + * @LastEditTime: 2022年03月03日 13:35:38 + * @FilePath: /Algorithm/leetcode/1297.cc + */ +#include +#include +#include +#include +#include + +class Solution { +public: + int maxFreq(std::string &s, int maxLetters, int minSize, int maxSize) + { + int n = s.size(); + std::unordered_map mm; + int ans = 0; + for (int i = 0; i + minSize - 1 < n; ++i) + { + + std::unordered_set ss; + int cnt_letters = 0; + for (int j = i; j - i + 1 <= minSize; ++j) + { + if (!ss.count(s[j])) + { + cnt_letters++; + } + ss.insert(s[j]); + } + if (cnt_letters <= maxLetters) + { + mm[s.substr(i, minSize)]++; + std::cout << s.substr(i, minSize) << std::endl; + } + } + + int max_cnt = 0; + for (auto it = mm.begin(); it != mm.end(); ++it) + { + if (it->second> max_cnt) + { + max_cnt = it->second; + } + } + return max_cnt; + } +}; + +int main() +{ + std::string s = "abcde"; + Solution ss; + ss.maxFreq(s, 2, 3, 3); + +} \ No newline at end of file diff --git a/leetcode/476.cc b/leetcode/476.cc new file mode 100644 index 0000000..6a971da --- /dev/null +++ b/leetcode/476.cc @@ -0,0 +1,55 @@ +/* + * @Author: vihowe + * @Date: 2022年03月03日 11:59:36 + * @LastEditTime: 2022年03月03日 12:51:48 + * @FilePath: /Algorithm/leetcode/476.cc + */ +#include +#include +#include +#include +#include + + +class Solution { +public: + int findSubstringInWraproundString(std::string p) + { + int n = p.size(); + if (n == 0) + { + return 0; + } + + std::unordered_map mm; + mm[p[0]] = 1; + int pre = 1; + for (int i = 1; i < p.size(); ++i) + { + if (p[i] - p[i-1] == 1 || p[i] - p[i-1] == -25) + { + pre++; + } + else + { + pre = 1; + } + mm[p[i]] = std::max(mm[p[i]], pre); + } + int ans = 0; + for (auto it = mm.begin(); it != mm.end(); it++) + { + ans += it->second; + } + return ans; + } +}; + + +int main(int argc, char* argv[]) +{ + Solution sol; + std::string p = "aabb"; + auto ret = sol.findSubstringInWraproundString(p); + std::cout << ret; +} \ No newline at end of file diff --git a/leetcode/795.cc b/leetcode/795.cc new file mode 100644 index 0000000..bba3db7 --- /dev/null +++ b/leetcode/795.cc @@ -0,0 +1,36 @@ +/* + * @Author: vihowe + * @Date: 2022-03-03 13:54:53 + * @LastEditTime: 2022-03-03 14:06:14 + * @FilePath: /Algorithm/leetcode/795.cc + */ + +#include + +class Solution { +public: + + int atMost(std::vector &nums, int k) + { + int n = nums.size(); + int ans = 0, pre = 0; + for (int i = 0; i < n; ++i) + { + if (nums[i] <= k) + { + pre++; + } + else + { + pre = 0; + } + ans += pre; + } + return ans; + } + int numSubarrayBoundedMax(std::vector &nums, int left, int right) + { + // sum of prefix + return atMost(nums, right) - atMost(nums, left-1); + } +}; diff --git a/leetcode/array.cc b/leetcode/array.cc index 050a3b1..058e849 100644 --- a/leetcode/array.cc +++ b/leetcode/array.cc @@ -1,12 +1,14 @@ /* * @Author: vihowe * @Date: 2022年02月17日 15:43:23 - * @LastEditTime: 2022年02月17日 16:57:17 + * @LastEditTime: 2022年03月01日 14:58:47 * @FilePath: /Algorithm/leetcode/array.cc */ #include #include #include +#include +#include class Solution0 { public: @@ -64,6 +66,133 @@ class Solution0 { nums[j] = 0; } } + + int minSubArrayLen(int target, std::vector &nums) + { + int n = nums.size(); + int ans = n + 1; + int l = 0, r = 0; + int sum = 0; + while (r < n) + { + sum += nums[r]; + while (sum>= target) + { + ans = std::min(ans, r - l + 1); + sum -= nums[l]; + l++; + } + } + return ans == n + 1 ? 0 : ans; + } + + + bool haveRepeat(std::unordered_map &mm) + { + auto map_it = mm.begin(); + while (map_it != mm.end()) + { + if (map_it->second> 1) + { + return true; + } + map_it++; + } + return false; + } + + int lengthOfLongestSubstring(std::string s) + { + std::unordered_map mm; + int n = s.size(); + int ans = 0; + int l = 0, r = 0; + while (r < n) + { + mm[s[r]] += 1; + while (mm[s[r]]> 1) + { + mm[s[l++]] -= 1; + } + ans = std::max(ans, r - l + 1); + r++; + } + return ans; + } + + bool isDone(const std::unordered_map &mm) + { + auto map_it = mm.begin(); + while (map_it != mm.end()) + { + if (map_it->second> 0) + { + return false; + } + map_it++; + } + return true; + } + + std::string minWindow(std::string s, std::string t) + { + // 返回s中覆盖t全部字符的最小字串 + int n_s = s.size(); + int n_t = t.size(); + if (n_s < n_t) + { + return ""; + } + std::unordered_map mm; + for (auto c : t) + { + mm[c]++; + } + int l = 0, r = 0, ans_l = 0, ans_r = 0, ans_min = n_s + 1; + while (r < n_s) + { + mm[s[r]]--; + while (isDone(mm)) + { + if (r - l + 1 < ans_min) + { + ans_min = r - l + 1; + ans_l = l; + ans_r = r; + } + mm[s[l++]]++; + } + r++; + } + return ans_min == n_s + 1 ? "" : s.substr(ans_l, ans_r - ans_l + 1); + } + + + void nextPermutation(std::vector &nums) + { + int n = nums.size(); + int i, j , k; + i = j = k = n - 1; + while (j> 0) + { + i = j - 1; + if (nums[j]> nums[i]) + { + break; + } + j--; + } + while (k>= j) + { + if (nums[k]> nums[i]) + { + std::swap(nums[k], nums[i]); + break; + } + k--; + } + std::reverse(nums.begin()+j, nums.end()); + } }; class Solution { @@ -89,4 +218,17 @@ class Solution { private: std::vector nums; -}; \ No newline at end of file +}; + +int main() +{ + std::vector nums {3, 2, 1}; + std::string s = "ADOBECODEBANC"; + std::string t = "ABC"; + Solution0 ss; + // ss.lengthOfLongestSubstring(s); + auto ans = ss.minWindow(s, t); + std::cout << ans; + + +} \ No newline at end of file diff --git a/leetcode/dp.cc b/leetcode/dp.cc new file mode 100644 index 0000000..a1769a2 --- /dev/null +++ b/leetcode/dp.cc @@ -0,0 +1,60 @@ +/* + * @Author: vihowe + * @Date: 2022-02-28 21:51:45 + * @LastEditTime: 2022-02-28 22:06:45 + * @FilePath: /Algorithm/leetcode/dp.cc + */ +#include +#include + + +class Solution { + bool dp[1010][1010]; +public: + + std::string longestPalindrome(std::string s) + { + int n = s.size(); + // 如果不用静态二维数组 + std::vector> dp(n, std::vector(n, 0)); + if (n == 0) + { + return ""; + } + int maxLen = 1; + std::string ans = s.substr(0, 1); + + for (int i = 0; i < n; ++i) + { + for (int j = 0; j < n; ++j) + { + if (j <= i) + { + dp[i][j] = true; + } + else + { + dp[i][j] = false; + } + } + } + + for (int intv = 1; intv < n; ++intv) + { + for (int i = 0; i < n - intv; ++i) + { + int j = i + intv; + if (s[i] == s[j] && dp[i+1][j-1]) + { + dp[i][j] = true; + if (j - i + 1> maxLen) + { + maxLen = j - i + 1; + ans = s.substr(i, j - i + 1); + } + } + } + } + return ans; + } +}; \ No newline at end of file diff --git a/leetcode/maxSlidingWindow.cc b/leetcode/maxSlidingWindow.cc new file mode 100644 index 0000000..da2326a --- /dev/null +++ b/leetcode/maxSlidingWindow.cc @@ -0,0 +1,98 @@ +/* + * @Author: vihowe + * @Date: 2022年02月23日 19:12:58 + * @LastEditTime: 2022年02月26日 09:51:45 + * @FilePath: /Algorithm/leetcode/maxSlidingWindow.cc + */ +#include +#include +#include + +class Solution { +private: + std::vector heap; +public: + + void adjustHeap(int i) + { + int n = heap.size(); + for (int k = 2 * i + 1; k < n; k = 2 * k + 1) + { + if (k + 1 < n && heap[k+1]> heap[k]) + { + k++; + } + if (heap[k]> heap[i]) + { + std::swap(heap[k], heap[i]); + i = k; + } + else + break; + } + } + + void insert(int val) + { + heap.push_back(val); + int n = heap.size(); + for (int i = (n - 2) / 2; i>= 0; i = i ? (i - 1) / 2 : -1) + { + adjustHeap(i); + } + } + + void del(int val) + { + std::vector::size_type i = 0; + for (; i < heap.size(); ++i) + { + if (heap[i] == val) + break; + } + std::swap(heap[i], heap[heap.size()-1]); + heap.pop_back(); + adjustHeap(i); + } + + int pop() + { + std::swap(heap[0], heap[heap.size()-1]); + int ans = heap.back(); + heap.pop_back(); + adjustHeap(0); + return ans; + } + + std::vector maxSlidingWindow(std::vector &nums, int k) + { + std::vector ans; + int n = nums.size(); + int i = 0; + for (; i < k && i < n; ++i) + { + insert(nums[i]); + } + ans.push_back(heap[0]); + while (i < n) // slide window + { + del(nums[i-k]); + insert(nums[i]); + ans.push_back(heap[0]); + i++; + } + return ans; + } +}; + +int main() +{ + std::vector nums {-6,-10,-7,-1,-9,9,-8,-4,10,-5,2,9,0,-7,7,4,-2,-10,8,7}; + int k = 7; + Solution s; + auto ans = s.maxSlidingWindow(nums, 7); + for (auto i : ans) + { + std::cout << i << " "; + } +} \ No newline at end of file From 276ae0ce46d565bbb3038935f63467fff95f3260 Mon Sep 17 00:00:00 2001 From: vihowe Date: Mon, 7 Mar 2022 21:28:46 +0800 Subject: [PATCH 6/7] leetcode --- leetcode/904.cc | 94 ++++++++++++++++++++++++++++++++++++++++++++++++ leetcode/tree.cc | 31 ++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 leetcode/904.cc create mode 100644 leetcode/tree.cc diff --git a/leetcode/904.cc b/leetcode/904.cc new file mode 100644 index 0000000..a62b1e4 --- /dev/null +++ b/leetcode/904.cc @@ -0,0 +1,94 @@ +/* + * @Author: vihowe + * @Date: 2022年03月04日 11:01:46 + * @LastEditTime: 2022年03月07日 19:35:59 + * @FilePath: /Algorithm/leetcode/904.cc + */ +#include +#include +#include +#include + +class Solution { +public: + int totalFruit(std::vector& fruits) + { + int n = fruits.size(); + int first = -1, second = -1, second_idx = -1; + int l = 0, ans = 0, ansl = 0; + while (l < n) + { + int tmp = 0, i = l; + first = fruits[l]; + for (; i < n; ++i) + { + + if (second == -1 && fruits[i] != first) + { + second = fruits[i]; + second_idx = i; + tmp++; + } + else if (fruits[i] == first || fruits[i] == second) + { + tmp++; + } + else { + l = second_idx; + first = -1; + second = -1; + if (tmp> ans) ansl = l; + ans = std::max(tmp, ans); + break; + } + } + if (i == n) + { + if (tmp> ans ) ansl = l; + ans = std::max(tmp, ans); + break; + } + } + return ansl; + } + + int totalFruit2(std::vector& fruits) + { + int k = 2, n = fruits.size(); + std::unordered_map mm; + int ans = 0, l = 0, ansl = 0, ansr = 0; + for (int j = 0; j < n; ++j) + { + if (mm[fruits[j]] == 0) + { + k--; + } + mm[fruits[j]]++; + while (k < 0) // contract the sliding window + { + mm[fruits[l]]--; + if (mm[fruits[l]] == 0) + { + k++; + } + l++; + } + int tmp = j - l + 1; + if (tmp> ans) + { + ansl = l; + } + ans = std::max(ans, j - l + 1); + } + return ansl; + } +}; + +int main() +{ + std::vector nums {1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,439,0,439,0,439,0,439,439,0,0,0,0,366,366,692,692,366,366,692,692,366,692,692,366,366,692,366,692,692,692,366,692,313,692,313,692,692,313,692,313,692,692,313,692,313,313,313,145,313,145,145,420,145,420,145,145,145,145,420,145,145,420,145,145,424,145,145,424,145,464,464,464,145,145,464,145,464,145,145,464,145,960,145,145,960,960,141,141,141,960,960,903,960,395,395,960,395,395,960,960,395,960,395,395,960,960,960,395,395,395,395,395,395,395,960,395,971,971,395,971,386,386,971,386,386,665,386,665,665,386,386,665,665,665,386,386,665,665,665,386,386,665,386,665,386,609,609,386,386,609,386,609,386,386,386,386,386,386,386,609,386,386,386,609,386,386,609,386,386,386,386,386,386,609,609,386,386,609,386,44,386,44,386,44,307,923,923,307,307,982,307,307,461,307,461,461,461,461,461,307,307,461,484,484,484,484,484,484,461,461,461,461,461,505,461,505,505,461,461,505,461,505,461,505,505,505,505,505,505,461,461,505,275,275,275,275,899,275,275,899,968,968,968,899,420,420,404,420,404,420,404,236,404,404,236,404,236,404,236,236,236,404,236,236,236,236,236,236,215,215,236,215,215,236,215,215,236,236,215,215,215,215,236,236,236,236,236,236,215,215,215,215,215,236,215,236,215,236,215,236,215,236,236,492,236,730,730,236,730,236,338,849,338,849,849,338,849,338,849,338,338,338,849,338,338,849,849,338,338,849,849,849,849,338,849,849,849,849,338,338,338,338,759,427,759,759,427,759,759,759,759,759,759,427,759,759,759,664,48,664,664,48,664,48,490,490,490,490,490,48,48,490,490,48,490,48,48,490,490,48,48,490,48,863,72,72,863,863,863,863,72,863,736,863,55,55,863,55,55,55,55,863,863,863,863,863,863,55,863,55,55,55,55,55,863,55,55,346,55,55,55,55,55,55,55,346,346,346,346,55,55,55,55,346,55,55,346,346,346,346,346,55,173,55,55,55,55,173,55,173,173,55,173,95,173,95,173,173,95,95,95,173,173,35,35,173,173,173,173,101,101,101,101,173,101,998,998,101,998,101,998,998,101,101,998,101,101,998,838,838,998,892,287,287,892,892,287,892,892,287,84,287,84,287,719,719,287,719,202,202,719,719,719,202,719,202,719,202,719,202,202,202,202,719,202,719,719,202,719,719,719,719,202,719,202,947,852,947,852,852,852,947,133,947,133,133,682,133,682,682,682,133,133,133,682,682,133,682,682,682,133,133,682,682,133,133,682,682,133,682,682,306,682,682,306,682,992,682,710,710,710,682,682,682,682,710,682,682,682,710,682,682,682,710,710,710,682,682,682,682,682,710,682,710,710,710,682,710,710,682,682,710,710,710,682,710,682,335,682,167,167,167,682,851,851,851,851,682,851,851,682,851,851,851,693,693,693,693,693,851,851,693,693,693,851,693,851,851,693,851,851,922,851,851,851,922,851,922,922,851,922,851,851,922,851,922,922,922,922,922,851,851,539,539,851,539,539,539,539,539,851,539,539,539,851,851,539,539,851,539,851,539,851,539,539,539,851,508,851,851,508,508,851,851,979,979,851,851,851,979,979,979,851,979,851,979,979,979,851,588,588,588,588,851,588,851,588,588,588,588,588,851,588,588,588,851,930,930,930,851,930,930,851,851,851,851,851,930,930,851,930,930,930,930,851,851,851,851,851,851,851,851,718,718,851,769,851,769,851,851,851,851,851,851,769,769,769,851,447,447,447,447,851,851,909,851,851,880,851,851,880,851,851,851,880,880,880,851,880,931,931,931,880,880,931,931,684,684,931,684,931,931,931,242,931,242,242,242,931,242,931,931,931,931,242,931,931,728,931,728,931,848,931,848,188,188,188,188,848,188,188,188,188,848,188,188,848,848,848,848,848,188,848,848,759,848,759,759,848,759,848,931,848,848,931,930,931,930,930,930,930,930,750,750,930,930,930,750,750,930,930,930,750,750,750,930,750,930,930,750,750,750,930,930,750,750,750,930,750,930,930,930,329,930,930,329,784,784,329,329,784,784,329,784,784,329,329,784,329,329,329,784,329,784,329,784,784,784,329,329,784,784,329,784,329,329,784,784,329,575,575,575,575,329,575,329,329,329,575,329,329,260,329,329,329,329,46,329,189,189,618,618,618,618,618,189,189,438,262,363,363,262,262,262,363,262,363,262,262,262,262,363}; + Solution ss; + // auto a = ss.totalFruit(nums); + auto b = ss.totalFruit2(nums); + // std::cout << a << " " << b; +} \ No newline at end of file diff --git a/leetcode/tree.cc b/leetcode/tree.cc new file mode 100644 index 0000000..649496a --- /dev/null +++ b/leetcode/tree.cc @@ -0,0 +1,31 @@ +/* + * @Author: vihowe + * @Date: 2022-03-07 19:37:07 + * @LastEditTime: 2022-03-07 19:41:48 + * @FilePath: /Algorithm/leetcode/tree.cc + */ +#include + +class TreeNode { +public: + int val; + TreeNode *left; + TreeNode *right; + TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} +}; + + +class Solution { + +public: + TreeNode* lowestCommonAncestor(TreeNode *root, TreeNode *p, TreeNode *q) + { + if (!root || root == p || root == q) + return root; + TreeNode *left = lowestCommonAncestor(root->left, p, q); + TreeNode *right = lowestCommonAncestor(root->right, p, q); + if (left && right) + return root; + return left ? left : right; + } +}; \ No newline at end of file From 89b488cfe3693c2ea5a76b8cc0a91f077c89ef07 Mon Sep 17 00:00:00 2001 From: vihowe Date: 2022年7月20日 10:22:13 +0800 Subject: [PATCH 7/7] update --- leetcode/7_12.py | 127 ++++++++++++++++++++++++++++++++++ leetcode/7_13.py | 175 +++++++++++++++++++++++++++++++++++++++++++++++ leetcode/7_14.py | 140 +++++++++++++++++++++++++++++++++++++ leetcode/7_18.py | 12 ++++ leetcode/7_19.py | 55 +++++++++++++++ 5 files changed, 509 insertions(+) create mode 100644 leetcode/7_12.py create mode 100644 leetcode/7_13.py create mode 100644 leetcode/7_14.py create mode 100644 leetcode/7_18.py create mode 100644 leetcode/7_19.py diff --git a/leetcode/7_12.py b/leetcode/7_12.py new file mode 100644 index 0000000..8cb5fc5 --- /dev/null +++ b/leetcode/7_12.py @@ -0,0 +1,127 @@ +from typing import List + + +class Solution: + def combine(self, n: int, k: int) -> List[List[int]]: + ret = [] + tmp = [] + def dfs(t: int): + if len(tmp) == k: + ret.append(list(tmp)) + return + if t> n: + return + + for ne in range(t+1, n+1): + tmp.append(ne) + dfs(ne) + tmp.pop(-1) + dfs(0) + return ret + + + # No216 组合总和3 + def combinationSum3(self, k: int, n: int) -> List[List[int]]: + ret = [] + tmp = [] + def dfs(t): + if sum(tmp) == n and len(tmp) == k: + ret.append(list(tmp)) + return + if sum(tmp)> n or len(tmp)> k: + return + + for ne in range(t+1, 10): + tmp.append(ne) + dfs(ne) + tmp.pop(-1) + + dfs(0) + return ret + + # No17 电话号码的字母组合 + def letterCombinations(self, digits: str) -> List[str]: + n = len(digits) + ret = [] + if n == 0: + return ret + tmp = [] + candidate_set = { + '2': ['a', 'b', 'c'], + '3': ['d', 'e', 'f'], + '4': ['g', 'h', 'i'], + '5': ['j', 'k', 'l'], + '6': ['m', 'n', 'o'], + '7': ['p', 'q', 'r', 's'], + '8': ['t', 'u', 'v'], + '9': ['w', 'x', 'y', 'z'], + } + def dfs(cur): + if len(tmp) == n: + ret.append(''.join(list(tmp))) + return + + s_ne = digits[cur] + + candidates = candidate_set[s_ne] + for candidate in candidates: + tmp.append(candidate) + dfs(cur+1) + tmp.pop(-1) + + dfs(0) + return ret + + # No39 组合总和 + def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: + candidates.sort() + n = len(candidates) + ret = [] + if n == 0: + return ret + tmp = [] + + def search(cur): + if sum(tmp) == target: + ret.append(list(tmp)) + return + if sum(tmp)> target: + return + + for j in range(cur, n): + if len(tmp) + candidates[j]> target: + break + tmp.append(candidates[j]) + search(j) + tmp.pop(-1) + search(0) + return ret + + + # No40 组合总和2 + def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]: + ret = [] + tmp = [] + candidates.sort() + def search(cur_idx): + if sum(tmp) == target: + ret.append(list(tmp)) + if cur_idx == len(candidates): + return + + for j in range(cur_idx, len(candidates)): + if sum(tmp) + candidates[j]> target: + break + tmp.append(candidates[j]) + search(j+1) + tmp.pop(-1) + search(0) + return ret + + # No131 分割回文串 + def partition(self, s: str) -> List[List[str]]: + + + +solution = Solution() +print(solution.letterCombinations("7")) diff --git a/leetcode/7_13.py b/leetcode/7_13.py new file mode 100644 index 0000000..98ef442 --- /dev/null +++ b/leetcode/7_13.py @@ -0,0 +1,175 @@ +from typing import List +from typing import Optional + +class TreeNode: + def __init__(self, val=0, left=None, right=None): + self.val = val + self.left = left + self.right = right + + +class Solution: + def is_num(self, s: str): + try: + float(s) + return True + except ValueError: + pass + try: + import unicodedata + unicodedata.numeric(s) + return True + except Exception: + pass + return False + def evalRPN(self, tokens: List[str]) -> int: + st = [] + for c in tokens: + if self.is_num(c): + st.append(int(c)) + else: + num2 = st.pop(-1) + num1 = st.pop(-1) + if c == '+': + st.append(num1+ num2) + if c == '-': + st.append(num1 - num2) + if c == '*': + st.append(num1 * num2) + if c == '/': + st.append(int(num1 / num2)) + return st[0] + + def generateParenthesis(self, n: int) -> List[str]: + ret = [] + tmp = [] + def dfs(left, right): + if len(tmp) == 2 * n: + ret.append(''.join(tmp)) + return + if left < n: + tmp.append('(') + dfs(left+1, right) + tmp.pop(-1) + if left> right: + tmp.append(')') + dfs(left, right+1) + tmp.pop(-1) + dfs(0, 0) + return ret + + def generateParenthesis2(self, n: int) -> List[str]: + dp = [[] for _ in range(n+1)] + dp[0].append('') + + for i in range(1, n+1): + for p in range(i): + L = dp[p] + R = dp[i-1-p] + for l in L: + for r in R: + dp[i].append(f'({l}){r}') + return dp[n] + + def generateParenthesis3(self, n: int) -> List[str]: + mem = [None for _ in range(n+1)] + mem[0] = [""] + + def recur(m): + if mem[m] != None: + return mem[m] + + tmp = [] + for c in range(m): + for l in recur(c): + for r in recur(n-1-c): + tmp.append(f'({l}){r}') + mem[m] = tmp + return tmp + recur(n) + return mem[n] + + # No15 三数之和 + def threeSum(self, nums: List[int]) -> List[List[int]]: + ret = [] + nums.sort() + for k in range(len(nums)-2): + if k != 0 and nums[k] == nums[k-1]: + continue + i = k + 1 + j = len(nums) - 1 + while i < j: + if nums[i] + nums[j] + nums[k] < 0: + i += 1 + while i < j and nums[i] == nums[i-1]: + i += 1 + elif nums[i] + nums[j] + nums[k]> 0: + j -= 1 + while i < j and nums[j] == nums[j+1]: + j -= 1 + else: + ret.append([nums[i], nums[j], nums[k]]) + i, j = i + 1, j - 1 + while i < j and nums[i] == nums[i-1]: + i += 1 + while i < j and nums[j] == nums[j+1]: + j += 1 + return ret + + + # No98 验证二叉搜索树 + def isValidBST(self, root: Optional[TreeNode]) -> bool: + if not root or (not root.left and not root.right): + return True + + l, r = self.isValidBST(root.left), self.isValidBST(root.right) + if not l or not r: + return False + + + def findm(r, mode): + if mode == 0: # find most left one + while r.left: + r = r.left + else: + while r.right: + r = r.right + return r.val + + l_m = findm(root.left, 1) + r_m = findm(root.right, 0) + return l_m <= root.val and root.val <= r_m + + + # No322. 零钱兑换 + def coinChange(self, coins: List[int], amount: int) -> int: + ret = float('inf') + tmp = [] + coins.sort() + def search(): + nonlocal ret + if sum(tmp) == amount: + ret = min(ret, len(tmp)) + + if sum(tmp)> amount: + return + + for i in range(len(coins)): + tmp.append(coins[i]) + search() + tmp.pop(-1) + + search() + return ret if ret != float('inf') else -1 + + + + + + +so = Solution() +# so.evalRPN( +# ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]) +# so.generateParenthesis3(2) +so.threeSum( +[-2,0,0,2,2]) \ No newline at end of file diff --git a/leetcode/7_14.py b/leetcode/7_14.py new file mode 100644 index 0000000..b3cca04 --- /dev/null +++ b/leetcode/7_14.py @@ -0,0 +1,140 @@ +import collections +from typing import List, Optional + +class TreeNode: + def __init__(self, val=0, left=None, right=None): + self.val = val + self.left = left + self.right = right + + +class Solution: + # No238. 除自身以外数组的乘积 + def productExceptSelf(self, nums: List[int]) -> List[int]: + n = len(nums) + ans = [1 for _ in range(len(nums))] + tmp = nums[0] + for i in range(1, n): + ans[i] *= tmp + tmp *= nums[i] + + tmp = nums[-1] + for j in range(n-2, -1, -1): + ans[j] *= tmp + tmp *= nums[j] + + return ans + + + # 用栈实现中序遍历 + def inOrderTraverse(self, root: Optional[TreeNode]): + if root is None: + return [] + + ans = [] + st = [root] + while st or root: + if root.left: + st.append(root.left) + root = root.left + node = st.pop() + ans.append(node.val) + if node.right: + root = node.right + return ans + + + # No210 课程表2 + def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]: + # numCourses = 2, prerequisites = [[1,0]] + indegree = [0 for _ in range(numCourses)] + adj = [set() for _ in range(numCourses)] + for prerequisite in prerequisites: + course, pre = prerequisite + indegree[course] += 1 + adj[pre].add(course) + + queue = collections.deque([c for c in range(numCourses) if indegree[c]==0]) + + ans = [] + while queue: + c = queue.pop() + ans.append(c) + for cc in adj[c]: + indegree[cc] -= 1 + if indegree[cc] == 0: + queue.append(cc) + + return ans + + # No47. 全排列 II + def permuteUnique(self, nums: List[int]) -> List[List[int]]: + ans = [] + tmp = [] + n = len(nums) + if n == 0: + return ans + + nums.sort() + visited = [0 for _ in range(n)] + def dfs(idx): + if idx == n: + ans.append(tmp[:]) + + for i in range(n): + if visited[i] or (i> 0 and nums[i] == nums[i-1] and not visited[i-1]): + continue + tmp.append(nums[i]) + visited[i] = 1 + dfs(idx+1) + visited[i] = 0 + tmp.pop() + dfs(0) + return ans + + + def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int: + m, n = len(obstacleGrid), len(obstacleGrid[0]) + dp = [[0]*n for _ in range(m)] + dp[0][0] = 1 + for j in range(n): + dp[0][j] = 1 + + flag = False + for j in range(n): + if obstacleGrid[0][j] == 1: + flag = True + break + if flag: + for k in range(j, n): + dp[0][k] = 0 + + flag = False + for i in range(m): + dp[i][0] = 1 + for i in range(m): + if obstacleGrid[i][0] == 1: + flag = True + break + if flag: + for k in range(i, m): + dp[k][0] = 0 + + for i in range(1, m): + for j in range(1, n): + if obstacleGrid[i][j] == 1: + dp[i][j] = 0 + else: + dp[i][j] = dp[i-1][j] + dp[i][j-1] + return dp[-1][-1] + + def integerBreak(self, n: int) -> int: + dp = [1 for _ in range(n)] + for i in range(3, n): + for j in range(1, i-1): + dp[i] = max(j * (i-j), dp[j] * (i-j), dp[i]) + return dp[n] + + +so = Solution() +so.uniquePathsWithObstacles(obstacleGrid=[[0,1],[0,0]]) \ No newline at end of file diff --git a/leetcode/7_18.py b/leetcode/7_18.py new file mode 100644 index 0000000..8a8ac7f --- /dev/null +++ b/leetcode/7_18.py @@ -0,0 +1,12 @@ +from typing import List +class Solution: + def lastStoneWeightII(self, stones: List[int]) -> int: + target = sum(stones) // 2 + dp = [0 for _ in range(target+1)] + + for i in range(len(stones)): + for j in range(target, 0, -1): + if j - stones[i]>= 0: + dp[j] = max(dp[j], dp[j-stones[i]]+stones[i]) + + return sum(stones) - target - dp[target] diff --git a/leetcode/7_19.py b/leetcode/7_19.py new file mode 100644 index 0000000..0ad4f31 --- /dev/null +++ b/leetcode/7_19.py @@ -0,0 +1,55 @@ +from curses.ascii import SO + + +class ListNode: + def __init__(self, val=0, next=None): + self.val = val + self.next = next + +class Solution: + def detectCycle(self, head: ListNode) -> ListNode: + slow, fast = head, head + while fast and fast.next: + slow = slow.next + fast = fast.next.next + + if slow == fast: + p, q = head, slow + while p != q: + p = p.next + q = q.next + return p + return None + def swapPairs(self, head: ListNode) -> ListNode: + dummy_h = ListNode(next=head) + pre = dummy_h + while pre.next and pre.next.next: + cur = pre.next + post = pre.next.next + cur.next = post.next + post.next = cur + pre.next = post + pre = cur + return dummy_h.next + + def reverseList(self, head: ListNode) -> ListNode: + if not head or not head.next: + return head + ret = self.reverseList(head.next) + head.next.next = head + head.next = None + return ret + def reverseList(self, head: ListNode) -> ListNode: + if not head or not head.next: + return head + pre, cur = None, head + while cur: + nt = cur.next + cur.next = pre + pre = cur + cur = nt + return pre + + +so = Solution() +so.swapPairs(ListNode(1,ListNode(2,ListNode(3,ListNode(4))))) \ No newline at end of file

    AltStyle によって変換されたページ (->オリジナル) /