-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
2112 lines (1020 loc) · 586 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>Exchange ProxyLogon RCE</title>
<link href="//web-an-quan/exchange-proxylogon-rce/"/>
<url>//web-an-quan/exchange-proxylogon-rce/</url>
<content type="html"><![CDATA[<h3 id="参考:"><a href="#参考:" class="headerlink" title="参考:"></a>参考:</h3><ul><li><a href="https://www.volexity.com/blog/2021/03/02/active-exploitation-of-microsoft-exchange-zero-day-vulnerabilities/">https://www.volexity.com/blog/2021/03/02/active-exploitation-of-microsoft-exchange-zero-day-vulnerabilities/</a></li><li><a href="https://testbnull.medium.com/ph%C3%A2n-t%C3%ADch-l%E1%BB%97-h%E1%BB%95ng-proxylogon-mail-exchange-rce-s%E1%BB%B1-k%E1%BA%BFt-h%E1%BB%A3p-ho%C3%A0n-h%E1%BA%A3o-cve-2021-26855-37f4b6e06265">https://testbnull.medium.com/ph%C3%A2n-t%C3%ADch-l%E1%BB%97-h%E1%BB%95ng-proxylogon-mail-exchange-rce-s%E1%BB%B1-k%E1%BA%BFt-h%E1%BB%A3p-ho%C3%A0n-h%E1%BA%A3o-cve-2021-26855-37f4b6e06265</a></li><li><a href="https://github.com/mil1200/ProxyLogon-CVE-2021-26855">https://github.com/mil1200/ProxyLogon-CVE-2021-26855</a></li><li><a href="https://www.microsoft.com/security/blog/2021/03/02/hafnium-targeting-exchange-servers/">https://www.microsoft.com/security/blog/2021/03/02/hafnium-targeting-exchange-servers/</a></li><li><a href="https://www.anquanke.com/post/id/234607">https://www.anquanke.com/post/id/234607</a></li></ul><h3 id="漏洞详情:"><a href="#漏洞详情:" class="headerlink" title="漏洞详情:"></a>漏洞详情:</h3><p><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-26855">CVE-2021-26855</a>是<a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-26855">Exchange</a>中的一个服务器端请求伪造(SSRF)漏洞,它使攻击者能够发送任意HTTP请求并通过Exchange Server进行身份验证。</p><p><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-26857">CVE-2021-26857</a>是统一消息服务中的不安全的反序列化漏洞。不安全的反序列化是不可信的用户可控制数据被程序反序列化的地方。利用此漏洞,HAFNIUM可以在Exchange服务器上以SYSTEM身份运行代码。这需要管理员权限或要利用的另一个漏洞。</p><p><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-26858">CVE-2021-26858</a>是Exchange中身份验证后的任意文件写入漏洞。如果HAFNIUM可以通过Exchange服务器进行身份验证,则他们可以使用此漏洞将文件写入服务器上的任何路径。他们可以通过利用CVE-2021-26855 SSRF漏洞或通过破坏合法管理员的凭据来进行身份验证。</p><p><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-27065">CVE-2021-27065</a>是Exchange中身份验证后的任意文件写入漏洞。如果HAFNIUM可以通过Exchange服务器进行身份验证,则他们可以使用此漏洞将文件写入服务器上的任何路径。他们可以通过利用CVE-2021-26855 SSRF漏洞或通过破坏合法管理员的凭据来进行身份验证。</p><h3 id="利用过程:"><a href="#利用过程:" class="headerlink" title="利用过程:"></a>利用过程:</h3><ol><li><p>获取LegacyDN。利用CVE-2021-26855 ssrf攻击。</p><p>使用/Autodiscover/autodiscover.xml入口点来检索请求的输入主体</p><p>payload:</p><pre class="line-numbers language-http" data-language="http"><code class="language-http">"Cookie": "X-BEResource=%s/autodiscover/autodiscover.xml?a=~1942062522;" % FQDN<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006"> <Request> <EMailAddress>%s</EMailAddress> <AcceptableResponseSchema>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema> </Request></Autodiscover><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p>获取SID,并置换成管理员SID。</p><p>使用入口点:/autodiscover/autodiscover.xml和/ mapi / emsmdb</p><p>发生错误时,入口点/ mapi处的功能部件将返回SID</p><pre class="line-numbers language-http" data-language="http"><code class="language-http">mapi_body = legacyDn + \ "\x00\x00\x00\x00\x00\xe4\x04\x00\x00\x09\x04\x00\x00\x09\x04\x00\x00\x00\x00\x00\x00"<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre></li><li><p>获取Session id和msExchEcpCanary。CVE-2021-26855</p><p>使用入口点:/ecp/proxyLogon.ecp获取Session ID和Canary</p><p>payload:</p><pre class="line-numbers language-http" data-language="http"><code class="language-http">proxyLogon_request = """<r at="Negotiate" ln="john"><s>%s</s><s a="7" t="1">S-1-1-0</s><s a="7" t="1">S-1-5-2</s><s a="7" t="1">S-1-5-11</s><s a="7" t="1">S-1-5-15</s><s a="3221225479" t="1">S-1-5-5-0-6948923</s></r>""" % sid<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre></li><li><p>利用CVE-2021–27065写入webshell</p><p>攻击者使用Exchange管理中心中的ResetOAB功能来写入文件。</p></li></ol><h3 id="细节分析:"><a href="#细节分析:" class="headerlink" title="细节分析:"></a>细节分析:</h3><ol><li><p>请求/ecp/x.js,请求/ecp下以.js、.css结尾的静态资源,会交由<code>BEResourceRequestHandler</code>处理,确定类是否可以处理请求是基于方法<code>BEResourceRequestHandler.CanHandle()</code>,使用<code>GetBEResouceCookie()</code>方法检查特殊cookie的存在,此方法获取并返回<code>X-BEResource</code>的值。</p><p>然后<code>BEResourceRequestHandler.IsResourceRequest()</code>将检查请求URL是否以资源文件结尾,最后值<code>X-BEResource</code>将继续传递到<code>BackEndServer.FromString()</code>,以确定此请求的后端服务器。</p><p>为了满足上述条件,<code>X-BEResource</code>需要具备下面的形式</p><pre class="line-numbers language-http" data-language="http"><code class="language-http">X-BEResource = EXCHANGE2016〜1942062522<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li></li></ol><h3 id="名词解释:"><a href="#名词解释:" class="headerlink" title="名词解释:"></a>名词解释:</h3><ul><li>LegacyDN:Exchange Server 2013开始引入,使用邮箱的专有名称标识邮箱</li><li>FQDN:标识内部Exchange服务器的完全限定域名</li></ul>]]></content>
<categories>
<category> web安全 </category>
</categories>
<tags>
<tag> web security </tag>
<tag> Exchenge </tag>
<tag> RCE </tag>
<tag> CVE-2021-26855 </tag>
<tag> CVE-2021-27065 </tag>
</tags>
</entry>
<entry>
<title>修改Users下的文件夹名</title>
<link href="//blogs/xiu-gai-users-xia-de-wen-jian-jia-ming/"/>
<url>//blogs/xiu-gai-users-xia-de-wen-jian-jia-ming/</url>
<content type="html"><![CDATA[<ol><li>使用Administrator用户登录系统</li><li>修改注册表中<code>计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-1049184755-2560237090-294228926-xxxx</code>里ProfileImagePath的内容,就是用户文件夹路径</li><li>然后切换到自己的用户账号,会提示错误,不要慌…..</li><li>将自己的文件夹命名为要修改的名字,然后注销,重新登录</li></ol><p>修改之后会有很多问题,因为很多设置里面都是绝对路径,更改完找不到原来的文件了,比如环境变量等等。</p><p>修改中配置中,</p>]]></content>
<categories>
<category> blogs </category>
</categories>
</entry>
<entry>
<title>更换ssd硬盘</title>
<link href="//blogs/geng-huan-ssd-ying-pan/"/>
<url>//blogs/geng-huan-ssd-ying-pan/</url>
<content type="html"><![CDATA[<p>电脑上自带的ssd是sn730 500G,实际大小是470多G。要更换的是sn750 1T。我的电脑只有一个m.2的硬盘接口,需要将原来的硬盘克隆到新的硬盘。</p><p>使用<code>DiskGenius</code>克隆硬盘,使用PE模式重启电脑,选择系统迁移,就是系统盘克隆到系统盘,包括引导分区,这样克隆完就可以直接换硬盘,无缝切换。</p><img src="/blogs/geng-huan-ssd-ying-pan/image-20210314210514277.png" class="" title="image-20210314210514277">]]></content>
<categories>
<category> blogs </category>
</categories>
</entry>
<entry>
<title>CRLF注入</title>
<link href="//websecurity/crlf-zhu-ru/"/>
<url>//websecurity/crlf-zhu-ru/</url>
<content type="html"><![CDATA[<h3 id="CRLF简介"><a href="#CRLF简介" class="headerlink" title="CRLF简介"></a>CRLF简介</h3><p>CRLF 指的是回车符(CR,ASCII 13,\r,%0d) 和换行符(LF,ASCII 10,\n,%0a),操作系统就是根据这个标识来进行换行的,你在键盘输入回车键就是输出这个字符,只不过win和linux系统采用的标识不一样而已。</p><p>在HTTP当中HTTP的Header和Body之间就是用两个crlf进行分隔的,如果能控制HTTP消息头中的字符,注入一些恶意的换行,这样就能注入一些会话cookie和html代码,所以CRLF injection 又叫做 HTTP response Splitting,简称HRS。</p>]]></content>
<categories>
<category> websecurity </category>
</categories>
<tags>
<tag> CRLF </tag>
<tag> web security </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day40</title>
<link href="//code/python/pythontip-100days-day40/"/>
<url>//code/python/pythontip-100days-day40/</url>
<content type="html"><![CDATA[]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day39</title>
<link href="//code/python/pythontip-100days-day39/"/>
<url>//code/python/pythontip-100days-day39/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>已知一个有序序列,请原地删除序列中重复出现的元素,返回删除重复元素后的序列长度 要求时间复杂度O(n),空间复杂度O(1)</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">remove_duplicate([0,0,1,1,1,2,2,3,3,4,4,4,5]) -> 6remove_duplicate([0,0,1,1,3,4,5]) -> 5<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的数组不为空,且一定符合题意</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>快速排序变形</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">remove_duplicate</span><span class="token punctuation">(</span>l<span class="token punctuation">)</span><span class="token punctuation">:</span> tail <span class="token operator">=</span> <span class="token number">0</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token builtin">len</span><span class="token punctuation">(</span>l<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">if</span> l<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">!=</span> l<span class="token punctuation">[</span>i <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">:</span> l<span class="token punctuation">[</span>tail <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> l<span class="token punctuation">[</span>i<span class="token punctuation">]</span> tail <span class="token operator">+=</span> <span class="token number">1</span> <span class="token keyword">return</span> tail <span class="token operator">+</span> <span class="token number">1</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(n)</code></li><li>空间复杂度<code>O(1)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>快速排序变形</li></ol>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day38</title>
<link href="//code/python/pythontip-100days-day38/"/>
<url>//code/python/pythontip-100days-day38/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>有一组数字,从1到n,中减少了一个数,顺序也被打乱,放在一个n-1的数组里,请找出丢失的数字</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">find_missing_num([1,2,3,5]) -> 4<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的数组不为空,且一定符合题意</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>位运算</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">find_missing_num</span><span class="token punctuation">(</span>lst<span class="token punctuation">)</span><span class="token punctuation">:</span> res <span class="token operator">=</span> <span class="token number">0</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>lst<span class="token punctuation">)</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">:</span> res <span class="token operator">^</span><span class="token operator">=</span> i <span class="token keyword">for</span> item <span class="token keyword">in</span> lst<span class="token punctuation">:</span> res <span class="token operator">^</span><span class="token operator">=</span> item <span class="token keyword">return</span> res<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(n)</code></li><li>空间复杂度<code>O(1)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>位运算</li></ol>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day37</title>
<link href="//code/python/pythontip-100days-day37/"/>
<url>//code/python/pythontip-100days-day37/</url>
<content type="html"><![CDATA[<h1 id="二进制中1的位数"><a href="#二进制中1的位数" class="headerlink" title="二进制中1的位数"></a>二进制中1的位数</h1><p>给定一个整数,请计算二进制中为1的位数</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">count_one_bits(13) -> 3<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入一定为整数</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>位运算</li><li>移位操作</li></ol><h3 id="解法1:"><a href="#解法1:" class="headerlink" title="解法1:"></a>解法1:</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">count_one_bits</span><span class="token punctuation">(</span>n<span class="token punctuation">:</span> <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">int</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">""" 1. 将数字转换为二进制形式 2. 统计二进制字符串中1的个数 :param n: :return: """</span> bin_n <span class="token operator">=</span> <span class="token builtin">bin</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span> count <span class="token operator">=</span> <span class="token number">0</span> <span class="token keyword">for</span> item <span class="token keyword">in</span> bin_n<span class="token punctuation">:</span> <span class="token keyword">if</span> item <span class="token operator">==</span> <span class="token string">'1'</span><span class="token punctuation">:</span> count <span class="token operator">+=</span> <span class="token number">1</span> <span class="token keyword">return</span> count<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day36</title>
<link href="//code/python/pythontip-100days-day36/"/>
<url>//code/python/pythontip-100days-day36/</url>
<content type="html"><![CDATA[<h1 id="最长上升子序列"><a href="#最长上升子序列" class="headerlink" title="最长上升子序列"></a>最长上升子序列</h1><p>一个元素为数值的列表,找到其最长上升子序列的长度。<br>比如 [5, 4, 1, 2, 5, 3], 最长上升子序列是 [1, 2, 3], 长度为3。</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">get_long_incr_lst(5, 4, 1, 2, 5, 3]) -> 3get_long_incr_lst([10, 9, 2, 5, 3, 7, 101, 18]) -> 4<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入不为空</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>动态规划</li></ol><h3 id="解法1:"><a href="#解法1:" class="headerlink" title="解法1:"></a>解法1:</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">get_long_incr_lst</span><span class="token punctuation">(</span>lst<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">""" 动态规划 1. 寻找所有上升链,将列表中上升元素加入到队列 2. 遍历元素,加入到合适的上升链 :param lst: :return: """</span> <span class="token keyword">def</span> <span class="token function">addlist</span><span class="token punctuation">(</span>uplist<span class="token punctuation">:</span> <span class="token builtin">list</span><span class="token punctuation">,</span> i<span class="token punctuation">:</span> <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">bool</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">""" 1. 遍历链条,比较两条末端元素和新元素的大小 2. 如果存在新元素大于链条末尾元素则加入链条,如果遍历完所有链条没能加入,则返回false,申请新添加一条链条 3. 当加入链条时,不会改变原来的链条,而是申请一个copy,然后加入新元素后,将新申请的链条加入到上升链集合中 :param uplist: :param i: :return: """</span> flag <span class="token operator">=</span> <span class="token boolean">False</span> <span class="token keyword">for</span> item <span class="token keyword">in</span> uplist<span class="token punctuation">:</span> <span class="token keyword">if</span> item<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator"><</span> lst<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">:</span> <span class="token comment"># 获取原来的链条copy</span> item_copy <span class="token operator">=</span> item<span class="token punctuation">.</span>copy<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># 生成一条新的上升链</span> item_copy<span class="token punctuation">.</span>append<span class="token punctuation">(</span>lst<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">if</span> item_copy <span class="token keyword">not</span> <span class="token keyword">in</span> uplist<span class="token punctuation">:</span> uplist<span class="token punctuation">.</span>append<span class="token punctuation">(</span>item_copy<span class="token punctuation">)</span> flag <span class="token operator">=</span> <span class="token boolean">True</span> <span class="token keyword">return</span> flag <span class="token keyword">if</span> <span class="token keyword">not</span> lst<span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token number">0</span> uplist <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token comment"># 上升链集合</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token builtin">len</span><span class="token punctuation">(</span>lst<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment"># 如果上升链为空,或者元素不能加入已有链条,则申请一条新链条</span> <span class="token keyword">if</span> <span class="token keyword">not</span> uplist <span class="token keyword">or</span> <span class="token keyword">not</span> addlist<span class="token punctuation">(</span>uplist<span class="token punctuation">,</span> i<span class="token punctuation">)</span><span class="token punctuation">:</span> uplist<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token punctuation">[</span>lst<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span>uplist<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token builtin">max</span><span class="token punctuation">(</span><span class="token builtin">map</span><span class="token punctuation">(</span><span class="token builtin">len</span><span class="token punctuation">,</span> uplist<span class="token punctuation">)</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>dnslog</title>
<link href="//code/python/dnslog/"/>
<url>//code/python/dnslog/</url>
<content type="html"><![CDATA[<h3 id="python封装dnslog类"><a href="#python封装dnslog类" class="headerlink" title="python封装dnslog类"></a>python封装dnslog类</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token comment"># dnslog.py</span><span class="token keyword">import</span> requests<span class="token keyword">class</span> <span class="token class-name">dnslog</span><span class="token punctuation">:</span> <span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token boolean">None</span><span class="token punctuation">:</span> self<span class="token punctuation">.</span>_get_dns_domain_api <span class="token operator">=</span> <span class="token string">'http://dnslog.cn/getdomain.php'</span> <span class="token comment"># 获取子域名</span> self<span class="token punctuation">.</span>_get_dns_record_api <span class="token operator">=</span> <span class="token string">"http://dnslog.cn/getrecords.php"</span> <span class="token comment"># 查询dns解析</span> self<span class="token punctuation">.</span>_headers <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token string">'User-Agent'</span><span class="token punctuation">:</span> <span class="token string">'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'</span><span class="token punctuation">,</span> <span class="token punctuation">}</span> self<span class="token punctuation">.</span>_dns <span class="token operator">=</span> requests<span class="token punctuation">.</span>session<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># 初始化一个session对象</span> <span class="token comment"># 获取二级域名</span> self<span class="token punctuation">.</span>_dnssubdomain <span class="token operator">=</span> self<span class="token punctuation">.</span>_dns<span class="token punctuation">.</span>get<span class="token punctuation">(</span>self<span class="token punctuation">.</span>_get_dns_domain_api<span class="token punctuation">)</span><span class="token punctuation">.</span>text <span class="token comment"># 标志信息</span> self<span class="token punctuation">.</span>_msg <span class="token operator">=</span> <span class="token string">'dnstest'</span> <span class="token keyword">def</span> <span class="token function">getrecords</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">"""检测是否有dns请求"""</span> result <span class="token operator">=</span> self<span class="token punctuation">.</span>_dns<span class="token punctuation">.</span>get<span class="token punctuation">(</span>self<span class="token punctuation">.</span>_get_dns_record_api<span class="token punctuation">,</span> headers<span class="token operator">=</span>self<span class="token punctuation">.</span>_headers<span class="token punctuation">)</span><span class="token punctuation">.</span>text <span class="token keyword">if</span> self<span class="token punctuation">.</span>_msg <span class="token keyword">in</span> result<span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token boolean">True</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token boolean">False</span> <span class="token keyword">def</span> <span class="token function">get_dns_request</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">"""获取请求的子域名,三级域名"""</span> <span class="token keyword">return</span> <span class="token string">'http://'</span><span class="token operator">+</span>self<span class="token punctuation">.</span>_msg<span class="token operator">+</span><span class="token string">'.'</span><span class="token operator">+</span>self<span class="token punctuation">.</span>_dnssubdomain <span class="token keyword">def</span> <span class="token function">setmsg</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> msg<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">"""设置三级域名标志位"""</span> self<span class="token punctuation">.</span>_msg <span class="token operator">=</span> msg <span class="token keyword">def</span> <span class="token function">senddns</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">"""发送dns请求"""</span> <span class="token keyword">try</span><span class="token punctuation">:</span> self<span class="token punctuation">.</span>_dns<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">'http://'</span><span class="token operator">+</span>self<span class="token punctuation">.</span>_msg<span class="token operator">+</span><span class="token string">'.'</span> <span class="token operator">+</span> self<span class="token punctuation">.</span>_dnssubdomain<span class="token punctuation">,</span> headers<span class="token operator">=</span>self<span class="token punctuation">.</span>_headers<span class="token punctuation">)</span> <span class="token keyword">except</span> Exception <span class="token keyword">as</span> e<span class="token punctuation">:</span> <span class="token keyword">pass</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
<categories>
<category> blogs </category>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> dnslog </tag>
<tag> python </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day35</title>
<link href="//code/python/pythontip-100days-day35/"/>
<url>//code/python/pythontip-100days-day35/</url>
<content type="html"><![CDATA[<h1 id="和最接近的分隔位置"><a href="#和最接近的分隔位置" class="headerlink" title="和最接近的分隔位置"></a>和最接近的分隔位置</h1><p>给定一个数组<code>a</code>,返回位置<code>i</code>,使得<code>sum(a[: i + 1])</code>和<code>sum(a[i + 1 : ])</code>最接近</p><p>如果有多个满足条件的位置,返回最小的那个</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">nearest_split_sum([7,3,2,8,0,-1,9]) -> 2nearest_split_sum([1,1,0,1,1]) -> 1nearest_split_sum([1]) -> 0<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的数组不为空</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>利用之前的分段和计算新的分段和</li></ol><h3 id="解法1:"><a href="#解法1:" class="headerlink" title="解法1:"></a>解法1:</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">nearest_split_sum</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">""" 1. 遍历分割点,将队列分为前后两部分 2. 计算前后两部分的和,然后使用index和diff记录分割点的索引和前后两部分的差值 3. 比较差值然后改变索引 :param a: :return: """</span> <span class="token keyword">if</span> <span class="token keyword">not</span> a<span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span> index<span class="token punctuation">,</span> diff <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">9999999999</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token builtin">len</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">:</span> tmp_diff <span class="token operator">=</span> <span class="token builtin">abs</span><span class="token punctuation">(</span><span class="token builtin">sum</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span><span class="token punctuation">:</span>i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token builtin">sum</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">:</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">if</span> tmp_diff <span class="token operator"><</span> diff<span class="token punctuation">:</span> diff <span class="token operator">=</span> tmp_diff index <span class="token operator">=</span> i <span class="token keyword">return</span> index<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>java反序列化--weblogic</title>
<link href="//websecurity/java-fan-xu-lie-hua-weblogic/"/>
<url>//websecurity/java-fan-xu-lie-hua-weblogic/</url>
<content type="html"><![CDATA[<h1 id="一、搭建weblogic服务"><a href="#一、搭建weblogic服务" class="headerlink" title="一、搭建weblogic服务"></a>一、搭建weblogic服务</h1><ol><li><p>下载weblogic安装包</p><p>Oracle官网下载链接:<a href="https://www.oracle.com/middleware/technologies/weblogic-server-installers-downloads.html">https://www.oracle.com/middleware/technologies/weblogic-server-installers-downloads.html</a></p><p>可以找到多个版本安装包,Generic installer、 quick installer和Supplemental installer。</p><p>通用安装程序包括所有Oracle WebLogic Server和Oracle Coherence软件(包括示例),并且支持所有开发和生产目的。</p><p>快速安装程序用于开发目的。它包括所有Oracle WebLogic Server和Oracle Coherence运行时软件,但不包括示例和本地化的WebLogic控制台帮助文件。</p><p>补充安装程序可用于将示例和本地化的WebLogic控制台文件添加到使用快速安装程序创建的安装中。</p></li><li><p>jdk版本</p><p>不能使用openjdk安装 ,需要下载Oracle的jdk。</p><p>下载链接:<a href="https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html">https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html</a></p></li><li><p>安装weblogic,使用管理员身份安装weblogic</p><img src="/websecurity/java-fan-xu-lie-hua-weblogic/image-20210203154612576.png" class="" title="image-20210203154612576"></li></ol><h2 id="二、本地调试"><a href="#二、本地调试" class="headerlink" title="二、本地调试"></a>二、本地调试</h2><h3 id="配置idea本地调试环境"><a href="#配置idea本地调试环境" class="headerlink" title="配置idea本地调试环境"></a>配置idea本地调试环境</h3><ol><li><p>新建项目</p><img src="/websecurity/java-fan-xu-lie-hua-weblogic/image-20210203161507038.png" class="" title="image-20210203161507038"></li><li><p>配置configuration</p><img src="/websecurity/java-fan-xu-lie-hua-weblogic/image-20210203161755435.png" class="" title="image-20210203161755435"><p>使用maven创建项目时,可能会提示<code>warning no artifacts configured</code>错误,点击修复然后添加一个项目即可。</p><img src="/websecurity/java-fan-xu-lie-hua-weblogic/image-20210203162000812.png" class="" title="image-20210203162000812"></li></ol><h2 id="三、调试"><a href="#三、调试" class="headerlink" title="三、调试"></a>三、调试</h2><ol><li><p>添加要调试的资源</p><p>选择File -> Project Structure</p><img src="/websecurity/java-fan-xu-lie-hua-weblogic/image-20210203162241069.png" class="" title="image-20210203162241069"><p>选择Libraries,然后添加jar包或文件</p><img src="/websecurity/java-fan-xu-lie-hua-weblogic/image-20210203162403563.png" class="" title="image-20210203162403563"></li><li><p>设置断点</p><p>连续按两次shift键可以调出搜索框</p><img src="/websecurity/java-fan-xu-lie-hua-weblogic/image-20210203162651813.png" class="" title="image-20210203162651813"><p>在合适位置下断点</p><img src="/websecurity/java-fan-xu-lie-hua-weblogic/image-20210203162721642.png" class="" title="image-20210203162721642"></li><li><p>使用poc触发断点</p><img src="/websecurity/java-fan-xu-lie-hua-weblogic/image-20210203162809374.png" class="" title="image-20210203162809374"><p>触发断点,可以进行调试了。</p></li></ol>]]></content>
<categories>
<category> websecurity </category>
</categories>
<tags>
<tag> web security </tag>
<tag> java 反序列化 </tag>
<tag> weblogic </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day34</title>
<link href="//code/python/pythontip-100days-day34/"/>
<url>//code/python/pythontip-100days-day34/</url>
<content type="html"><![CDATA[<h1 id="移动数组"><a href="#移动数组" class="headerlink" title="移动数组"></a>移动数组</h1><p>给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数,要求使用空间复杂度为 O(1) 的原地算法</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">move_ele([1,2,3,4,5,6,7],3) -> [5,6,7,1,2,3,4]<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入参数均合法</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>将输入数组翻转两次</li></ol><h3 id="解法1:"><a href="#解法1:" class="headerlink" title="解法1:"></a>解法1:</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">move_ele</span><span class="token punctuation">(</span>lst<span class="token punctuation">:</span> <span class="token builtin">list</span><span class="token punctuation">,</span> k<span class="token punctuation">:</span> <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">list</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">""" 1. 控制右边k个元素,放在列表左边 2. 使用pop()弹出元素,然后使用append()追加元素 :param lst: :param k: :return: """</span> <span class="token keyword">if</span> <span class="token keyword">not</span> lst<span class="token punctuation">:</span> <span class="token keyword">return</span> lst <span class="token keyword">for</span> _ <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>k <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">:</span> lst<span class="token punctuation">.</span>append<span class="token punctuation">(</span>lst<span class="token punctuation">.</span>pop<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">return</span> lst<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h3 id="解法2:"><a href="#解法2:" class="headerlink" title="解法2:"></a>解法2:</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">changxy</span><span class="token punctuation">(</span>lst<span class="token punctuation">:</span> <span class="token builtin">list</span><span class="token punctuation">,</span> start<span class="token punctuation">:</span> <span class="token builtin">int</span><span class="token punctuation">,</span> end<span class="token punctuation">:</span> <span class="token builtin">int</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">""" 列表在范围内翻转 :param lst: :param start: :param end: :return: """</span> <span class="token comment"># 判断结束位置是否越界</span> end <span class="token operator">=</span> end <span class="token operator">-</span> <span class="token number">1</span> <span class="token keyword">if</span> end <span class="token operator">==</span> <span class="token builtin">len</span><span class="token punctuation">(</span>lst<span class="token punctuation">)</span> <span class="token keyword">else</span> end i<span class="token punctuation">,</span> j <span class="token operator">=</span> start<span class="token punctuation">,</span> end <span class="token keyword">while</span> i <span class="token operator"><=</span> j<span class="token punctuation">:</span> lst<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> lst<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> lst<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">,</span> lst<span class="token punctuation">[</span>i<span class="token punctuation">]</span> i <span class="token operator">+=</span> <span class="token number">1</span> j <span class="token operator">-=</span> <span class="token number">1</span><span class="token keyword">def</span> <span class="token function">move_ele</span><span class="token punctuation">(</span>lst<span class="token punctuation">:</span> <span class="token builtin">list</span><span class="token punctuation">,</span> k<span class="token punctuation">:</span> <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">list</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">""" 1. 前后两部分旋转 2. 整体旋转 :param lst: :param k: :return: """</span> <span class="token comment"># 前后两部分旋转</span> changxy<span class="token punctuation">(</span>lst<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>lst<span class="token punctuation">)</span> <span class="token operator">-</span> k <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token comment"># lst[:len(lst)-k]</span> changxy<span class="token punctuation">(</span>lst<span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>lst<span class="token punctuation">)</span> <span class="token operator">-</span> k<span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>lst<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># lst[-k:]</span> <span class="token keyword">print</span><span class="token punctuation">(</span>lst<span class="token punctuation">)</span> <span class="token comment"># 整体旋转</span> changxy<span class="token punctuation">(</span>lst<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>lst<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span>lst<span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day33</title>
<link href="//code/python/pythontip-100days-day33/"/>
<url>//code/python/pythontip-100days-day33/</url>
<content type="html"><![CDATA[<h1 id="实现字符串find"><a href="#实现字符串find" class="headerlink" title="实现字符串find"></a>实现字符串find</h1><p>实现字符串的<code>find</code>函数,返回字符串<code>source</code>中 子串<code>target</code>开始的位置, 从<code>start</code>索引开始搜索,如果可以找到多个,返回第一个,如果找不到返回-1</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">my_find('this is a book', 'this') -> 0my_find('this is a book', 'this', start=1) -> -1<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li><code>source</code>,<code>target</code>一定为字符串类型</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>朴素的两重循环</li></ol><h3 id="解法:"><a href="#解法:" class="headerlink" title="解法:"></a>解法:</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">my_find</span><span class="token punctuation">(</span>source<span class="token punctuation">,</span> target<span class="token punctuation">,</span> start<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">""" 返回字符串source中 子串target开始的位置, 从start索引开始搜索 如果可以找到多个,返回第一个 :param source: :param target: :param start: :return: """</span> <span class="token keyword">if</span> source <span class="token operator">==</span> <span class="token string">''</span> <span class="token keyword">or</span> target <span class="token operator">==</span> <span class="token string">''</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span> <span class="token keyword">if</span> <span class="token builtin">len</span><span class="token punctuation">(</span>source<span class="token punctuation">[</span>start<span class="token punctuation">:</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token builtin">len</span><span class="token punctuation">(</span>target<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment"># 如果source的长度小于target的长度,返回-1</span> <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token builtin">len</span><span class="token punctuation">(</span>source<span class="token punctuation">)</span> <span class="token operator">-</span> start<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">if</span> start <span class="token operator">+</span> i <span class="token operator">+</span> <span class="token builtin">len</span><span class="token punctuation">(</span>target<span class="token punctuation">)</span> <span class="token operator">></span> <span class="token builtin">len</span><span class="token punctuation">(</span>source<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span> <span class="token keyword">if</span> source<span class="token punctuation">[</span>start <span class="token operator">+</span> i<span class="token punctuation">:</span>start <span class="token operator">+</span> i<span class="token operator">+</span><span class="token builtin">len</span><span class="token punctuation">(</span>target<span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token operator">==</span> target<span class="token punctuation">:</span> <span class="token keyword">return</span> start <span class="token operator">+</span> i <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>算法--最大公约数</title>
<link href="//blogs/suan-fa-zui-da-gong-yue-shu/"/>
<url>//blogs/suan-fa-zui-da-gong-yue-shu/</url>
<content type="html"><![CDATA[<h3 id="最大公约数的定义"><a href="#最大公约数的定义" class="headerlink" title="最大公约数的定义"></a>最大公约数的定义</h3><p>最大公因数,也称最大<a href="https://baike.baidu.com/item/%E5%85%AC%E7%BA%A6%E6%95%B0">公约数</a>、最大公<a href="https://baike.baidu.com/item/%E5%9B%A0%E5%AD%90">因子</a>,指两个或多个<a href="https://baike.baidu.com/item/%E6%95%B4%E6%95%B0/1293937">整数</a>共有<a href="https://baike.baidu.com/item/%E7%BA%A6%E6%95%B0/8417882">约数</a>中最大的一个。<a href="https://baike.baidu.com/item/a/6337">a</a>,<a href="https://baike.baidu.com/item/b/3730447">b</a>的最大公约数记为(a,b),同样的,a,b,c的最大<a href="https://baike.baidu.com/item/%E5%85%AC%E7%BA%A6">公约</a>数记为(a,b,c),多个<a href="https://baike.baidu.com/item/%E6%95%B4%E6%95%B0/1293937">整数</a>的最大公约数也有同样的记号。求最大公约数有多种<a href="https://baike.baidu.com/item/%E6%96%B9%E6%B3%95/2444">方法</a>,常见的有<a href="https://baike.baidu.com/item/%E8%B4%A8%E5%9B%A0%E6%95%B0%E5%88%86%E8%A7%A3">质因数分解</a>法、<a href="https://baike.baidu.com/item/%E7%9F%AD%E9%99%A4%E6%B3%95/3640958">短除法</a>、<a href="https://baike.baidu.com/item/%E8%BE%97%E8%BD%AC%E7%9B%B8%E9%99%A4%E6%B3%95/4625352">辗转相除法</a>、<a href="https://baike.baidu.com/item/%E6%9B%B4%E7%9B%B8%E5%87%8F%E6%8D%9F%E6%B3%95/10277459">更相减损法</a>。与最大公约数相对应的概念是<a href="https://baike.baidu.com/item/%E6%9C%80%E5%B0%8F%E5%85%AC%E5%80%8D%E6%95%B0/6192375">最小公倍数</a>,a,b的<a href="https://baike.baidu.com/item/%E6%9C%80%E5%B0%8F%E5%85%AC%E5%80%8D%E6%95%B0/6192375">最小公倍数</a>记为[a,b]。</p><h3 id="解法"><a href="#解法" class="headerlink" title="解法"></a>解法</h3>]]></content>
<categories>
<category> blogs </category>
</categories>
<tags>
<tag> 算法 </tag>
<tag> 最大公约数 </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day32</title>
<link href="//code/python/pythontip-100days-day32/"/>
<url>//code/python/pythontip-100days-day32/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>实现函数is_startswith,如果字符串source是以substr开头的,则函数返回True,反之返回False</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">is_startswith('python','py') -> Trueis_startswith('python','java') -> False<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入一定为字符串类型</li><li>输入可能为空串</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>首先要判断传入的参数是否合法,这里默认传入的都是字符串,那么我们要需要判断字符串是否有空串的情况</li><li>如果substr的长度大于source的长度,直接返回False</li><li>从索引0开始,遍历substr,从source上获得相同索引的字符,两者进行比较,只要有一个字符不相同,则可以立即返回False</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">is_startswith</span><span class="token punctuation">(</span>source<span class="token punctuation">,</span> substr<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">""" 判断字符串source是否以substr开头 :param source: :param substr: :return: """</span> <span class="token keyword">if</span> <span class="token keyword">not</span> source <span class="token keyword">or</span> <span class="token keyword">not</span> substr<span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token boolean">False</span> <span class="token keyword">if</span> <span class="token builtin">len</span><span class="token punctuation">(</span>substr<span class="token punctuation">)</span> <span class="token operator">></span> <span class="token builtin">len</span><span class="token punctuation">(</span>source<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token boolean">False</span> <span class="token keyword">for</span> index<span class="token punctuation">,</span> item <span class="token keyword">in</span> <span class="token builtin">enumerate</span><span class="token punctuation">(</span>substr<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">if</span> item <span class="token operator">!=</span> source<span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token punctuation">:</span> <span class="token keyword">break</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token boolean">True</span> <span class="token comment"># 如果for循环不是因为break结束的,就会进入到else语句块</span> <span class="token keyword">return</span> <span class="token boolean">False</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(n)</code></li><li>空间复杂度<code>O(n)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>首先要判断传入的参数是否合法,这里默认传入的都是字符串,那么我们要需要判断字符串是否有空串的情况</li><li>如果substr的长度大于source的长度,直接返回False</li><li>从索引0开始,遍历substr,从source上获得相同索引的字符,两者进行比较,只要有一个字符不相同,则可以立即返回False</li></ol>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day31</title>
<link href="//code/python/pythontip-100days-day31/"/>
<url>//code/python/pythontip-100days-day31/</url>
<content type="html"><![CDATA[<h1 id="实现函数is-startswith"><a href="#实现函数is-startswith" class="headerlink" title="实现函数is_startswith"></a>实现函数is_startswith</h1><p>实现函数is_startswith,如果字符串source是以substr开头的,则函数返回True,反之返回False</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">is_startswith('python','py') -> Trueis_startswith('python','java') -> False<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入一定为字符串类型</li><li>输入可能为空串</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>首先要判断传入的参数是否合法,这里默认传入的都是字符串,那么我们要需要判断字符串是否有空串的情况</li><li>如果substr的长度大于source的长度,直接返回False</li><li>从索引0开始,遍历substr,从source上获得相同索引的字符,两者进行比较,只要有一个字符不相同,则可以立即返回False</li></ol><h3 id="解法1:"><a href="#解法1:" class="headerlink" title="解法1:"></a>解法1:</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">is_startswith</span><span class="token punctuation">(</span>source<span class="token punctuation">,</span> substr<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">if</span> source <span class="token keyword">is</span> <span class="token boolean">None</span> <span class="token keyword">or</span> source <span class="token operator">==</span> <span class="token string">''</span> <span class="token keyword">or</span> substr <span class="token keyword">is</span> <span class="token boolean">None</span> <span class="token keyword">or</span> substr <span class="token operator">==</span> <span class="token string">''</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token boolean">False</span> <span class="token keyword">if</span> <span class="token builtin">len</span><span class="token punctuation">(</span>source<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token builtin">len</span><span class="token punctuation">(</span>substr<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token boolean">False</span> <span class="token keyword">return</span> substr <span class="token operator">==</span> source<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token builtin">len</span><span class="token punctuation">(</span>substr<span class="token punctuation">)</span><span class="token punctuation">]</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day30</title>
<link href="//code/python/pythontip-100days-day30/"/>
<url>//code/python/pythontip-100days-day30/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。</p><p>珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。</p><p>珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。</p><p>返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">minEatingSpeed([3,6,7,11],8) -> 4minEatingSpeed([30,11,23,4,20],5) -> 30minEatingSpeed([30,11,23,4,20],6) -> 23<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的参数不为空</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>二分查找</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">minEatingSpeed</span><span class="token punctuation">(</span>piles<span class="token punctuation">,</span> H<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">def</span> <span class="token function">possible</span><span class="token punctuation">(</span>K<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">""" p-1 是为了制造一种状态,破化p整除K时,会+1;但是p-1整除K时,实际上p不能整除,还是得加1 :param K: :return: """</span> <span class="token keyword">return</span> <span class="token builtin">sum</span><span class="token punctuation">(</span><span class="token punctuation">(</span>p <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">//</span> K <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">for</span> p <span class="token keyword">in</span> piles<span class="token punctuation">)</span> <span class="token operator"><=</span> H lo<span class="token punctuation">,</span> hi <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token builtin">max</span><span class="token punctuation">(</span>piles<span class="token punctuation">)</span> <span class="token keyword">while</span> lo <span class="token operator"><</span> hi<span class="token punctuation">:</span> mi <span class="token operator">=</span> <span class="token punctuation">(</span>lo <span class="token operator">+</span> hi<span class="token punctuation">)</span> <span class="token operator">//</span> <span class="token number">2</span> <span class="token keyword">if</span> <span class="token keyword">not</span> possible<span class="token punctuation">(</span>mi<span class="token punctuation">)</span><span class="token punctuation">:</span> lo <span class="token operator">=</span> mi <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">else</span><span class="token punctuation">:</span> hi <span class="token operator">=</span> mi <span class="token keyword">return</span> lo<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(nlogn)</code></li><li>空间复杂度<code>O(1)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>二分查找</li></ol>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day29</title>
<link href="//code/python/pythontip-100days-day29/"/>
<url>//code/python/pythontip-100days-day29/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">singleNumber([2,2,1]) -> 1singleNumber([4,1,2,1,2]) -> 4 <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的参数不为空</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>你能想到不使dict的方法吗</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">from</span> functools <span class="token keyword">import</span> <span class="token builtin">reduce</span><span class="token keyword">def</span> <span class="token function">singleNumber</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token builtin">reduce</span><span class="token punctuation">(</span><span class="token keyword">lambda</span> x<span class="token punctuation">,</span> y<span class="token punctuation">:</span> x <span class="token operator">^</span> y<span class="token punctuation">,</span> nums<span class="token punctuation">)</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(n)</code></li><li>空间复杂度<code>O(1)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>异或运算</li></ol>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day28</title>
<link href="//code/python/pythontip-100days-day28/"/>
<url>//code/python/pythontip-100days-day28/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>给定一个 n × n 的二维矩阵,将其顺时针旋转90度</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">rotateMatrix([[1,2,3],[4,5,6],[7,8,9]]) -> [[7,4,1],[8,5,2],[9,6,3]]<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的参数不为空</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>你能想到不使用额外二维数组的方法吗?</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">rotateMatrix</span><span class="token punctuation">(</span>matrix<span class="token punctuation">)</span><span class="token punctuation">:</span> n <span class="token operator">=</span> <span class="token builtin">len</span><span class="token punctuation">(</span>matrix<span class="token punctuation">)</span> <span class="token comment"># 水平翻转</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>n <span class="token operator">//</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">for</span> j <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">:</span> matrix<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">,</span> matrix<span class="token punctuation">[</span>n <span class="token operator">-</span> i <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> matrix<span class="token punctuation">[</span>n <span class="token operator">-</span> i <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">,</span> matrix<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token comment"># 主对角线翻转</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">for</span> j <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">:</span> matrix<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">,</span> matrix<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> matrix<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> matrix<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token keyword">return</span> matrix<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(n^2)</code></li><li>空间复杂度<code>O(1)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>翻转两次</li></ol><h3 id="解法2:"><a href="#解法2:" class="headerlink" title="解法2:"></a>解法2:</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">rotateMatrix</span><span class="token punctuation">(</span>matrix<span class="token punctuation">:</span> <span class="token builtin">list</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">list</span><span class="token punctuation">:</span> n <span class="token operator">=</span> <span class="token builtin">len</span><span class="token punctuation">(</span>matrix<span class="token punctuation">)</span> newmatric <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">0</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token keyword">for</span> j <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token keyword">print</span><span class="token punctuation">(</span>newmatric<span class="token punctuation">)</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">for</span> j <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">:</span> newmatric<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> matrix<span class="token punctuation">[</span>n<span class="token operator">-</span><span class="token number">1</span><span class="token operator">-</span>j<span class="token punctuation">]</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token keyword">return</span> newmatric<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day27</title>
<link href="//code/python/pythontip-100days-day27/"/>
<url>//code/python/pythontip-100days-day27/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>给你一个字符串 <code>s</code>,找到 <code>s</code> 中最长的回文子串的长度。回文串是指从左读和从右读都一样的字符串,例如<code>abcba</code>,<code>abccba</code></p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">longestPalindrome('babad') -> 3longestPalindrome('cbbd') -> 2longestPalindrome('a') -> 1<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的参数不为空</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>动态规划</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">longestPalindrome</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span><span class="token punctuation">:</span> n <span class="token operator">=</span> <span class="token builtin">len</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span> dp <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token boolean">False</span><span class="token punctuation">]</span> <span class="token operator">*</span> n <span class="token keyword">for</span> _ <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">]</span> ans <span class="token operator">=</span> <span class="token string">""</span> <span class="token comment"># 枚举子串的长度 l+1</span> <span class="token keyword">for</span> l <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment"># 枚举子串的起始位置 i,这样可以通过 j=i+l 得到子串的结束位置</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">:</span> j <span class="token operator">=</span> i <span class="token operator">+</span> l <span class="token keyword">if</span> j <span class="token operator">>=</span> <span class="token builtin">len</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">break</span> <span class="token keyword">if</span> l <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">:</span> dp<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token boolean">True</span> <span class="token keyword">elif</span> l <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">:</span> dp<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">(</span>s<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">==</span> s<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">else</span><span class="token punctuation">:</span> dp<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">(</span>dp<span class="token punctuation">[</span>i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span>j <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span> <span class="token keyword">and</span> s<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">==</span> s<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">if</span> dp<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token keyword">and</span> l <span class="token operator">+</span> <span class="token number">1</span> <span class="token operator">></span> <span class="token builtin">len</span><span class="token punctuation">(</span>ans<span class="token punctuation">)</span><span class="token punctuation">:</span> ans <span class="token operator">=</span> s<span class="token punctuation">[</span>i<span class="token punctuation">:</span>j<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token keyword">return</span> <span class="token builtin">len</span><span class="token punctuation">(</span>ans<span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(n^2)</code></li><li>空间复杂度<code>O(n^2)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>动态规划</li></ol>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day26</title>
<link href="//code/python/pythontip-100days-day26/"/>
<url>//code/python/pythontip-100days-day26/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。</p><p>你可以假设数组中无重复元素。</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">searchInsert([1,3,5,6], 5) -> 2searchInsert([1,3,5,6], 2) -> 1searchInsert([1,3,5,6], 7) -> 4searchInsert([1,3,5,6], 0) -> 0<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的参数均不为空</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>二分查找</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">searchInsert</span><span class="token punctuation">(</span>nums<span class="token punctuation">,</span>target<span class="token punctuation">)</span><span class="token punctuation">:</span> n <span class="token operator">=</span> <span class="token builtin">len</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span> left <span class="token operator">=</span> <span class="token number">0</span> right <span class="token operator">=</span> n <span class="token operator">-</span> <span class="token number">1</span> ans <span class="token operator">=</span> n <span class="token keyword">while</span> left <span class="token operator"><=</span> right<span class="token punctuation">:</span> mid <span class="token operator">=</span> <span class="token punctuation">(</span>left <span class="token operator">+</span> right<span class="token punctuation">)</span> <span class="token operator">//</span> <span class="token number">2</span> <span class="token keyword">if</span> target <span class="token operator"><=</span> nums<span class="token punctuation">[</span>mid<span class="token punctuation">]</span><span class="token punctuation">:</span> ans <span class="token operator">=</span> mid right <span class="token operator">=</span> mid <span class="token operator">-</span> <span class="token number">1</span> <span class="token keyword">else</span><span class="token punctuation">:</span> left <span class="token operator">=</span> mid <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">return</span> ans <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(nlogn)</code></li><li>空间复杂度<code>O(1)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>二分查找</li></ol><h3 id="解法2:"><a href="#解法2:" class="headerlink" title="解法2:"></a>解法2:</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">searchInsert</span><span class="token punctuation">(</span>nums<span class="token punctuation">,</span> target<span class="token punctuation">)</span><span class="token punctuation">:</span> i<span class="token punctuation">,</span> j<span class="token punctuation">,</span> m <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span> <span class="token keyword">while</span> i <span class="token operator"><=</span> j<span class="token punctuation">:</span> m <span class="token operator">=</span> <span class="token punctuation">(</span>i <span class="token operator">+</span> j<span class="token punctuation">)</span> <span class="token operator">//</span> <span class="token number">2</span> <span class="token keyword">if</span> target <span class="token operator">==</span> nums<span class="token punctuation">[</span>m<span class="token punctuation">]</span><span class="token punctuation">:</span> <span class="token keyword">return</span> m <span class="token keyword">elif</span> target <span class="token operator">></span> nums<span class="token punctuation">[</span>m<span class="token punctuation">]</span><span class="token punctuation">:</span> i <span class="token operator">=</span> m <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">if</span> target <span class="token operator">></span> nums<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">:</span> <span class="token keyword">return</span> j <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">if</span> target <span class="token operator"><</span> nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">:</span> <span class="token keyword">return</span> i j <span class="token operator">=</span> m <span class="token operator">-</span> <span class="token number">1</span> <span class="token keyword">return</span> m<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day25</title>
<link href="//code/python/pythontip-100days-day25/"/>
<url>//code/python/pythontip-100days-day25/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>给出一个<strong>无重叠的</strong> ,按照区间<strong>起始端点排序</strong>的区间列表。</p><p>在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">insertInterval([[1,3],[6,9]],[2,5]) ->[[1,5],[6,9]]insertInterval([[1,2],[3,5],[6,7],[8,10],[12,16]],[4,8]) -> [[1,2],[3,10],[12,16]]<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的参数均不为空</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>找到插入位置</li><li>合并区间</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">insertInterval</span><span class="token punctuation">(</span>intervals<span class="token punctuation">,</span>newInterval<span class="token punctuation">)</span><span class="token punctuation">:</span> left<span class="token punctuation">,</span> right <span class="token operator">=</span> newInterval placed <span class="token operator">=</span> <span class="token boolean">False</span> ans <span class="token operator">=</span> <span class="token builtin">list</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">for</span> li<span class="token punctuation">,</span> ri <span class="token keyword">in</span> intervals<span class="token punctuation">:</span> <span class="token keyword">if</span> li <span class="token operator">></span> right<span class="token punctuation">:</span> <span class="token comment"># 在插入区间的右侧且无交集</span> <span class="token keyword">if</span> <span class="token keyword">not</span> placed<span class="token punctuation">:</span> ans<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token punctuation">[</span>left<span class="token punctuation">,</span> right<span class="token punctuation">]</span><span class="token punctuation">)</span> placed <span class="token operator">=</span> <span class="token boolean">True</span> ans<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token punctuation">[</span>li<span class="token punctuation">,</span> ri<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">elif</span> ri <span class="token operator"><</span> left<span class="token punctuation">:</span> <span class="token comment"># 在插入区间的左侧且无交集</span> ans<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token punctuation">[</span>li<span class="token punctuation">,</span> ri<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token comment"># 与插入区间有交集,计算它们的并集</span> left <span class="token operator">=</span> <span class="token builtin">min</span><span class="token punctuation">(</span>left<span class="token punctuation">,</span> li<span class="token punctuation">)</span> right <span class="token operator">=</span> <span class="token builtin">max</span><span class="token punctuation">(</span>right<span class="token punctuation">,</span> ri<span class="token punctuation">)</span> <span class="token keyword">if</span> <span class="token keyword">not</span> placed<span class="token punctuation">:</span> ans<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token punctuation">[</span>left<span class="token punctuation">,</span> right<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">return</span> ans <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(n)</code></li><li>空间复杂度<code>O(n)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>找到插入位置</li><li>合并区间</li></ol>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day24</title>
<link href="//code/python/pythontip-100days-day24/"/>
<url>//code/python/pythontip-100days-day24/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>给定一个没有<strong>重复</strong>数字的序列,返回其所有可能的全排列。</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">permute([1,2,3]) -> [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的数组不为空</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>回溯算法</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">permute</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">def</span> <span class="token function">backtrack</span><span class="token punctuation">(</span>first <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment"># 所有数都填完了</span> <span class="token keyword">if</span> first <span class="token operator">==</span> n<span class="token punctuation">:</span> res<span class="token punctuation">.</span>append<span class="token punctuation">(</span>nums<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>first<span class="token punctuation">,</span> n<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment"># 动态维护数组</span> nums<span class="token punctuation">[</span>first<span class="token punctuation">]</span><span class="token punctuation">,</span> nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> nums<span class="token punctuation">[</span>first<span class="token punctuation">]</span> <span class="token comment"># 继续递归填下一个数</span> backtrack<span class="token punctuation">(</span>first <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token comment"># 撤销操作</span> nums<span class="token punctuation">[</span>first<span class="token punctuation">]</span><span class="token punctuation">,</span> nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> nums<span class="token punctuation">[</span>first<span class="token punctuation">]</span> n <span class="token operator">=</span> <span class="token builtin">len</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span> res <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> backtrack<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">return</span> res<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(n!)</code></li><li>空间复杂度<code>O(n)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>回溯算法</li></ol>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day23</title>
<link href="//code/python/pythontip-100days-day23/"/>
<url>//code/python/pythontip-100days-day23/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>给出一个区间的集合,请合并所有重叠的区间。</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">mergeInterval([[1,3],[8,10],[15,18],[2,6]]) -> [[1,6],[8,10],[15,18]]mergeInterval([[4,5],[1,4]]) -> [[1,5]]<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的二维数组不为空</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>先对区间进行排序</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">mergeInterval</span><span class="token punctuation">(</span>intervals<span class="token punctuation">)</span><span class="token punctuation">:</span> intervals<span class="token punctuation">.</span>sort<span class="token punctuation">(</span>key<span class="token operator">=</span><span class="token keyword">lambda</span> x<span class="token punctuation">:</span> x<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span> merged <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">for</span> interval <span class="token keyword">in</span> intervals<span class="token punctuation">:</span> <span class="token comment"># 如果列表为空,或者当前区间与上一区间不重合,直接添加</span> <span class="token keyword">if</span> <span class="token keyword">not</span> merged <span class="token keyword">or</span> merged<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator"><</span> interval<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">:</span> merged<span class="token punctuation">.</span>append<span class="token punctuation">(</span>interval<span class="token punctuation">)</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token comment"># 否则的话,我们就可以与上一区间进行合并</span> merged<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token builtin">max</span><span class="token punctuation">(</span>merged<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> interval<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">return</span> merged<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(nlogn)</code></li><li>空间复杂度<code>O(n)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>先对区间进行排序</li></ol>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day22</title>
<link href="//code/python/pythontip-100days-day22/"/>
<url>//code/python/pythontip-100days-day22/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>在一个m*n的二维数组<code>matrix</code>中判断目标值<code>target</code>是否存在,该二维数组具有以下性质:</p><ol><li>每行中的整数从左到右按升序排列。</li><li>每行的第一个整数大于前一行的最后一个整数。</li></ol><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">searchMatrix([[1,3,5,7],[10,11,16,20],[23,30,34,60]],3) -> TruesearchMatrix([[1,3,5,7],[10,11,16,20],[23,30,34,60]],13) -> False<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的二维数组不为空</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>二分查找</li><li>一位坐标映射二维坐标</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">searchMatrix</span><span class="token punctuation">(</span>matrix<span class="token punctuation">,</span>target<span class="token punctuation">)</span><span class="token punctuation">:</span> m <span class="token operator">=</span> <span class="token builtin">len</span><span class="token punctuation">(</span>matrix<span class="token punctuation">)</span> n <span class="token operator">=</span> <span class="token builtin">len</span><span class="token punctuation">(</span>matrix<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span> left <span class="token punctuation">,</span> right <span class="token operator">=</span> <span class="token number">0</span> <span class="token punctuation">,</span> m <span class="token operator">*</span> n <span class="token operator">-</span> <span class="token number">1</span> <span class="token keyword">while</span> left <span class="token operator"><=</span> right<span class="token punctuation">:</span> pivot_idx <span class="token operator">=</span> <span class="token punctuation">(</span>left <span class="token operator">+</span> right<span class="token punctuation">)</span> <span class="token operator">//</span> <span class="token number">2</span> pivot_element <span class="token operator">=</span> matrix<span class="token punctuation">[</span>pivot_idx <span class="token operator">//</span> n<span class="token punctuation">]</span><span class="token punctuation">[</span>pivot_idx <span class="token operator">%</span> n<span class="token punctuation">]</span> <span class="token keyword">if</span> target <span class="token operator">==</span> pivot_element<span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token boolean">True</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">if</span> target <span class="token operator"><</span> pivot_element<span class="token punctuation">:</span> right <span class="token operator">=</span> pivot_idx <span class="token operator">-</span> <span class="token number">1</span> <span class="token keyword">else</span><span class="token punctuation">:</span> left <span class="token operator">=</span> pivot_idx <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">return</span> <span class="token boolean">False</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(logmn)</code></li><li>空间复杂度<code>O(1)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>二分查找</li><li>一位坐标映射二维坐标</li></ol><h3 id="解法2:"><a href="#解法2:" class="headerlink" title="解法2:"></a>解法2:</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">searchMatrix</span><span class="token punctuation">(</span>matrix<span class="token punctuation">,</span> target<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">""" 1. 找到tatget所在的列表 2. 使用二分法判断 :param matrix: :param target: :return: """</span> <span class="token keyword">if</span> <span class="token keyword">not</span> matrix<span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token boolean">False</span> <span class="token keyword">for</span> item <span class="token keyword">in</span> matrix<span class="token punctuation">:</span> <span class="token keyword">if</span> item<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator"><=</span> target <span class="token operator"><=</span> item<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">:</span> i<span class="token punctuation">,</span> j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>item<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">1</span> <span class="token keyword">while</span> i <span class="token operator"><=</span> j<span class="token punctuation">:</span> m <span class="token operator">=</span> <span class="token punctuation">(</span>i <span class="token operator">+</span> j<span class="token punctuation">)</span> <span class="token operator">//</span> <span class="token number">2</span> <span class="token keyword">if</span> item<span class="token punctuation">[</span>m<span class="token punctuation">]</span> <span class="token operator">==</span> target<span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token boolean">True</span> <span class="token keyword">elif</span> item<span class="token punctuation">[</span>m<span class="token punctuation">]</span> <span class="token operator"><</span> target<span class="token punctuation">:</span> j <span class="token operator">=</span> m <span class="token operator">-</span> <span class="token number">1</span> <span class="token keyword">else</span><span class="token punctuation">:</span> i <span class="token operator">=</span> m <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">return</span> <span class="token boolean">False</span> <span class="token keyword">return</span> <span class="token boolean">False</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day21</title>
<link href="//code/python/pythontip-100days-day21/"/>
<url>//code/python/pythontip-100days-day21/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>给你两个升序整数数组 <code>nums1</code> 和 <code>nums2</code>,请你将 nums2 按升序合并到到新的数组并返回。</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">merge([1,2,3],[2,5,6]) -> [1,2,2,3,5,6]merge([1,2,3,7],[4,5,6]) -> [1,2,3,4,5,6,7] <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的数组均不为空</li><li>输入的数组均为升序</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>利用数组有序的性质</li><li>避免全局排序</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">merge</span><span class="token punctuation">(</span>nums1<span class="token punctuation">,</span>nums2<span class="token punctuation">)</span><span class="token punctuation">:</span> i <span class="token punctuation">,</span> j <span class="token operator">=</span> <span class="token number">0</span> <span class="token punctuation">,</span> <span class="token number">0</span> merged <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">while</span> i <span class="token operator"><</span> <span class="token builtin">len</span><span class="token punctuation">(</span>nums1<span class="token punctuation">)</span> <span class="token keyword">and</span> j <span class="token operator"><</span> <span class="token builtin">len</span><span class="token punctuation">(</span>nums2<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">if</span> nums1<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><=</span> nums2<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">:</span> merged<span class="token punctuation">.</span>append<span class="token punctuation">(</span>nums1<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> i <span class="token operator">+=</span> <span class="token number">1</span> <span class="token keyword">else</span><span class="token punctuation">:</span> merged<span class="token punctuation">.</span>append<span class="token punctuation">(</span>nums2<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span> j <span class="token operator">+=</span> <span class="token number">1</span> <span class="token keyword">if</span> i <span class="token operator"><</span> <span class="token builtin">len</span><span class="token punctuation">(</span>nums1<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">for</span> num <span class="token keyword">in</span> nums1<span class="token punctuation">[</span>i <span class="token punctuation">:</span> <span class="token punctuation">]</span><span class="token punctuation">:</span> merged<span class="token punctuation">.</span>append<span class="token punctuation">(</span>num<span class="token punctuation">)</span> <span class="token keyword">if</span> j <span class="token operator"><</span> <span class="token builtin">len</span><span class="token punctuation">(</span>nums2<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">for</span> num <span class="token keyword">in</span> nums2<span class="token punctuation">[</span>j <span class="token punctuation">:</span> <span class="token punctuation">]</span><span class="token punctuation">:</span> merged<span class="token punctuation">.</span>append<span class="token punctuation">(</span>num<span class="token punctuation">)</span> <span class="token keyword">return</span> merged <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(n)</code></li><li>空间复杂度<code>O(n)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>利用数组有序的性质</li><li>避免全局排序</li></ol>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day20</title>
<link href="//code/python/pythontip-100days-day20/"/>
<url>//code/python/pythontip-100days-day20/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>输入一个升序的整数数组,和一个整数,使用二分查找在数组中搜索该整数,返回最靠右的位置。</p><p>如果不存在返回-1</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">binarySearchRightmost([1,2,3,3,3,4],3) -> 4binarySearchRightmost([10,14,20,21,22,22],22) -> 5binarySearchRightmost([5,10,12],3) -> -1 <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的数组不为空</li><li>输入的数组为升序</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>二分查找变形</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">binarySearchRightmost</span><span class="token punctuation">(</span>nums<span class="token punctuation">,</span>target<span class="token punctuation">)</span><span class="token punctuation">:</span> rightmost_idx <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span> left <span class="token punctuation">,</span> right <span class="token operator">=</span> <span class="token number">0</span> <span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">1</span> <span class="token keyword">while</span> left <span class="token operator"><=</span> right<span class="token punctuation">:</span> mid <span class="token operator">=</span> <span class="token punctuation">(</span>left <span class="token operator">+</span> right<span class="token punctuation">)</span> <span class="token operator">//</span> <span class="token number">2</span> <span class="token keyword">if</span> nums<span class="token punctuation">[</span>mid<span class="token punctuation">]</span> <span class="token operator">==</span> target<span class="token punctuation">:</span> rightmost_idx <span class="token operator">=</span> mid left <span class="token operator">=</span> mid <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">elif</span> nums<span class="token punctuation">[</span>mid<span class="token punctuation">]</span> <span class="token operator"><</span> target<span class="token punctuation">:</span> left <span class="token operator">=</span> mid <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">elif</span> nums<span class="token punctuation">[</span>mid<span class="token punctuation">]</span> <span class="token operator">></span> target<span class="token punctuation">:</span> right <span class="token operator">=</span> mid <span class="token operator">-</span> <span class="token number">1</span> <span class="token keyword">return</span> rightmost_idx<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(logn)</code></li><li>空间复杂度<code>O(1)</code></li></ol><p><strong>关键点</strong>:1.二分查找变形</p><h3 id="解法2:"><a href="#解法2:" class="headerlink" title="解法2:"></a>解法2:</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">binarySearchRightmost</span><span class="token punctuation">(</span>nums<span class="token punctuation">:</span> <span class="token builtin">list</span><span class="token punctuation">,</span> target<span class="token punctuation">:</span> <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">int</span><span class="token punctuation">:</span> <span class="token keyword">if</span> <span class="token keyword">not</span> nums<span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span> i<span class="token punctuation">,</span> j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">1</span> <span class="token keyword">while</span> i <span class="token operator"><=</span> j<span class="token punctuation">:</span> m <span class="token operator">=</span> <span class="token punctuation">(</span>i <span class="token operator">+</span> j<span class="token punctuation">)</span> <span class="token operator">//</span> <span class="token number">2</span> <span class="token keyword">if</span> target <span class="token operator">==</span> nums<span class="token punctuation">[</span>m<span class="token punctuation">]</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">""" 1. 如果nums[m] == target,但是存在nums[m+1] == target,则应该继续判断 2. 将j作为右边界,控制m不会越界 """</span> <span class="token keyword">if</span> m <span class="token operator"><</span> j<span class="token punctuation">:</span> <span class="token keyword">if</span> nums<span class="token punctuation">[</span>m <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">></span> nums<span class="token punctuation">[</span>m<span class="token punctuation">]</span><span class="token punctuation">:</span> <span class="token keyword">return</span> m <span class="token keyword">else</span><span class="token punctuation">:</span> i <span class="token operator">=</span> m <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">return</span> m <span class="token keyword">elif</span> target <span class="token operator"><</span> nums<span class="token punctuation">[</span>m<span class="token punctuation">]</span><span class="token punctuation">:</span> j <span class="token operator">=</span> m <span class="token operator">-</span> <span class="token number">1</span> <span class="token keyword">else</span><span class="token punctuation">:</span> i <span class="token operator">=</span> m <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day19</title>
<link href="//code/python/pythontip-100days-day19/"/>
<url>//code/python/pythontip-100days-day19/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>输入一个数组,将数组中奇数放到偶数前面</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">oddEven([1,2,3,4,5]) -> [1,3,5,4,2]<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的数组不为空</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>快速排序变形</li></ol><h1 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h1><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">oddEven</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span><span class="token punctuation">:</span> i <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span> <span class="token keyword">for</span> j <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token builtin">len</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">if</span> nums<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">%</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">:</span> i <span class="token operator">+=</span> <span class="token number">1</span> nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span>nums<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> nums<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">,</span>nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token keyword">return</span> nums<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(n)</code></li><li>空间复杂度<code>O(1)</code></li></ol><p><strong>关键点</strong>:1.快速排序变形</p><h3 id="解法2:"><a href="#解法2:" class="headerlink" title="解法2:"></a>解法2:</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">oddEven</span><span class="token punctuation">(</span>nums<span class="token punctuation">:</span> <span class="token builtin">list</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">list</span><span class="token punctuation">:</span> <span class="token keyword">if</span> <span class="token keyword">not</span> nums<span class="token punctuation">:</span> <span class="token keyword">return</span> nums i<span class="token punctuation">,</span> j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">1</span> <span class="token keyword">while</span> i <span class="token operator"><=</span> j<span class="token punctuation">:</span> <span class="token keyword">while</span> nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">%</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">1</span> <span class="token keyword">and</span> i <span class="token operator"><</span> <span class="token builtin">len</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span><span class="token punctuation">:</span> i <span class="token operator">+=</span> <span class="token number">1</span> <span class="token keyword">while</span> nums<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">%</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">0</span> <span class="token keyword">and</span> i <span class="token operator">>=</span> <span class="token number">0</span><span class="token punctuation">:</span> j <span class="token operator">-=</span> <span class="token number">1</span> <span class="token keyword">if</span> i <span class="token operator"><=</span> j<span class="token punctuation">:</span> nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> nums<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> nums<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">,</span> nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token keyword">return</span> nums<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day18</title>
<link href="//code/python/pythontip-100days-day18/"/>
<url>//code/python/pythontip-100days-day18/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>求两个数组的交集</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">intersection([1,2,3],[1,3,5]) -> [1,3]intersection([1,2,3],[4,5,6]) -> []<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入的数组不含重复元素</li><li>输入的数组均不为空</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>利用<code>set</code></li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-none"><code class="language-none">def intersection(nums_1,nums_2): return list(set(nums_1) & set(nums_2))<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(n^2)</code></li><li>空间复杂度<code>O(n)</code></li></ol><p><strong>关键点</strong>:1.利用<code>set</code></p>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day17</title>
<link href="//code/python/pythontip-100days-day17/"/>
<url>//code/python/pythontip-100days-day17/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, <code>[0,1,2,4,5,6,7]</code> 经旋转后可能变为<code>[4,5,6,7,0,1,2]</code> )。请你在数组中搜索<code>target</code> ,如果数组中存在这个目标值,则返回它的索引,否则返回<code>-1</code>。</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">searchRotate([4,5,6,7,0,1,2],4) -> 0searchRotate([4,5,6,7,0,1,2],3) -> -1searchRotate([4,5,6,7,0,1,2],1) -> 5searchRotate([1],0) -> -1<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入数组不含重复元素</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>二分查找变形</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1"><a href="#解法1" class="headerlink" title="解法1"></a>解法1</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">searchRotate</span><span class="token punctuation">(</span>nums<span class="token punctuation">,</span>target<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">if</span> <span class="token keyword">not</span> nums<span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span> i<span class="token punctuation">,</span>j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span><span class="token builtin">len</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span><span class="token operator">-</span><span class="token number">1</span> <span class="token keyword">while</span> i <span class="token operator"><=</span> j<span class="token punctuation">:</span> m <span class="token operator">=</span> <span class="token punctuation">(</span>i <span class="token operator">+</span> j<span class="token punctuation">)</span> <span class="token operator">//</span> <span class="token number">2</span> <span class="token keyword">if</span> target <span class="token operator">==</span> nums<span class="token punctuation">[</span>m<span class="token punctuation">]</span><span class="token punctuation">:</span> <span class="token keyword">return</span> m <span class="token keyword">if</span> nums<span class="token punctuation">[</span>m<span class="token punctuation">]</span> <span class="token operator"><</span> target<span class="token punctuation">:</span> <span class="token keyword">if</span> target <span class="token operator">>=</span> nums<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token keyword">and</span> nums<span class="token punctuation">[</span>m<span class="token punctuation">]</span> <span class="token operator"><</span> nums<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">:</span> j <span class="token operator">=</span> m <span class="token operator">-</span> <span class="token number">1</span> <span class="token keyword">else</span><span class="token punctuation">:</span> i <span class="token operator">=</span> m <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">if</span> target <span class="token operator"><=</span> nums<span class="token punctuation">[</span><span class="token builtin">len</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span> <span class="token keyword">and</span> nums<span class="token punctuation">[</span>m<span class="token punctuation">]</span> <span class="token operator">></span> nums<span class="token punctuation">[</span><span class="token builtin">len</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">:</span> i <span class="token operator">=</span> m <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">else</span><span class="token punctuation">:</span> j <span class="token operator">=</span> m <span class="token operator">-</span> <span class="token number">1</span> <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(logn)</code></li><li>空间复杂度<code>O(1)</code></li></ol><p><strong>关键点</strong>:1.二分查找变形</p>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day16</title>
<link href="//code/python/pythontip-100days-day16/"/>
<url>//code/python/pythontip-100days-day16/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>给你两个二进制字符串,返回它们的和(用二进制表示)。</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">addBinary('11','1') -> '100'addBinary('1010','1011') -> '10101'<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入为 非空 字符串且只包含数字 1 和 0</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>模拟加法运算</li><li>注意进位</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法1:"><a href="#解法1:" class="headerlink" title="解法1:"></a>解法1:</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">addBinary</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>b<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">if</span> <span class="token keyword">not</span> a <span class="token keyword">or</span> <span class="token keyword">not</span> b<span class="token punctuation">:</span> <span class="token keyword">return</span> a <span class="token keyword">or</span> b a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> ans <span class="token operator">=</span> a<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> b<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token comment"># carry: 进位</span> i <span class="token operator">=</span> j <span class="token operator">=</span> carry <span class="token operator">=</span> <span class="token number">0</span> <span class="token keyword">while</span> i <span class="token operator"><</span> <span class="token builtin">len</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span> <span class="token keyword">or</span> j <span class="token operator"><</span> <span class="token builtin">len</span><span class="token punctuation">(</span>b<span class="token punctuation">)</span> <span class="token keyword">or</span> carry<span class="token punctuation">:</span> n1 <span class="token operator">=</span> <span class="token builtin">int</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">if</span> i <span class="token operator"><</span> <span class="token builtin">len</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span> <span class="token keyword">else</span> <span class="token number">0</span> n2 <span class="token operator">=</span> <span class="token builtin">int</span><span class="token punctuation">(</span>b<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">if</span> j <span class="token operator"><</span> <span class="token builtin">len</span><span class="token punctuation">(</span>b<span class="token punctuation">)</span> <span class="token keyword">else</span> <span class="token number">0</span> carry<span class="token punctuation">,</span> cur <span class="token operator">=</span> <span class="token builtin">divmod</span><span class="token punctuation">(</span>n1 <span class="token operator">+</span> n2 <span class="token operator">+</span> carry<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span> ans<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token builtin">str</span><span class="token punctuation">(</span>cur<span class="token punctuation">)</span><span class="token punctuation">)</span> i<span class="token punctuation">,</span> j <span class="token operator">=</span> i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">,</span> j <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">return</span> <span class="token string">''</span><span class="token punctuation">.</span>join<span class="token punctuation">(</span>ans<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(n)</code></li><li>空间复杂度<code>O(1)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>模拟加法运算</li><li>注意进位</li></ol><p><strong>算法</strong>:</p><ol><li>遍历两个二进制字符串,从低位开始相加,相加结果的模就是该位的值,商就是进位</li><li>对每一位做运算的时候要将进位加进来,没有进位则为零</li></ol><h3 id="解法2:"><a href="#解法2:" class="headerlink" title="解法2:"></a>解法2:</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">addBinary</span><span class="token punctuation">(</span>bin1<span class="token punctuation">:</span> <span class="token builtin">str</span><span class="token punctuation">,</span> bin2<span class="token punctuation">:</span> <span class="token builtin">str</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">str</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">""" 1. 判断bin1、bin2的值是否为空,如果其中一个输入为空,则直接返回另一个输入;如果两个输入都为空,则返回空 2. 将二进制数字字符串转为数字,然后做加法运算 3. 将运算结果通过bin()方法转为字符串,取0b后面的部分 :param bin1: :param bin2: :return: """</span> <span class="token comment"># 判断bin1、bin2的值是否为空,如果其中一个输入为空,则直接返回另一个输入;如果两个输入都为空,则返回空</span> <span class="token keyword">if</span> <span class="token keyword">not</span> bin1 <span class="token keyword">or</span> <span class="token keyword">not</span> bin2<span class="token punctuation">:</span> <span class="token keyword">return</span> bin1 <span class="token keyword">or</span> bin2 bin1 <span class="token operator">=</span> <span class="token builtin">int</span><span class="token punctuation">(</span>bin1<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span> bin2 <span class="token operator">=</span> <span class="token builtin">int</span><span class="token punctuation">(</span>bin2<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token builtin">bin</span><span class="token punctuation">(</span>bin1 <span class="token operator">+</span> bin2<span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">:</span><span class="token punctuation">]</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(n)</code></li><li>空间复杂度<code>O(1)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>利用int(),可以将数字字符串转为数字</li><li>利用bin()方法,将数字转为二进制字符串</li></ol><h3 id="拓展"><a href="#拓展" class="headerlink" title="拓展"></a>拓展</h3><h3 id="二进制减法"><a href="#二进制减法" class="headerlink" title="二进制减法"></a>二进制减法</h3><h3 id="二进制乘法"><a href="#二进制乘法" class="headerlink" title="二进制乘法"></a>二进制乘法</h3><h3 id="二进制除法"><a href="#二进制除法" class="headerlink" title="二进制除法"></a>二进制除法</h3>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>pythontip 100days-day15</title>
<link href="//code/python/pythontip-100days-day15/"/>
<url>//code/python/pythontip-100days-day15/</url>
<content type="html"><![CDATA[<h2 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h2><p>判断一个整数是否为回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。</p><h2 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h2><pre class="line-numbers language-none"><code class="language-none">isPalindrome(1) -> TrueisPalindrome(121) -> TrueisPalindrome(-121) -> False<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><h2 id="假设"><a href="#假设" class="headerlink" title="假设"></a>假设</h2><ol><li>输入为整数</li></ol><h2 id="tips"><a href="#tips" class="headerlink" title="tips"></a>tips</h2><ol><li>你能想到不将整数转换为字符串的方法吗</li><li>利用除法和取模运算</li></ol><h2 id="答案"><a href="#答案" class="headerlink" title="答案"></a>答案</h2><h3 id="解法"><a href="#解法" class="headerlink" title="解法"></a>解法</h3><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">isPalindrome</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">if</span> x<span class="token operator"><</span><span class="token number">0</span> <span class="token keyword">or</span> <span class="token punctuation">(</span>x<span class="token operator">%</span><span class="token number">10</span> <span class="token operator">==</span> <span class="token number">0</span> <span class="token keyword">and</span> x <span class="token operator">!=</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token boolean">False</span> origin <span class="token operator">=</span> x revertedNumber <span class="token operator">=</span> <span class="token number">0</span> <span class="token keyword">while</span> x <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">:</span> revertedNumber <span class="token operator">=</span> revertedNumber<span class="token operator">*</span><span class="token number">10</span> <span class="token operator">+</span> x<span class="token operator">%</span><span class="token number">10</span> x <span class="token operator">//=</span> <span class="token number">10</span> <span class="token keyword">return</span> origin <span class="token operator">==</span> revertedNumber <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><strong>性能</strong>:</p><ol><li>时间复杂度<code>O(logn)</code></li><li>空间复杂度<code>O(1)</code></li></ol><p><strong>关键点</strong>:</p><ol><li>利用除法和取模运算</li></ol>]]></content>
<categories>
<category> Code </category>
<category> python </category>
</categories>
<tags>
<tag> python </tag>
<tag> python days100 </tag>
<tag> pythontip </tag>
</tags>
</entry>
<entry>
<title>算法——动态规划</title>
<link href="//blogs/suan-fa-dong-tai-gui-hua/"/>
<url>//blogs/suan-fa-dong-tai-gui-hua/</url>