Repository navigation
Expand file tree
/
Copy pathatom.xml
More file actions
549 lines (296 loc) · 258 KB
/
Copy pathatom.xml
File metadata and controls
549 lines (296 loc) · 258 KB
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
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>lb's blog</title>
<subtitle>明天会在哪,勇敢无畏的去闯吧</subtitle>
<link href="http://bbstudy.net/atom.xml" rel="self"/>
<link href="http://bbstudy.net/"/>
<updated>2023-02-17T02:46:29.028Z</updated>
<id>http://bbstudy.net/</id>
<author>
<name>lb</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>【LeetCode每日一题】1139. 最大的以 1 为边界的正方形</title>
<link href="http://bbstudy.net/LeetCode-1139/"/>
<id>http://bbstudy.net/LeetCode-1139/</id>
<published>2023-02-17T02:26:54.243Z</published>
<updated>2023-02-17T02:46:29.028Z</updated>
<content type="html"><![CDATA[<blockquote><p>题目链接:<a href="https://leetcode.cn/problems/largest-1-bordered-square/">https://leetcode.cn/problems/largest-1-bordered-square/</a></p><p>题目难度:中等</p></blockquote><span id="more"></span><h3 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h3><p>给你一个由若干 <code>0</code> 和 <code>1</code> 组成的二维网格 <code>grid</code>,请你找出边界全部由 <code>1</code> 组成的最大 <strong>正方形</strong> 子网格,并返回该子网格中的元素数量。如果不存在,则返回 <code>0</code>。</p><p><strong>示例1:</strong></p><pre class="language-none"><code class="language-none">输入:grid = [[1,1,1],[1,0,1],[1,1,1]]输出:9</code></pre><p><strong>示例2:</strong></p><pre class="language-none"><code class="language-none">输入:grid = [[1,1,0,0]]输出:1</code></pre><p><strong>提示:</strong></p><ul><li><code>1 <= grid.length <= 100</code></li><li><code>1 <= grid[0].length <= 100</code></li><li><code>grid[i][j]</code> 为 <code>0</code> 或 <code>1</code></li></ul><h3 id="题解:DP-思维"><a href="#题解:DP-思维" class="headerlink" title="题解:DP+思维"></a>题解:DP+思维</h3><p>官方题解:<a href="https://leetcode.cn/problems/largest-1-bordered-square/solution/zui-da-de-yi-1-wei-bian-jie-de-zheng-fan-74ce/">https://leetcode.cn/problems/largest-1-bordered-square/solution/zui-da-de-yi-1-wei-bian-jie-de-zheng-fan-74ce/</a></p><p>实则这题暴力大概率能过。但是还是尽可能将其优化。</p><p>假设当前的子正方形的右下顶点的坐标为$(i,j)$,边长为$l$,那么它的四个顶点坐标分别为:$(i-l+1,j-l+1),(i-l+1,j),(i,j-l+1),(i,j)$</p><p>如果要判断该子正方形是否满足边界全为一的条件,则只需判断他们之间的边上全是1。为了不重复计算,定义四个数组:</p><ul><li>$left[i][j]$:坐标$(i,j)$左边最长连续1的长度</li><li>$right[i][j]$:坐标$(i,j)$右边最长连续1的长度</li><li>$up[i][j]$:坐标$(i,j)$上方最长连续1的长度</li><li>$down[i][j]$:坐标$(i,j)$下方连续1的长度</li></ul><p>四个数组通过遍历整个数组便可得到其结果,</p><p>但是由于正方形的特点,可以对四个数组进行优化,只需要left和up数组即可,</p><p>因为如果当前子正方形的右下顶点坐标为$(i,j)$,边长为$l$,如果满足题意的话,则只需要:</p><ul><li>$left[i][j]>=l$</li><li>$up[i][j]>=l$</li><li>$left[i-l+1][j]>=l$</li><li>$up[i][j-l+1]>=l$</li></ul><p>left和up数组可以通过遍历整个二维数组得到。而对于边长的确定,从大到小遍历,其中边长的最大可能的值为:$min(left[i][j],up[i][j])$。</p><p>实则时间复杂度仍然为:$O(n^3)$</p><p><strong>Tips:</strong>为了方便动态规划处理边界问题,left和up数组均从1开始,具体见代码。</p><h4 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h4><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token keyword">int</span> <span class="token function">largest1BorderedSquare</span><span class="token punctuation">(</span>vector<span class="token operator"><</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">>></span><span class="token operator">&</span> grid<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> n <span class="token operator">=</span> grid<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> m <span class="token operator">=</span> grid<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> vector<span class="token operator"><</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">>></span> <span class="token function">up</span><span class="token punctuation">(</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token generic-function"><span class="token function">vector</span><span class="token generic class-name"><span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span></span></span><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 punctuation">)</span><span class="token punctuation">;</span> vector<span class="token operator"><</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">>></span> <span class="token function">left</span><span class="token punctuation">(</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token generic-function"><span class="token function">vector</span><span class="token generic class-name"><span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span></span></span><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 punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> maxl <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> l <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> i<span class="token operator"><=</span>n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> j<span class="token operator"><=</span>m<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>grid<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 punctuation">)</span> <span class="token punctuation">{</span> up<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> up<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 punctuation">]</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> left<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> left<span class="token punctuation">[</span>i<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 operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> l <span class="token operator">=</span> <span class="token function">min</span><span class="token punctuation">(</span>left<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> up<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><span class="token punctuation">;</span> <span class="token keyword">while</span><span class="token punctuation">(</span>up<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token operator">-</span>l<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 operator">||</span> left<span class="token punctuation">[</span>i<span class="token operator">-</span>l<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> l<span class="token punctuation">)</span> <span class="token operator">--</span>l<span class="token punctuation">;</span> maxl <span class="token operator">=</span> <span class="token function">max</span><span class="token punctuation">(</span>maxl<span class="token punctuation">,</span> l<span class="token punctuation">)</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">return</span> maxl <span class="token operator">*</span> maxl<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre><h4 id="Java代码"><a href="#Java代码" class="headerlink" title="Java代码"></a>Java代码</h4><pre class="language-java" data-language="java"><code class="language-java"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">largest1BorderedSquare</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span> grid<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> n <span class="token operator">=</span> grid<span class="token punctuation">.</span>length<span class="token punctuation">,</span> m <span class="token operator">=</span> grid<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span>length<span class="token punctuation">;</span> <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span> left <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">int</span><span class="token punctuation">[</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><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 punctuation">;</span> <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span> up <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">int</span><span class="token punctuation">[</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><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 punctuation">;</span> <span class="token keyword">int</span> l <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> maxl <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> i<span class="token operator"><=</span>n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> j<span class="token operator"><=</span>m<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>grid<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 operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> left<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> left<span class="token punctuation">[</span>i<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 operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> up<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> up<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 punctuation">]</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> l <span class="token operator">=</span> <span class="token class-name">Math</span><span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span>left<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> up<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><span class="token punctuation">;</span> <span class="token keyword">while</span><span class="token punctuation">(</span>left<span class="token punctuation">[</span>i<span class="token operator">-</span>l<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> l <span class="token operator">||</span> up<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token operator">-</span>l<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> <span class="token operator">--</span>l<span class="token punctuation">;</span> maxl <span class="token operator">=</span> <span class="token class-name">Math</span><span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span>maxl<span class="token punctuation">,</span> l<span class="token punctuation">)</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">return</span> maxl<span class="token operator">*</span>maxl<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre>]]></content>
<summary type="html"><blockquote>
<p>题目链接:<a href="https://leetcode.cn/problems/largest-1-bordered-square/">https://leetcode.cn/problems/largest-1-bordered-square/</a></p>
<p>题目难度:中等</p>
</blockquote></summary>
<category term="LeetCode每日一题" scheme="http://bbstudy.net/categories/LeetCode%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>【LeetCode每日一题】1250. 检查「好数组」</title>
<link href="http://bbstudy.net/LeetCode-1250/"/>
<id>http://bbstudy.net/LeetCode-1250/</id>
<published>2023-02-15T01:43:19.764Z</published>
<updated>2023-02-15T02:03:37.129Z</updated>
<content type="html"><![CDATA[<blockquote><p>题目链接:<a href="https://leetcode.cn/problems/dice-roll-simulation/">https://leetcode.cn/problems/dice-roll-simulation/</a></p><p>题目难度:困难</p></blockquote><span id="more"></span><h3 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h3><p>给你一个正整数数组 nums,你需要从中任选一些子集,然后将子集中每一个数乘以一个 <strong>任意整数</strong>,并求出他们的和。</p><p>假如该和结果为 1,那么原数组就是一个<strong>「好数组」</strong>,则返回 True;否则请返回 False。</p><p><strong>示例1:</strong></p><pre class="language-none"><code class="language-none">输入:nums = [12,5,7,23]输出:true解释:挑选数字 5 和 7。5*3 + 7*(-2) = 1</code></pre><p><strong>示例2:</strong></p><pre class="language-none"><code class="language-none">输入:nums = [29,6,10]输出:true解释:挑选数字 29, 6 和 10。29*1 + 6*(-3) + 10*(-1) = 1</code></pre><p><strong>示例3:</strong></p><pre class="language-none"><code class="language-none">输入:nums = [3,6]输出:false</code></pre><p><strong>提示:</strong></p><ul><li><code>1 <= nums.length <= 10^5</code></li><li><code>1 <= nums[i] <= 10^9</code></li></ul><h3 id="题解:裴蜀定理"><a href="#题解:裴蜀定理" class="headerlink" title="题解:裴蜀定理"></a>题解:裴蜀定理</h3><p>官方题解:<a href="https://leetcode.cn/problems/check-if-it-is-a-good-array/solution/jian-cha-hao-shu-zu-by-leetcode-solution-qg2h/">https://leetcode.cn/problems/check-if-it-is-a-good-array/solution/jian-cha-hao-shu-zu-by-leetcode-solution-qg2h/</a></p><p>裴蜀定理基本内容:</p><p>对于不全为零的任意整数a和b,记$g=gcd(a,b)$,其中$gcd(a,b)$为a和b的最小公约数,则对于任意整数x和y都满足$ax+by$是g的倍数,特别地,存在整数x和y满足$ax+by = g$。</p><p><strong>推广:</strong></p><p>对于不全为0的任意整数$a<em>1, a_2, …, a_n$,记这n个数的最大公约数g,对于任意n个整数$x_1, x_2, …, x_n$都满足$\Sigma</em>{i=1}^n a<em>i * x_i$ 是g的倍数。于是一个重要的推论:正整数$a_1$到$a_n$的最大公约数是1的充分必要条件是存在n个整数$x_1$到$x_n$满足$\Sigma</em>{i=1}^{n}a_i * x_i = 1$。</p><p>于是该题直接求nums数组中全部数字的最大公约数是否为1即可。</p><h4 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h4><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token keyword">bool</span> <span class="token function">isGoodArray</span><span class="token punctuation">(</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&</span> nums<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> gcd_num <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> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> x <span class="token operator">:</span> nums<span class="token punctuation">)</span> <span class="token punctuation">{</span> gcd_num <span class="token operator">=</span> <span class="token function">gcd</span><span class="token punctuation">(</span>gcd_num<span class="token punctuation">,</span> x<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>gcd_num <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> gcd_num <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></code></pre><h4 id="Java代码"><a href="#Java代码" class="headerlink" title="Java代码"></a>Java代码</h4><pre class="language-java" data-language="java"><code class="language-java"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">isGoodArray</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> nums<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> gcd_num <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> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> x <span class="token operator">:</span> nums<span class="token punctuation">)</span> <span class="token punctuation">{</span> gcd_num <span class="token operator">=</span> <span class="token function">gcd</span><span class="token punctuation">(</span>gcd_num<span class="token punctuation">,</span> x<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>gcd_num <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> gcd_num <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">int</span> <span class="token function">gcd</span><span class="token punctuation">(</span><span class="token keyword">int</span> a<span class="token punctuation">,</span> <span class="token keyword">int</span> b<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> b <span class="token operator">==</span> <span class="token number">0</span> <span class="token operator">?</span> a <span class="token operator">:</span> <span class="token function">gcd</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span> a<span class="token operator">%</span>b<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre>]]></content>
<summary type="html"><blockquote>
<p>题目链接:<a href="https://leetcode.cn/problems/dice-roll-simulation/">https://leetcode.cn/problems/dice-roll-simulation/</a></p>
<p>题目难度:困难</p>
</blockquote></summary>
<category term="LeetCode每日一题" scheme="http://bbstudy.net/categories/LeetCode%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>LeetCode 数论算法汇总</title>
<link href="http://bbstudy.net/Math/"/>
<id>http://bbstudy.net/Math/</id>
<published>2023-02-15T01:41:34.024Z</published>
<updated>2023-02-15T01:43:09.910Z</updated>
<content type="html"><![CDATA[<span id="more"></span><h2 id="1223-掷骰子模拟"><a href="#1223-掷骰子模拟" class="headerlink" title="1223. 掷骰子模拟"></a>1223. 掷骰子模拟</h2><blockquote><p>题解:裴蜀定理</p><p>链接:<a href="http://bbstudy.net/LeetCode-1250">http://bbstudy.net/LeetCode-1250</a></p></blockquote>]]></content>
<summary type="html"><span id="more"></span>
<h2 id="1223-掷骰子模拟"><a href="#1223-掷骰子模拟" class="headerlink" title="1223. 掷骰子模拟"></a>1223. 掷骰子模拟</h2><blockquote>
<p</summary>
<category term="Math" scheme="http://bbstudy.net/categories/Math/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>LeetCode第332场周赛</title>
<link href="http://bbstudy.net/weekly-contest-332/"/>
<id>http://bbstudy.net/weekly-contest-332/</id>
<published>2023-02-12T06:54:06.282Z</published>
<updated>2023-02-12T08:34:29.058Z</updated>
<content type="html"><![CDATA[<h2 id="LeetCode第332场周赛题解"><a href="#LeetCode第332场周赛题解" class="headerlink" title="LeetCode第332场周赛题解"></a>LeetCode第332场周赛题解</h2><blockquote><p>比赛地址:<a href="https://leetcode.cn/contest/weekly-contest-332/">https://leetcode.cn/contest/weekly-contest-332/</a></p></blockquote><span id="more"></span><h3 id="一、找出数组的串联值"><a href="#一、找出数组的串联值" class="headerlink" title="一、找出数组的串联值"></a><a href="https://leetcode.cn/problems/find-the-array-concatenation-value/">一、找出数组的串联值</a></h3><h4 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h4><p>给你一个下标从 0 开始的整数数组 nums 。</p><p>现定义两个数字的 <strong>串联</strong> 是由这两个数值串联起来形成的新数字。</p><ul><li>例如,15 和 49 的串联是 1549 。</li></ul><p>nums 的 串联值 最初等于 0 。执行下述操作直到 nums 变为空:</p><ul><li>如果 nums 中存在不止一个数字,分别选中 nums 中的第一个元素和最后一个元素,将二者串联得到的值加到 nums 的 <strong>串联值</strong> 上,然后从 nums 中删除第一个和最后一个元素。</li><li>如果仅存在一个元素,则将该元素的值加到 nums 的串联值上,然后删除这个元素。</li></ul><p>返回执行完所有操作后 nums 的串联值。</p><p><strong>示例1:</strong></p><pre class="language-markdown" data-language="markdown"><code class="language-markdown">输入:nums = [7,52,2,4]输出:596解释:在执行任一步操作前,nums 为 [7,52,2,4] ,串联值为 0 。 <span class="token list punctuation">-</span> 在第一步操作中:我们选中第一个元素 7 和最后一个元素 4 。二者的串联是 74 ,将其加到串联值上,所以串联值等于 74 。接着我们从 nums 中移除这两个元素,所以 nums 变为 [52,2] 。 <span class="token list punctuation">-</span> 在第二步操作中: 我们选中第一个元素 52 和最后一个元素 2 。 二者的串联是 522 ,将其加到串联值上,所以串联值等于 596 。接着我们从 nums 中移除这两个元素,所以 nums 变为空。由于串联值等于 596 ,所以答案就是 596 。</code></pre><p><strong>示例2:</strong></p><pre class="language-markdown" data-language="markdown"><code class="language-markdown">输入:nums = [5,14,13,8,12]输出:673解释:在执行任一步操作前,nums 为 [5,14,13,8,12] ,串联值为 0 。 <span class="token list punctuation">-</span> 在第一步操作中: 我们选中第一个元素 5 和最后一个元素 12 。 二者的串联是 512 ,将其加到串联值上,所以串联值等于 512 。 接着我们从 nums 中移除这两个元素,所以 nums 变为 [14,13,8] 。<span class="token list punctuation">-</span> 在第二步操作中:我们选中第一个元素 14 和最后一个元素 8 。二者的串联是 148 ,将其加到串联值上,所以串联值等于 660 。接着我们从 nums 中移除这两个元素,所以 nums 变为 [13] 。 <span class="token list punctuation">-</span> 在第三步操作中:nums 只有一个元素,所以我们选中 13 并将其加到串联值上,所以串联值等于 673 。接着我们从 nums 中移除这个元素,所以 nums 变为空。 由于串联值等于 673 ,所以答案就是 673 。</code></pre><p><strong>提示:</strong></p><ul><li><code>1 <= nums.length <= 1000</code></li><li><code>1 <= nums[i] <= 10^4</code></li></ul><h4 id="题解:模拟"><a href="#题解:模拟" class="headerlink" title="题解:模拟"></a>题解:模拟</h4><p>遍历数组前一半元素,依次对称选择数对$[nums[i], nums[n-1-i]]$ 按照题意进行操作。</p><ul><li>如果数组长度为奇数,则对中间元素单独处理</li></ul><p><strong>C++代码:</strong></p><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token keyword">long</span> <span class="token keyword">long</span> <span class="token function">findTheArrayConcVal</span><span class="token punctuation">(</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&</span> nums<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> n <span class="token operator">=</span> nums<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ans <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><</span>n<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> string s <span class="token operator">=</span> <span class="token function">to_string</span><span class="token punctuation">(</span>nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token function">to_string</span><span class="token punctuation">(</span>nums<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><span class="token punctuation">;</span> ans <span class="token operator">+=</span> <span class="token punctuation">(</span><span class="token keyword">long</span> <span class="token keyword">long</span><span class="token punctuation">)</span><span class="token function">stoi</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">if</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> string s <span class="token operator">=</span> <span class="token function">to_string</span><span class="token punctuation">(</span>nums<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 punctuation">;</span> ans <span class="token operator">+=</span> <span class="token punctuation">(</span><span class="token keyword">long</span> <span class="token keyword">long</span><span class="token punctuation">)</span><span class="token function">stoi</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> ans<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre><p><strong>Java代码:</strong></p><pre class="language-java" data-language="java"><code class="language-java"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">long</span> <span class="token function">findTheArrayConcVal</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> nums<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> n <span class="token operator">=</span> nums<span class="token punctuation">.</span>length<span class="token punctuation">;</span> <span class="token keyword">long</span> ans <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><</span>n<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> ans <span class="token operator">+=</span> <span class="token class-name">Integer</span><span class="token punctuation">.</span><span class="token function">parseInt</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span>nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token class-name">String</span><span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span>nums<span class="token punctuation">[</span>n<span class="token operator">-</span><span class="token number">1</span><span class="token operator">-</span>i<span class="token punctuation">]</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><span class="token punctuation">(</span>n<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> <span class="token punctuation">{</span> ans <span class="token operator">+=</span> nums<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 punctuation">}</span> <span class="token keyword">return</span> ans<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><h3 id="二、统计公平数对的数目"><a href="#二、统计公平数对的数目" class="headerlink" title="二、统计公平数对的数目"></a><a href="https://leetcode.cn/problems/count-the-number-of-fair-pairs/">二、统计公平数对的数目</a></h3><h4 id="题意-1"><a href="#题意-1" class="headerlink" title="题意"></a>题意</h4><p>给你一个下标从 0 开始、长度为 n 的整数数组 nums ,和两个整数 lower 和 upper ,返回 公平数对的数目 。</p><p>如果 (i, j) 数对满足以下情况,则认为它是一个 <strong>公平数对</strong> :</p><ul><li>0 <= i < j < n,且</li><li>lower <= nums[i] + nums[j] <= upper</li></ul><p><strong>示例1:</strong></p><pre class="language-none"><code class="language-none">输入:nums = [0,1,7,4,4,5], lower = 3, upper = 6输出:6解释:共计 6 个公平数对:(0,3)、(0,4)、(0,5)、(1,3)、(1,4) 和 (1,5) 。</code></pre><p><strong>示例2:</strong></p><pre class="language-none"><code class="language-none">输入:nums = [1,7,9,2,5], lower = 11, upper = 11输出:1解释:只有单个公平数对:(2,3) 。</code></pre><p><strong>提示</strong></p><ul><li>$1 <= nums.length <= 10^5$</li><li>$nums.length == n$</li><li>$-10^9 <= nums[i] <= 10^9$</li><li>$-10^9 <= lower <= upper <= 10^9$</li></ul><h4 id="题解:二分"><a href="#题解:二分" class="headerlink" title="题解:二分"></a>题解:二分</h4><p>首先对问题进行转换:</p><p>$lower <= nums[i] + nums[j] <= upper$ 转化为:$lower-nums[i] <= nums[j] <= upper-nums[i]$。</p><p>于是问题转化为:遍历i,然后求符合条件的数下标j的取值范围。</p><p>暴力做法:直接两重循环遍历,$10^5$显然不行。</p><p>尝试优化:二分,对j的选择用二分实现,但是必须要求数组有序</p><p><strong>注:</strong></p><pre class="language-none"><code class="language-none">可能会存在相关误区,题目要求必须是i<j,然后可能会觉得不能排序,然而并非如此,题目要求是求数对(i,j),即使排序后我们求得的数对还是(i,j)只是i和j的位置发生了变化而已这里需要重点注意</code></pre><p>学习了灵神的二分,对二分有了进一步的理解,所有二分问题都可以转化为求 <strong>>=</strong> 问题</p><ul><li>$lower- num[i] <= nums[j]$,是>=问题,不用管</li><li>$nums[j] <= upper - nums[i]$ 转换为 $nums[j] > (upper - nums[i])-1$,再转换为:$nums[j] >= (upper - nums[i] +1 ) -1$</li></ul><p>C++中有库函数可以调用$lower_bound()$,$upper_bound()$</p><pre class="language-none"><code class="language-none">lower_bound():寻找第一个大于等于某个值的位置upper_bound():寻找第一个大于某个值的位置</code></pre><p><strong>C++代码一:</strong></p><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token comment">//lower <= nums[i] + nums[j] <= upper</span> <span class="token comment">//lower - nums[i] <= nums[j] <= upper - nums[i]</span> <span class="token comment">//nums[j] <= upper - nums[i] ---> nums[j] > (upper - nums[i]) -1 --> nums[j] >= (upper - nums[i] + 1) -1</span> <span class="token keyword">long</span> <span class="token keyword">long</span> <span class="token function">countFairPairs</span><span class="token punctuation">(</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&</span> nums<span class="token punctuation">,</span> <span class="token keyword">int</span> lower<span class="token punctuation">,</span> <span class="token keyword">int</span> upper<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">sort</span><span class="token punctuation">(</span>nums<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> nums<span class="token punctuation">.</span><span class="token function">end</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">long</span> <span class="token keyword">long</span> ans <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">int</span> n <span class="token operator">=</span> nums<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><</span>n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> l <span class="token operator">=</span> <span class="token function">lower_bound</span><span class="token punctuation">(</span>nums<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">+</span>i<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span> nums<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> lower<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 operator">-</span> nums<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> r <span class="token operator">=</span> <span class="token function">lower_bound</span><span class="token punctuation">(</span>nums<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">+</span>i<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span> nums<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> upper<span class="token operator">-</span>nums<span class="token punctuation">[</span>i<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> nums<span class="token punctuation">.</span><span class="token function">begin</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> ans <span class="token operator">+=</span> <span class="token punctuation">(</span>r<span class="token operator">-</span>l<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 keyword">return</span> ans<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre><p><strong>C++代码二:</strong></p><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token comment">//lower <= nums[i] + nums[j] <= upper</span> <span class="token comment">//lower - nums[i] <= nums[j] <= upper - nums[i]</span> <span class="token comment">//nums[j] <= upper - nums[i] ---> nums[j] > (upper - nums[i]) -1</span> <span class="token keyword">long</span> <span class="token keyword">long</span> <span class="token function">countFairPairs</span><span class="token punctuation">(</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&</span> nums<span class="token punctuation">,</span> <span class="token keyword">int</span> lower<span class="token punctuation">,</span> <span class="token keyword">int</span> upper<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">sort</span><span class="token punctuation">(</span>nums<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> nums<span class="token punctuation">.</span><span class="token function">end</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">long</span> <span class="token keyword">long</span> ans <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">int</span> n <span class="token operator">=</span> nums<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><</span>n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> l <span class="token operator">=</span> <span class="token function">lower_bound</span><span class="token punctuation">(</span>nums<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">+</span>i<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span> nums<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> lower<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 operator">-</span> nums<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> r <span class="token operator">=</span> <span class="token function">upper_bound</span><span class="token punctuation">(</span>nums<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">+</span>i<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span> nums<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> upper<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 operator">-</span> nums<span class="token punctuation">.</span><span class="token function">begin</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> ans <span class="token operator">+=</span> <span class="token punctuation">(</span>r<span class="token operator">-</span>l<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 keyword">return</span> ans<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre><p><strong>Java代码:</strong></p><pre class="language-java" data-language="java"><code class="language-java"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span> <span class="token comment">// 第一个大于等于某个值的位置,左闭右闭</span> <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">binarySearch1</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> nums<span class="token punctuation">,</span> <span class="token keyword">int</span> l<span class="token punctuation">,</span> <span class="token keyword">int</span> r<span class="token punctuation">,</span> <span class="token keyword">int</span> x<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//闭区间[l,r]</span> <span class="token keyword">while</span><span class="token punctuation">(</span>l <span class="token operator"><=</span> r<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> mid <span class="token operator">=</span> l <span class="token operator">+</span> <span class="token punctuation">(</span>r<span class="token operator">-</span>l<span class="token punctuation">)</span><span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>nums<span class="token punctuation">[</span>mid<span class="token punctuation">]</span> <span class="token operator"><</span> x<span class="token punctuation">)</span> <span class="token punctuation">{</span> l <span class="token operator">=</span> mid <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">//[mid+1, r]</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> r <span class="token operator">=</span> mid <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">// [l, mid-1]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> l<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">long</span> <span class="token function">countFairPairs</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> nums<span class="token punctuation">,</span> <span class="token keyword">int</span> lower<span class="token punctuation">,</span> <span class="token keyword">int</span> upper<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">sort</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> n <span class="token operator">=</span> nums<span class="token punctuation">.</span>length<span class="token punctuation">;</span> <span class="token keyword">long</span> ans <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><</span>n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> l <span class="token operator">=</span> <span class="token function">binarySearch1</span><span class="token punctuation">(</span>nums<span class="token punctuation">,</span> i<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span> n<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> lower<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 punctuation">;</span> <span class="token keyword">int</span> r <span class="token operator">=</span> <span class="token function">binarySearch1</span><span class="token punctuation">(</span>nums<span class="token punctuation">,</span> i<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span> n<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> upper<span class="token operator">-</span>nums<span class="token punctuation">[</span>i<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><span class="token number">1</span><span class="token punctuation">;</span> ans <span class="token operator">+=</span> <span class="token punctuation">(</span>r<span class="token operator">-</span>l<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 keyword">return</span> ans<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><h3 id="三、子字符串异或查询"><a href="#三、子字符串异或查询" class="headerlink" title="三、子字符串异或查询"></a><a href="https://leetcode.cn/problems/substring-xor-queries/">三、子字符串异或查询</a></h3><h4 id="题意-2"><a href="#题意-2" class="headerlink" title="题意"></a>题意</h4><p>给你一个 二进制字符串 s 和一个整数数组 queries ,其中 queries[i] = [firsti, secondi] 。</p><p>对于第 i 个查询,找到 s 的 最短子字符串 ,它对应的 十进制值 val 与 firsti 按位异或 得到 secondi ,换言之,val ^ firsti == secondi 。</p><p>第 i 个查询的答案是子字符串 [lefti, righti] 的两个端点(下标从 0 开始),如果不存在这样的子字符串,则答案为 [-1, -1] 。如果有多个答案,请你选择 lefti 最小的一个。</p><p>请你返回一个数组 ans ,其中 ans[i] = [lefti, righti] 是第 i 个查询的答案。</p><p>子字符串 是一个字符串中一段连续非空的字符序列。</p><p><strong>示例1:</strong></p><pre class="language-none"><code class="language-none">输入:s = "101101", queries = [[0,5],[1,2]]输出:[[0,2],[2,3]]解释:第一个查询,端点为 [0,2] 的子字符串为 "101" ,对应十进制数字 5 ,且 5 ^ 0 = 5 ,所以第一个查询的答案为 [0,2]。第二个查询中,端点为 [2,3] 的子字符串为 "11" ,对应十进制数字 3 ,且 3 ^ 1 = 2 。所以第二个查询的答案为 [2,3] 。</code></pre><p><strong>示例2:</strong></p><pre class="language-none"><code class="language-none">输入:s = "0101", queries = [[12,8]]输出:[[-1,-1]]解释:这个例子中,没有符合查询的答案,所以返回 [-1,-1] 。</code></pre><p><strong>示例3:</strong></p><pre class="language-none"><code class="language-none">输入:s = "1", queries = [[4,5]]输出:[[0,0]]解释:这个例子中,端点为 [0,0] 的子字符串对应的十进制值为 1 ,且 1 ^ 4 = 5 。所以答案为 [0,0] 。</code></pre><p><strong>提示:</strong></p><ul><li>$1 <= s.length <= 10^4$</li><li>s[i] 要么是 ‘0’ ,要么是 ‘1’ 。</li><li>$1 <= queries.length <= 10^5$</li><li>$0 <= first_i, second_i <= 10^9$</li></ul><h4 id="题解:哈希-异或-预处理"><a href="#题解:哈希-异或-预处理" class="headerlink" title="题解:哈希 + 异或 + 预处理"></a>题解:哈希 + 异或 + 预处理</h4><p>由于题目需要寻找$val \oplus first == second$ 的val值,不妨利用异或性质$x \oplus x = 0$,将问题进行转换:</p><p>$ first \oplus second == val$</p><p>最终问题即转化为了:对于每次查询,求字符串s中是否包含$first_i \oplus second_i$对应的二进制子字符串</p><p>而题目给定$0<= fist_i, second_i<=10^9$,转化为二进制也最多32位。于是我们采用<strong>离线查询</strong>,预处理所有长度不超过33的的子字符串,存入哈希表(注意:如果当前哈希表包含此子串,则不更新)中。</p><p>然后每次查询时,只需O(1)时间即可。</p><p><strong>C++代码:</strong></p><pre class="language-cpp" data-language="cpp"><code class="language-cpp">string <span class="token function">num_to_binString</span><span class="token punctuation">(</span><span class="token keyword">int</span> num<span class="token punctuation">)</span> <span class="token punctuation">{</span> string res <span class="token operator">=</span> <span class="token string">""</span><span class="token punctuation">;</span> <span class="token keyword">while</span><span class="token punctuation">(</span>num<span class="token punctuation">)</span> <span class="token punctuation">{</span> res <span class="token operator">+=</span> <span class="token punctuation">(</span>num<span class="token operator">%</span><span class="token number">2</span> <span class="token operator">+</span> <span class="token char">'0'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> num <span class="token operator">/=</span> <span class="token number">2</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token function">reverse</span><span class="token punctuation">(</span>res<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> res<span class="token punctuation">.</span><span class="token function">end</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">return</span> res<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> vector<span class="token operator"><</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">>></span> <span class="token function">substringXorQueries</span><span class="token punctuation">(</span>string s<span class="token punctuation">,</span> vector<span class="token operator"><</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">>></span><span class="token operator">&</span> queries<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> n <span class="token operator">=</span> s<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> map<span class="token operator"><</span>string<span class="token punctuation">,</span> <span class="token keyword">int</span><span class="token operator">></span> mp<span class="token punctuation">;</span> <span class="token comment">//将所有长度小于33的子字符串存储哈希表中</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> len<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> len<span class="token operator"><</span><span class="token number">33</span><span class="token punctuation">;</span> len<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><=</span>n<span class="token operator">-</span>len<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>mp<span class="token punctuation">.</span><span class="token function">count</span><span class="token punctuation">(</span>s<span class="token punctuation">.</span><span class="token function">substr</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span> len<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">continue</span><span class="token punctuation">;</span> mp<span class="token punctuation">[</span>s<span class="token punctuation">.</span><span class="token function">substr</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span> len<span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token operator">=</span> i<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> string str<span class="token punctuation">;</span> vector<span class="token operator"><</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">>></span> ans<span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">auto</span> <span class="token operator">&</span>ve <span class="token operator">:</span> queries<span class="token punctuation">)</span> <span class="token punctuation">{</span> str <span class="token operator">=</span> <span class="token function">num_to_binString</span><span class="token punctuation">(</span>ve<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">^</span> ve<span class="token punctuation">[</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 keyword">if</span><span class="token punctuation">(</span>str <span class="token operator">==</span> <span class="token string">""</span><span class="token punctuation">)</span> str <span class="token operator">=</span> <span class="token string">"0"</span><span class="token punctuation">;</span> <span class="token keyword">int</span> len <span class="token operator">=</span> str<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>mp<span class="token punctuation">.</span><span class="token function">count</span><span class="token punctuation">(</span>str<span class="token punctuation">)</span><span class="token punctuation">)</span> ans<span class="token punctuation">.</span><span class="token function">push_back</span><span class="token punctuation">(</span><span class="token punctuation">{</span>mp<span class="token punctuation">[</span>str<span class="token punctuation">]</span><span class="token punctuation">,</span> mp<span class="token punctuation">[</span>str<span class="token punctuation">]</span><span class="token operator">+</span>len<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 keyword">else</span> ans<span class="token punctuation">.</span><span class="token function">push_back</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 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">return</span> ans<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre><p><strong>Java代码:</strong></p><pre class="language-java" data-language="java"><code class="language-java"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token function">substringXorQueries</span><span class="token punctuation">(</span><span class="token class-name">String</span> s<span class="token punctuation">,</span> <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span> queries<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">Map</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">Integer</span><span class="token punctuation">></span></span> map <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> n <span class="token operator">=</span> s<span class="token punctuation">.</span><span class="token function">length</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//长度不超过32的子串</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> len<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> len<span class="token operator"><=</span><span class="token number">32</span><span class="token punctuation">;</span> len<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><=</span>n<span class="token operator">-</span>len<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">String</span> str <span class="token operator">=</span> s<span class="token punctuation">.</span><span class="token function">substring</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span> i<span class="token operator">+</span>len<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>map<span class="token punctuation">.</span><span class="token function">containsKey</span><span class="token punctuation">(</span>str<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> map<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span>str<span class="token punctuation">,</span> i<span class="token punctuation">)</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">int</span> m <span class="token operator">=</span> queries<span class="token punctuation">.</span>length<span class="token punctuation">;</span> <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ans <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">int</span><span class="token punctuation">[</span>m<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 class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><</span>m<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">String</span> str <span class="token operator">=</span> <span class="token class-name">Integer</span><span class="token punctuation">.</span><span class="token function">toBinaryString</span><span class="token punctuation">(</span>queries<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">^</span> queries<span class="token punctuation">[</span>i<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><span class="token punctuation">;</span> <span class="token comment">// System.out.println(str);</span> <span class="token keyword">if</span><span class="token punctuation">(</span>map<span class="token punctuation">.</span><span class="token function">containsKey</span><span class="token punctuation">(</span>str<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=</span> map<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>str<span class="token punctuation">)</span><span class="token punctuation">;</span> ans<span class="token punctuation">[</span>i<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> map<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>str<span class="token punctuation">)</span> <span class="token operator">+</span> str<span class="token punctuation">.</span><span class="token function">length</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 keyword">else</span> <span class="token punctuation">{</span> ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=</span> ans<span class="token punctuation">[</span>i<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 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 keyword">return</span> ans<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre>]]></content>
<summary type="html"><h2 id="LeetCode第332场周赛题解"><a href="#LeetCode第332场周赛题解" class="headerlink" title="LeetCode第332场周赛题解"></a>LeetCode第332场周赛题解</h2><blockquote>
<p>比赛地址:<a href="https://leetcode.cn/contest/weekly-contest-332/">https://leetcode.cn/contest/weekly-contest-332/</a></p>
</blockquote></summary>
<category term="LeetCode周赛题解" scheme="http://bbstudy.net/categories/LeetCode%E5%91%A8%E8%B5%9B%E9%A2%98%E8%A7%A3/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>【LeetCode每日一题】1223. 掷骰子模拟</title>
<link href="http://bbstudy.net/LeetCode-1223/"/>
<id>http://bbstudy.net/LeetCode-1223/</id>
<published>2023-02-10T07:32:18.934Z</published>
<updated>2023-02-10T07:50:13.827Z</updated>
<content type="html"><![CDATA[<blockquote><p>题目链接:<a href="https://leetcode.cn/problems/dice-roll-simulation/">https://leetcode.cn/problems/dice-roll-simulation/</a></p><p>题目难度:困难</p></blockquote><span id="more"></span><h3 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h3><p>有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数。</p><p>不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 <code>rollMax[i]</code>(i 从 1 开始编号)。</p><p>现在,给你一个整数数组 rollMax 和一个整数 n,请你来计算掷 n 次骰子可得到的不同点数序列的数量。</p><p>假如两个序列中至少存在一个元素不同,就认为这两个序列是不同的。由于答案可能很大,所以请返回 模 <code>10^9 + 7</code> 之后的结果。</p><p><strong>示例1:</strong></p><pre class="language-none"><code class="language-none">输入:n = 2, rollMax = [1,1,2,2,2,3]输出:34解释:我们掷 2 次骰子,如果没有约束的话,共有 6 * 6 = 36 种可能的组合。但是根据 rollMax 数组,数字 1 和 2 最多连续出现一次,所以不会出现序列 (1,1) 和 (2,2)。因此,最终答案是 36-2 = 34。</code></pre><p><strong>示例2:</strong></p><pre class="language-none"><code class="language-none">输入:n = 2, rollMax = [1,1,1,1,1,1]输出:30</code></pre><p><strong>示例3:</strong></p><pre class="language-none"><code class="language-none">输入:n = 3, rollMax = [1,1,1,2,2,3]输出:181</code></pre><p><strong>提示:</strong></p><ul><li><code>1 <= n <= 5000</code></li><li><code>rollMax.length == 6</code></li><li><code>1 <= rollMax[i] <= 15</code></li><li>树中所有值 <strong>互不相同</strong></li></ul><h3 id="题解:高维dp"><a href="#题解:高维dp" class="headerlink" title="题解:高维dp"></a>题解:高维dp</h3><p>灵神的题解通俗易懂,我就不班门弄斧了,附灵神题解链接:</p><p><a href="https://leetcode.cn/problems/dice-roll-simulation/solution/jiao-ni-yi-bu-bu-si-kao-dong-tai-gui-hua-sje6/">https://leetcode.cn/problems/dice-roll-simulation/solution/jiao-ni-yi-bu-bu-si-kao-dong-tai-gui-hua-sje6/</a></p><h4 id="C-代码(未优化)"><a href="#C-代码(未优化)" class="headerlink" title="C++代码(未优化)"></a>C++代码(未优化)</h4><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> ll mod <span class="token operator">=</span> <span class="token number">1e9</span> <span class="token operator">+</span> <span class="token number">7</span><span class="token punctuation">;</span><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token keyword">int</span> <span class="token function">dieSimulator</span><span class="token punctuation">(</span><span class="token keyword">int</span> n<span class="token punctuation">,</span> vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&</span> rollMax<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> dp<span class="token punctuation">[</span>n<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">15</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token function">memset</span><span class="token punctuation">(</span>dp<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>dp<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><</span><span class="token number">6</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> j<span class="token operator"><</span>rollMax<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> dp<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><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 number">1</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> i<span class="token operator"><</span>n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> last<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> last<span class="token operator"><</span><span class="token number">6</span><span class="token punctuation">;</span> last<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> left<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> left<span class="token operator"><</span>rollMax<span class="token punctuation">[</span>last<span class="token punctuation">]</span><span class="token punctuation">;</span> left<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<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">6</span><span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>j <span class="token operator">!=</span> last<span class="token punctuation">)</span> dp<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>last<span class="token punctuation">]</span><span class="token punctuation">[</span>left<span class="token punctuation">]</span> <span class="token operator">+=</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 punctuation">]</span><span class="token punctuation">[</span>rollMax<span class="token punctuation">[</span>j<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 keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>left <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>last<span class="token punctuation">]</span><span class="token punctuation">[</span>left<span class="token punctuation">]</span> <span class="token operator">+=</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>last<span class="token punctuation">]</span><span class="token punctuation">[</span>left<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span> dp<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>last<span class="token punctuation">]</span><span class="token punctuation">[</span>left<span class="token punctuation">]</span> <span class="token operator">%=</span> mod<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> ll ans <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<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">6</span><span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> ans <span class="token operator">=</span> <span class="token punctuation">(</span>ans <span class="token operator">+</span> dp<span class="token punctuation">[</span>n<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>rollMax<span class="token punctuation">[</span>j<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 operator">%</span> mod<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> ans<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre><h4 id="Java代码(未优化)"><a href="#Java代码(未优化)" class="headerlink" title="Java代码(未优化)"></a>Java代码(未优化)</h4><pre class="language-java" data-language="java"><code class="language-java"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span> <span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">final</span> <span class="token keyword">long</span> mod <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">long</span><span class="token punctuation">)</span><span class="token number">1e9</span> <span class="token operator">+</span> <span class="token number">7</span><span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">dieSimulator</span><span class="token punctuation">(</span><span class="token keyword">int</span> n<span class="token punctuation">,</span> <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> rollMax<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> m <span class="token operator">=</span> <span class="token number">6</span><span class="token punctuation">;</span> <span class="token keyword">long</span> dp<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">long</span><span class="token punctuation">[</span>n<span class="token punctuation">]</span><span class="token punctuation">[</span>m<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">15</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> j<span class="token operator"><</span>m<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">fill</span><span class="token punctuation">(</span>dp<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 punctuation">]</span><span class="token punctuation">,</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 keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> i<span class="token operator"><</span>n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> last<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> last<span class="token operator"><</span>m<span class="token punctuation">;</span> last<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> left<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> left<span class="token operator"><</span>rollMax<span class="token punctuation">[</span>last<span class="token punctuation">]</span><span class="token punctuation">;</span> left<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> j<span class="token operator"><</span>m<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>j <span class="token operator">!=</span> last<span class="token punctuation">)</span> dp<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>last<span class="token punctuation">]</span><span class="token punctuation">[</span>left<span class="token punctuation">]</span> <span class="token operator">+=</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 punctuation">]</span><span class="token punctuation">[</span>rollMax<span class="token punctuation">[</span>j<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 keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>left <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>last<span class="token punctuation">]</span><span class="token punctuation">[</span>left<span class="token punctuation">]</span> <span class="token operator">+=</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>last<span class="token punctuation">]</span><span class="token punctuation">[</span>left<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span> dp<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>last<span class="token punctuation">]</span><span class="token punctuation">[</span>left<span class="token punctuation">]</span> <span class="token operator">%=</span> mod<span class="token punctuation">;</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">long</span> ans <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> j<span class="token operator"><</span>m<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> ans <span class="token operator">=</span> <span class="token punctuation">(</span>ans <span class="token operator">+</span> dp<span class="token punctuation">[</span>n<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>rollMax<span class="token punctuation">[</span>j<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 operator">%</span> mod<span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span>ans<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre>]]></content>
<summary type="html"><blockquote>
<p>题目链接:<a href="https://leetcode.cn/problems/dice-roll-simulation/">https://leetcode.cn/problems/dice-roll-simulation/</a></p>
<p>题目难度:困难</p>
</blockquote></summary>
<category term="LeetCode每日一题" scheme="http://bbstudy.net/categories/LeetCode%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>LeetCode 动态规划算法汇总</title>
<link href="http://bbstudy.net/DP/"/>
<id>http://bbstudy.net/DP/</id>
<published>2023-02-10T07:31:08.427Z</published>
<updated>2023-02-17T02:26:49.397Z</updated>
<content type="html"><![CDATA[<span id="more"></span><h2 id="1223-掷骰子模拟"><a href="#1223-掷骰子模拟" class="headerlink" title="1223. 掷骰子模拟"></a>1223. 掷骰子模拟</h2><blockquote><p>题解:高维dp</p><p>链接:<a href="http://bbstudy.net/LeetCode-1223">http://bbstudy.net/LeetCode-1223</a></p></blockquote><h2 id="1139-最大的以1为边界的正方形"><a href="#1139-最大的以1为边界的正方形" class="headerlink" title="1139. 最大的以1为边界的正方形"></a>1139. 最大的以1为边界的正方形</h2><blockquote><p>题解:二维DP+思维</p><p>链接:<a href="http://bbstudy.net/LeetCode-1139">http://bbstudy.net/LeetCode-1139</a></p></blockquote>]]></content>
<summary type="html"><span id="more"></span>
<h2 id="1223-掷骰子模拟"><a href="#1223-掷骰子模拟" class="headerlink" title="1223. 掷骰子模拟"></a>1223. 掷骰子模拟</h2><blockquote>
<p</summary>
<category term="DP" scheme="http://bbstudy.net/categories/DP/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>LeetCode DFS算法汇总</title>
<link href="http://bbstudy.net/dfs/"/>
<id>http://bbstudy.net/dfs/</id>
<published>2023-02-03T03:02:17.304Z</published>
<updated>2023-02-03T03:02:48.402Z</updated>
<content type="html"><![CDATA[<span id="more"></span><h2 id="1145-二叉树着色游戏"><a href="#1145-二叉树着色游戏" class="headerlink" title="1145. 二叉树着色游戏"></a>1145. 二叉树着色游戏</h2><blockquote><p>题解:DFS + 思维</p><p>链接:<a href="http://bbstudy.net/LeetCode-1145">http://bbstudy.net/LeetCode-1145</a></p></blockquote>]]></content>
<summary type="html"><span id="more"></span>
<h2 id="1145-二叉树着色游戏"><a href="#1145-二叉树着色游戏" class="headerlink" title="1145. 二叉树着色游戏"></a>1145. 二叉树着色游戏</h2><blockq</summary>
<category term="DFS" scheme="http://bbstudy.net/categories/DFS/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>【LeetCode每日一题】1145. 二叉树着色游戏</title>
<link href="http://bbstudy.net/LeetCode-1145/"/>
<id>http://bbstudy.net/LeetCode-1145/</id>
<published>2023-02-03T02:55:30.560Z</published>
<updated>2023-02-03T03:14:37.582Z</updated>
<content type="html"><![CDATA[<blockquote><p>题目链接:<a href="https://leetcode.cn/problems/binary-tree-coloring-game/">https://leetcode.cn/problems/binary-tree-coloring-game/</a></p><p>题目难度:中等</p></blockquote><span id="more"></span><h3 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h3><p>有两位极客玩家参与了一场「二叉树着色」的游戏。游戏中,给出二叉树的根节点 root,树上总共有 n 个节点,且 n 为奇数,其中每个节点上的值从 1 到 n 各不相同。</p><p>最开始时:</p><ul><li>「一号」玩家从<code>[1, n]</code> 中取一个值 <code>x</code>(<code>1 <= x <= n</code>);</li><li>「二号」玩家也从<code>[1, n]</code>中取一个值 <code>y</code>(<code>1 <= y <= n</code>)且 <code>y != x</code>。</li></ul><p>「一号」玩家给值为 x 的节点染上红色,而「二号」玩家给值为 y 的节点染上蓝色。</p><p>之后两位玩家轮流进行操作,「一号」玩家先手。每一回合,玩家选择一个被他染过色的节点,将所选节点一个 <strong>未着色</strong> 的邻节点(即左右子节点、或父节点)进行染色(「一号」玩家染红色,「二号」玩家染蓝色)。</p><p>如果(且仅在此种情况下)当前玩家无法找到这样的节点来染色时,其回合就会被跳过。</p><p>若两个玩家都没有可以染色的节点时,游戏结束。着色节点最多的那位玩家获得胜利 ✌️。</p><p>现在,假设你是「二号」玩家,根据所给出的输入,假如存在一个 y 值可以确保你赢得这场游戏,则返回 <code>true</code> ;若无法获胜,就请返回 <code>false</code> 。</p><p><strong>示例1:</strong></p><p><img src="https://assets.leetcode.com/uploads/2019/08/01/1480-binary-tree-coloring-game.png" alt="img" loading="lazy"></p><pre class="language-none"><code class="language-none">输入:root = [1,2,3,4,5,6,7,8,9,10,11], n = 11, x = 3输出:true解释:第二个玩家可以选择值为 2 的节点。</code></pre><p><strong>示例2:</strong></p><pre class="language-none"><code class="language-none">输入:root = [1,2,3], n = 3, x = 1输出:false</code></pre><p><strong>提示:</strong></p><ul><li>树中节点数目为 <code>n</code></li><li><code>1 <= x <= n <= 100</code></li><li><code>n</code> 是奇数</li><li><code>1 <= Node.val <= n</code></li><li>树中所有值 <strong>互不相同</strong></li></ul><h3 id="题解:DFS-思维"><a href="#题解:DFS-思维" class="headerlink" title="题解:DFS + 思维"></a>题解:DFS + 思维</h3><p>由于<code>x</code>给定,同时题目所述为每个节点可以给<strong>相邻</strong>节点染色,于是利用贪心思维,我们直接将<code>y</code>从<code>x</code>的相邻节点选取,这样能够最大程度减少一号玩家的节点数,从而增大二号玩家的节点数。</p><p>下面借助于灵神的图加以理解:</p><p>参考链接:<a href="https://leetcode.cn/problems/binary-tree-coloring-game/solution/mei-you-si-lu-yi-zhang-tu-miao-dong-pyth-btav/">https://leetcode.cn/problems/binary-tree-coloring-game/solution/mei-you-si-lu-yi-zhang-tu-miao-dong-pyth-btav/</a></p><p><img src="https://pic.leetcode.cn/1675081530-kqtMKF-1145-2.png" alt="1145-2.png" loading="lazy"></p><p>定义二号玩家最终染色的节点数为<code>num2</code>,一号玩家左孩子染色的节点数为<code>l_val</code>,一号玩家右孩子染色的节点数为<code>r_val</code>。</p><p>那么二号玩家最终的结果为:$num2 = max(n-1-l_val-r_val, l_val, r_val)$。</p><p>而一号玩家最终的结果为:$n-num2$</p><p>两者比较即可</p><h4 id="C-代码(普通)"><a href="#C-代码(普通)" class="headerlink" title="C++代码(普通)"></a>C++代码(普通)</h4><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token comment">/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */</span><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> TreeNode<span class="token operator">*</span> x_node<span class="token punctuation">;</span> <span class="token keyword">bool</span> flag<span class="token punctuation">;</span> <span class="token keyword">bool</span> <span class="token function">btreeGameWinningMove</span><span class="token punctuation">(</span>TreeNode<span class="token operator">*</span> root<span class="token punctuation">,</span> <span class="token keyword">int</span> n<span class="token punctuation">,</span> <span class="token keyword">int</span> x<span class="token punctuation">)</span> <span class="token punctuation">{</span> x_node <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">TreeNode</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span> flag <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span> <span class="token function">get_xnode</span><span class="token punctuation">(</span>root<span class="token punctuation">,</span> x<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> l_val <span class="token operator">=</span> <span class="token function">dfs</span><span class="token punctuation">(</span>x_node<span class="token operator">-></span>left<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> r_val <span class="token operator">=</span> <span class="token function">dfs</span><span class="token punctuation">(</span>x_node<span class="token operator">-></span>right<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> par_val <span class="token operator">=</span> n <span class="token operator">-</span> <span class="token number">1</span> <span class="token operator">-</span> l_val <span class="token operator">-</span> r_val<span class="token punctuation">;</span> <span class="token keyword">int</span> x_val <span class="token operator">=</span> <span class="token function">dfs</span><span class="token punctuation">(</span>x_node<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// cout<<l_val<<"---"<<r_val<<"---"<<par_val<<"---"<<x_val<<endl;</span> <span class="token comment">//二号最大可能的值</span> <span class="token keyword">int</span> num2 <span class="token operator">=</span> <span class="token function">max</span><span class="token punctuation">(</span><span class="token function">max</span><span class="token punctuation">(</span>l_val<span class="token punctuation">,</span> r_val<span class="token punctuation">)</span><span class="token punctuation">,</span> par_val<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> num1 <span class="token operator">=</span> n <span class="token operator">-</span> num2<span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>num2 <span class="token operator">></span> num1<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">void</span> <span class="token function">get_xnode</span><span class="token punctuation">(</span>TreeNode<span class="token operator">*</span> root<span class="token punctuation">,</span> <span class="token keyword">int</span> x<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>flag<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>root <span class="token operator">==</span> <span class="token keyword">nullptr</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>root<span class="token operator">-></span>val <span class="token operator">==</span> x<span class="token punctuation">)</span> <span class="token punctuation">{</span> x_node <span class="token operator">=</span> root<span class="token punctuation">;</span> flag <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token function">get_xnode</span><span class="token punctuation">(</span>root<span class="token operator">-></span>left<span class="token punctuation">,</span> x<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">get_xnode</span><span class="token punctuation">(</span>root<span class="token operator">-></span>right<span class="token punctuation">,</span> x<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">int</span> <span class="token function">dfs</span><span class="token punctuation">(</span>TreeNode<span class="token operator">*</span> root<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>root <span class="token operator">==</span> <span class="token keyword">nullptr</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">dfs</span><span class="token punctuation">(</span>root<span class="token operator">-></span>left<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token function">dfs</span><span class="token punctuation">(</span>root<span class="token operator">-></span>right<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></code></pre><h4 id="C-代码(优化)"><a href="#C-代码(优化)" class="headerlink" title="C++代码(优化)"></a>C++代码(优化)</h4><p>上述代码需要先寻找<code>x</code>对应的节点,然后再dfs,其实完全 可以边寻找<code>x</code>边dfs。</p><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token comment">/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */</span><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> l_val<span class="token punctuation">,</span> r_val<span class="token punctuation">;</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token keyword">bool</span> <span class="token function">btreeGameWinningMove</span><span class="token punctuation">(</span>TreeNode<span class="token operator">*</span> root<span class="token punctuation">,</span> <span class="token keyword">int</span> n<span class="token punctuation">,</span> <span class="token keyword">int</span> x<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">dfs</span><span class="token punctuation">(</span>root<span class="token punctuation">,</span> x<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> num2 <span class="token operator">=</span> <span class="token function">max</span><span class="token punctuation">(</span><span class="token function">max</span><span class="token punctuation">(</span>l_val<span class="token punctuation">,</span> r_val<span class="token punctuation">)</span><span class="token punctuation">,</span> n <span class="token operator">-</span> <span class="token number">1</span> <span class="token operator">-</span> l_val <span class="token operator">-</span> r_val<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> num1 <span class="token operator">=</span> n <span class="token operator">-</span> num2<span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>num2 <span class="token operator">></span> num1<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">int</span> <span class="token function">dfs</span><span class="token punctuation">(</span>TreeNode<span class="token operator">*</span> root<span class="token punctuation">,</span><span class="token keyword">int</span> x<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>root <span class="token operator">==</span> <span class="token keyword">nullptr</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">int</span> lv <span class="token operator">=</span> <span class="token function">dfs</span><span class="token punctuation">(</span>root<span class="token operator">-></span>left<span class="token punctuation">,</span> x<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> rv <span class="token operator">=</span> <span class="token function">dfs</span><span class="token punctuation">(</span>root<span class="token operator">-></span>right<span class="token punctuation">,</span> x<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>root<span class="token operator">-></span>val <span class="token operator">==</span> x<span class="token punctuation">)</span> l_val <span class="token operator">=</span> lv<span class="token punctuation">,</span> r_val <span class="token operator">=</span> rv<span class="token punctuation">;</span> <span class="token keyword">return</span> lv <span class="token operator">+</span> rv <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></code></pre>]]></content>
<summary type="html"><blockquote>
<p>题目链接:<a href="https://leetcode.cn/problems/binary-tree-coloring-game/">https://leetcode.cn/problems/binary-tree-coloring-game/</a></p>
<p>题目难度:中等</p>
</blockquote></summary>
<category term="LeetCode每日一题" scheme="http://bbstudy.net/categories/LeetCode%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>【LeetCode每日一题】1129. 颜色交替的最短路径</title>
<link href="http://bbstudy.net/LeetCode-1129/"/>
<id>http://bbstudy.net/LeetCode-1129/</id>
<published>2023-02-02T03:03:41.622Z</published>
<updated>2023-02-02T03:22:10.297Z</updated>
<content type="html"><![CDATA[<blockquote><p>题目链接:<a href="https://leetcode.cn/problems/shortest-path-with-alternating-colors/">https://leetcode.cn/problems/shortest-path-with-alternating-colors/</a></p><p>题目难度:中等</p></blockquote><span id="more"></span><h3 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h3><p>在一个有向图中,节点分别标记为 0, 1, …, n-1。图中每条边为红色或者蓝色,且存在自环或平行边。</p><p>red_edges 中的每一个 [i, j] 对表示从节点 i 到节点 j 的红色有向边。类似地,blue_edges 中的每一个 [i, j] 对表示从节点 i 到节点 j 的蓝色有向边。</p><p>返回长度为 n 的数组 answer,其中 answer[X] 是从节点 0 到节点 X 的红色边和蓝色边交替出现的最短路径的长度。如果不存在这样的路径,那么 answer[x] = -1。</p><p><strong>示例1:</strong></p><pre class="language-none"><code class="language-none">输入:n = 3, red_edges = [[0,1],[1,2]], blue_edges = []输出:[0,1,-1]</code></pre><p><strong>示例2:</strong></p><pre class="language-none"><code class="language-none">输入:n = 3, red_edges = [[0,1]], blue_edges = [[2,1]]输出:[0,1,-1]</code></pre><p><strong>示例3:</strong></p><pre class="language-none"><code class="language-none">输入:n = 3, red_edges = [[1,0]], blue_edges = [[2,1]]输出:[0,-1,-1]</code></pre><p><strong>示例 4:</strong></p><pre class="language-none"><code class="language-none">输入:n = 3, red_edges = [[0,1]], blue_edges = [[1,2]]输出:[0,1,2]</code></pre><p><strong>提示:</strong></p><ul><li>$1 <= n <= 100$</li><li>$red_edges.length <= 400$</li><li>$blue_edges.length <= 400$</li><li>$red_edges[i].length == blue_edges[i].length == 2$</li><li>$0 <= red_edges[i][j], blue_edges[i][j] < n$</li></ul><h3 id="题解:BFS-建图"><a href="#题解:BFS-建图" class="headerlink" title="题解:BFS + 建图"></a>题解:BFS + 建图</h3><p>首先建图,将红色边和蓝色边分成两种类型,红色有0表示,蓝色用1表示,则节点i到节点j的红蓝色边交替出现的路径为:</p><ul><li>类型0:路径最终到节点j的边为红色</li><li>类型1:路径最终到节点j的边为蓝色</li></ul><p>为了方便建图,设图数据结构为$edge[2][n][]$,即:</p><ul><li>$edge[0][i][j]$:节点i和节点j之间的有向边为红色 </li><li>$edge[1][i][j]$:节点i和节点j之间的有向边为蓝色</li></ul><p>随后定义最短路径长度数组,为了方便处理,定义数据结构为$dis[2][n]$,即:</p><ul><li>$dis[0][i]$:节点0到节点i,且最终到节点i的边为红色的最短路径长度</li><li>$dis[1][i]$:节点0到节点i,且最终到节点i的边为蓝色的最短路径长度</li></ul><p>队列数据结构为:$queue<pair<int,int>> q$,即:存储下一个节点编号及其边的颜色</p><p>最终取$min(dis[0][i], dis[1][i])$即可。</p><h4 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h4><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span> <span class="token function">shortestAlternatingPaths</span><span class="token punctuation">(</span><span class="token keyword">int</span> n<span class="token punctuation">,</span> vector<span class="token operator"><</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">>></span><span class="token operator">&</span> redEdges<span class="token punctuation">,</span> vector<span class="token operator"><</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">>></span><span class="token operator">&</span> blueEdges<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//建图</span> vector<span class="token operator"><</span> vector<span class="token operator"><</span> vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span> <span class="token operator">></span> <span class="token operator">></span> <span class="token function">edge</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token generic-function"><span class="token function">vector</span><span class="token generic class-name"><span class="token operator"><</span> vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span> <span class="token operator">></span></span></span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">auto</span> <span class="token operator">&</span>e <span class="token operator">:</span> redEdges<span class="token punctuation">)</span> <span class="token punctuation">{</span> edge<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span>e<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">push_back</span><span class="token punctuation">(</span>e<span class="token punctuation">[</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">for</span><span class="token punctuation">(</span><span class="token keyword">auto</span> <span class="token operator">&</span>e <span class="token operator">:</span> blueEdges<span class="token punctuation">)</span> <span class="token punctuation">{</span> edge<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span>e<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">push_back</span><span class="token punctuation">(</span>e<span class="token punctuation">[</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">//bfs</span> vector<span class="token operator"><</span> vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span> <span class="token operator">></span> <span class="token function">dis</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token generic-function"><span class="token function">vector</span><span class="token generic class-name"><span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span></span></span><span class="token punctuation">(</span>n<span class="token punctuation">,</span>INT_MAX<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//两种颜色的最短路</span> queue<span class="token operator"><</span>pair<span class="token operator"><</span><span class="token keyword">int</span><span class="token punctuation">,</span><span class="token keyword">int</span><span class="token operator">>></span> q<span class="token punctuation">;</span> <span class="token comment">//记录当前节点及其边的颜色</span> dis<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span> dis<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span> q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token number">0</span><span class="token punctuation">,</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 keyword">while</span><span class="token punctuation">(</span><span class="token operator">!</span>q<span class="token punctuation">.</span><span class="token function">empty</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">auto</span> <span class="token punctuation">[</span>u<span class="token punctuation">,</span>t<span class="token punctuation">]</span> <span class="token operator">=</span> q<span class="token punctuation">.</span><span class="token function">front</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> q<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">auto</span> v <span class="token operator">:</span> edge<span class="token punctuation">[</span><span class="token number">1</span><span class="token operator">-</span>t<span class="token punctuation">]</span><span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>dis<span class="token punctuation">[</span><span class="token number">1</span><span class="token operator">-</span>t<span class="token punctuation">]</span><span class="token punctuation">[</span>v<span class="token punctuation">]</span> <span class="token operator">!=</span> INT_MAX<span class="token punctuation">)</span> <span class="token keyword">continue</span><span class="token punctuation">;</span> dis<span class="token punctuation">[</span><span class="token number">1</span><span class="token operator">-</span>t<span class="token punctuation">]</span><span class="token punctuation">[</span>v<span class="token punctuation">]</span> <span class="token operator">=</span> dis<span class="token punctuation">[</span>t<span class="token punctuation">]</span><span class="token punctuation">[</span>u<span class="token punctuation">]</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token punctuation">{</span>v<span class="token punctuation">,</span><span class="token number">1</span><span class="token operator">-</span>t<span class="token punctuation">}</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">//ans</span> vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span> <span class="token function">ans</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><</span>n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">min</span><span class="token punctuation">(</span>dis<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> dis<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><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">if</span><span class="token punctuation">(</span>ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">==</span> INT_MAX<span class="token punctuation">)</span> ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</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 keyword">return</span> ans<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre>]]></content>
<summary type="html"><blockquote>
<p>题目链接:<a href="https://leetcode.cn/problems/shortest-path-with-alternating-colors/">https://leetcode.cn/problems/shortest-path-with-alternating-colors/</a></p>
<p>题目难度:中等</p>
</blockquote></summary>
<category term="LeetCode每日一题" scheme="http://bbstudy.net/categories/LeetCode%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>LeetCode BFS算法汇总</title>
<link href="http://bbstudy.net/bfs/"/>
<id>http://bbstudy.net/bfs/</id>
<published>2023-02-02T03:01:47.857Z</published>
<updated>2023-02-02T03:10:46.716Z</updated>
<content type="html"><![CDATA[<span id="more"></span><h2 id="1129-颜色交替的最短路径"><a href="#1129-颜色交替的最短路径" class="headerlink" title="1129. 颜色交替的最短路径"></a>1129. 颜色交替的最短路径</h2><blockquote><p>题解:BFS + 建图</p><p>链接:<a href="http://bbstudy.net/LeetCode-1129">http://bbstudy.net/LeetCode-1129</a></p></blockquote>]]></content>
<summary type="html"><span id="more"></span>
<h2 id="1129-颜色交替的最短路径"><a href="#1129-颜色交替的最短路径" class="headerlink" title="1129. 颜色交替的最短路径"></a>1129. 颜色交替的最短路径</h2</summary>
<category term="BFS" scheme="http://bbstudy.net/categories/BFS/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>LeetCode图论算法汇总</title>
<link href="http://bbstudy.net/graph-theory/"/>
<id>http://bbstudy.net/graph-theory/</id>
<published>2023-01-10T03:57:53.843Z</published>
<updated>2023-01-10T03:59:26.193Z</updated>
<content type="html"><![CDATA[<span id="more"></span><h2 id="753-破解保险箱"><a href="#753-破解保险箱" class="headerlink" title="753.破解保险箱"></a>753.破解保险箱</h2><blockquote><p>题解:欧拉回路</p><p>链接:<a href="http://bbstudy.net/LeetCode-753">http://bbstudy.net/LeetCode-753</a></p></blockquote>]]></content>
<summary type="html"><span id="more"></span>
<h2 id="753-破解保险箱"><a href="#753-破解保险箱" class="headerlink" title="753.破解保险箱"></a>753.破解保险箱</h2><blockquote>
<p>题解:欧拉</summary>
<category term="图论" scheme="http://bbstudy.net/categories/%E5%9B%BE%E8%AE%BA/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>【LeetCode每日一题】753. 破解保险箱</title>
<link href="http://bbstudy.net/LeetCode-753/"/>
<id>http://bbstudy.net/LeetCode-753/</id>
<published>2023-01-10T03:42:44.306Z</published>
<updated>2023-01-10T03:56:59.044Z</updated>
<content type="html"><![CDATA[<blockquote><p>题目链接:<a href="https://leetcode.cn/problems/cracking-the-safe/">https://leetcode.cn/problems/cracking-the-safe/</a></p><p>题目难度:困难</p></blockquote><span id="more"></span><h3 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h3><p>不要看中文题面!!!翻译的一塌糊涂。</p><p>原始题目要求:求一个最短的字符串,需要包含从$0\sim k^n$(k进制)中的所有数字。</p><p><strong>示例1:</strong></p><pre class="language-none"><code class="language-none">输入: n = 1, k = 2输出: "01"说明: "10"也可以打开保险箱。</code></pre><p><strong>示例2:</strong></p><pre class="language-none"><code class="language-none">输入: n = 2, k = 2输出: "00110"说明: "01100", "10011", "11001" 也能打开保险箱。</code></pre><p><strong>提示:</strong></p><ul><li><code>n</code> 的范围是 <code>[1, 4]</code>。</li><li><code>k</code> 的范围是 <code>[1, 10]</code>。</li><li><code>k^n</code> 最大可能为 <code>4096</code>。</li></ul><h3 id="题解:欧拉回路"><a href="#题解:欧拉回路" class="headerlink" title="题解:欧拉回路"></a>题解:欧拉回路</h3><p>参考题解:<a href="https://leetcode.cn/problems/cracking-the-safe/solution/yi-bu-yi-bu-tui-dao-chu-0ms-jie-fa-tan-xin-gou-zao/">https://leetcode.cn/problems/cracking-the-safe/solution/yi-bu-yi-bu-tui-dao-chu-0ms-jie-fa-tan-xin-gou-zao/</a></p><p>题意有点难懂,先对其进行转换:</p><p>将所有的n - 1位数作为节点,每个节点有k条边(节点上添加数字$0 \sim k-1$视为一条边)</p><p>然后题目便转化为从任一节点出发,能够找到一条路径,<strong>经过途中所有的边且均只经过一次</strong>,然后把边上的数字写入字符串,该字符串即为所求解。</p><p>问题便转化为了求<strong>图的欧拉回路问题</strong>。</p><h4 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h4><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> string <span class="token function">crackSafe</span><span class="token punctuation">(</span><span class="token keyword">int</span> n<span class="token punctuation">,</span> <span class="token keyword">int</span> k<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> kn <span class="token operator">=</span> <span class="token function">pow</span><span class="token punctuation">(</span>k<span class="token punctuation">,</span> n<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> kn_1 <span class="token operator">=</span> <span class="token function">pow</span><span class="token punctuation">(</span>k<span class="token punctuation">,</span> n<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//将所有n-1位数作为节点的节点个数</span> <span class="token keyword">int</span> num<span class="token punctuation">[</span>kn_1<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">//表示k^(n-1)个节点的下一位可以从k-1选到0,</span> <span class="token comment">//当前索引处对应元素值表示该节点已经把比元素值大的值作为下一数字添加过了</span> <span class="token function">fill</span><span class="token punctuation">(</span>num<span class="token punctuation">,</span> num <span class="token operator">+</span> kn_1<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> <span class="token comment">//字符串初始化,结果一定为kn+n-1位 </span> string <span class="token function">s</span><span class="token punctuation">(</span>kn <span class="token operator">+</span> <span class="token punctuation">(</span>n<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token char">'0'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//i从n-1开始递增,即初始节点为n-1个0(00....)</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span>n<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> node<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><</span>s<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> s<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> num<span class="token punctuation">[</span>node<span class="token punctuation">]</span><span class="token operator">--</span> <span class="token operator">+</span> <span class="token char">'0'</span><span class="token punctuation">;</span> <span class="token comment">//更新字符串,表示下一次该节点要选的下一数字</span> node <span class="token operator">=</span> node<span class="token operator">*</span>k <span class="token operator">-</span> <span class="token punctuation">(</span>s<span class="token punctuation">[</span>i <span class="token operator">-</span> <span class="token punctuation">(</span>n<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 char">'0'</span><span class="token punctuation">)</span><span class="token operator">*</span>kn_1 <span class="token operator">+</span> num<span class="token punctuation">[</span>node<span class="token punctuation">]</span> <span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">//更新当前节点</span> <span class="token comment">/** * 左移操作 * 1. 乘以k * 2. 减去左侧超出的一位数字(这位数字已经到了k^(n-1)上,所以需要乘以k^(n-1) * 3. 加上右边进来的新数字(由于num[node]--,所以需要+1) */</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> s<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre>]]></content>
<summary type="html"><blockquote>
<p>题目链接:<a href="https://leetcode.cn/problems/cracking-the-safe/">https://leetcode.cn/problems/cracking-the-safe/</a></p>
<p>题目难度:困难</p>
</blockquote></summary>
<category term="LeetCode每日一题" scheme="http://bbstudy.net/categories/LeetCode%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>LeetCode第327场周赛</title>
<link href="http://bbstudy.net/weekly-contest-327/"/>
<id>http://bbstudy.net/weekly-contest-327/</id>
<published>2023-01-08T04:10:44.872Z</published>
<updated>2023-01-08T05:17:27.329Z</updated>
<content type="html"><![CDATA[<h2 id="LeetCode第327场周赛题解"><a href="#LeetCode第327场周赛题解" class="headerlink" title="LeetCode第327场周赛题解"></a>LeetCode第327场周赛题解</h2><blockquote><p>比赛地址:<a href="https://leetcode.cn/contest/weekly-contest-327/">https://leetcode.cn/contest/weekly-contest-327/</a></p></blockquote><span id="more"></span><h3 id="一、正整数和负整数的最大计数"><a href="#一、正整数和负整数的最大计数" class="headerlink" title="一、正整数和负整数的最大计数"></a><a href="https://leetcode.cn/problems/maximum-count-of-positive-integer-and-negative-integer/">一、正整数和负整数的最大计数</a></h3><h4 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h4><p>给你一个按 非递减顺序 排列的数组 nums ,返回正整数数目和负整数数目中的最大值。</p><ul><li>换句话讲,如果 nums 中正整数的数目是 pos ,而负整数的数目是 neg ,返回 pos 和 neg二者中的最大值。</li></ul><p>注意:0 既不是正整数也不是负整数。</p><p><strong>示例1:</strong></p><pre class="language-markdown" data-language="markdown"><code class="language-markdown">输入:nums = [-2,-1,-1,1,2,3]输出:3解释:共有 3 个正整数和 3 个负整数。计数得到的最大值是 3 。</code></pre><p><strong>示例2:</strong></p><pre class="language-markdown" data-language="markdown"><code class="language-markdown">输入:nums = [-3,-2,-1,0,0,1,2]输出:3解释:共有 2 个正整数和 3 个负整数。计数得到的最大值是 3 。</code></pre><p><strong>示例3:</strong></p><pre class="language-none"><code class="language-none">输入:nums = [5,20,66,1314]输出:4解释:共有 4 个正整数和 0 个负整数。计数得到的最大值是 4 。</code></pre><p><strong>提示:</strong></p><ul><li><code>1 <= nums.length <= 2000</code></li><li><code>-2000 <= nums[i] <= 2000</code></li><li><code>nums</code> 按 <strong>非递减顺序</strong> 排列。</li></ul><h4 id="题解:模拟"><a href="#题解:模拟" class="headerlink" title="题解:模拟"></a>题解:模拟</h4><p>按照题意记录正整数数目和负整数数目,然后取两者最大值即可。</p><p><strong>C++代码:</strong></p><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token keyword">int</span> <span class="token function">maximumCount</span><span class="token punctuation">(</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&</span> nums<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> num1<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>num2<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">int</span> n<span class="token operator">=</span>nums<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator"><</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator"><</span><span class="token number">0</span><span class="token punctuation">)</span> num1<span class="token operator">++</span><span class="token punctuation">;</span> <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">></span><span class="token number">0</span><span class="token punctuation">)</span> num2<span class="token operator">++</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token function">max</span><span class="token punctuation">(</span>num1<span class="token punctuation">,</span>num2<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre><h3 id="二、-执行-K-次操作后的最大分数"><a href="#二、-执行-K-次操作后的最大分数" class="headerlink" title="二、 执行 K 次操作后的最大分数"></a><a href="https://leetcode.cn/problems/maximal-score-after-applying-k-operations/">二、 执行 K 次操作后的最大分数</a></h3><h4 id="题意-1"><a href="#题意-1" class="headerlink" title="题意"></a>题意</h4><p>给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你的 起始分数 为 0 。</p><p>在一步 操作 中:</p><ol><li>选出一个满足 0 <= i < nums.length 的下标 i ,</li><li>将你的 分数 增加 nums[i] ,并且</li><li>将 nums[i] 替换为 $ceil(nums[i] / 3)$ 。</li></ol><p>返回在 恰好 执行 k 次操作后,你可能获得的最大分数。</p><p>向上取整函数 $ceil(val)$ 的结果是大于或等于 val 的最小整数。</p><p><strong>示例1:</strong></p><pre class="language-none"><code class="language-none">输入:nums = [10,10,10,10,10], k = 5输出:50解释:对数组中每个元素执行一次操作。最后分数是 10 + 10 + 10 + 10 + 10 = 50 。</code></pre><p><strong>示例2:</strong></p><pre class="language-none"><code class="language-none">输入:nums = [1,10,3,3,3], k = 3输出:17解释:可以执行下述操作:第 1 步操作:选中 i = 1 ,nums 变为 [1,4,3,3,3] 。分数增加 10 。第 2 步操作:选中 i = 1 ,nums 变为 [1,2,3,3,3] 。分数增加 4 。第 3 步操作:选中 i = 2 ,nums 变为 [1,1,1,3,3] 。分数增加 3 。最后分数是 10 + 4 + 3 = 17 。</code></pre><p><strong>提示</strong></p><ul><li>$1 <= nums.length, k <= 10^5$</li><li>$1 <= nums[i] <= 10^9$</li></ul><h4 id="题解:贪心"><a href="#题解:贪心" class="headerlink" title="题解:贪心"></a>题解:贪心</h4><p>每次处理数组中最大的元素即可,但是如果暴力寻找最大元素肯定不可行,于是不妨使用优先队列,每次找队顶元素,然后将其替换为 $ceil(nums[i]/3)$ 再放入队中即可。</p><p><strong>C++代码:</strong></p><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token keyword">long</span> <span class="token keyword">long</span> <span class="token function">maxKelements</span><span class="token punctuation">(</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&</span> nums<span class="token punctuation">,</span> <span class="token keyword">int</span> k<span class="token punctuation">)</span> <span class="token punctuation">{</span> priority_queue<span class="token operator"><</span><span class="token keyword">int</span><span class="token punctuation">,</span> vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span><span class="token punctuation">,</span> less<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span> <span class="token operator">></span> q<span class="token punctuation">;</span> <span class="token keyword">int</span> n<span class="token operator">=</span>nums<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator"><</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>nums<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">long</span> <span class="token keyword">long</span> ans<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator"><</span>k<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">int</span> now<span class="token operator">=</span>q<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>q<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> ans<span class="token operator">+=</span>now<span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>now<span class="token operator">%</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">{</span> now <span class="token operator">=</span> now<span class="token operator">/</span><span class="token number">3</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 keyword">else</span><span class="token punctuation">{</span> now <span class="token operator">=</span> now<span class="token operator">/</span><span class="token number">3</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>now<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> ans<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre><h3 id="三、使字符串总不同字符的数目相等"><a href="#三、使字符串总不同字符的数目相等" class="headerlink" title="三、使字符串总不同字符的数目相等"></a><a href="https://leetcode.cn/problems/make-number-of-distinct-characters-equal/">三、使字符串总不同字符的数目相等</a></h3><h4 id="题意-2"><a href="#题意-2" class="headerlink" title="题意"></a>题意</h4><p>给你两个下标从 0 开始的字符串 word1 和 word2 。</p><p>一次 移动 由以下两个步骤组成:</p><ul><li>选中两个下标 i 和 j ,分别满足 0 <= i < word1.length 和 0 <= j < word2.length ,</li><li>交换 word1[i] 和 word2[j] 。</li></ul><p>如果可以通过 恰好一次 移动,使 word1 和 word2 中不同字符的数目相等,则返回 true ;否则,返回 false 。</p><p><strong>示例1:</strong></p><pre class="language-none"><code class="language-none">输入:word1 = "ac", word2 = "b"输出:false解释:交换任何一组下标都会导致第一个字符串中有 2 个不同的字符,而在第二个字符串中只有 1 个不同字符。</code></pre><p><strong>示例2:</strong></p><pre class="language-none"><code class="language-none">输入:word1 = "abcc", word2 = "aab"输出:true解释:交换第一个字符串的下标 2 和第二个字符串的下标 0 。之后得到 word1 = "abac" 和 word2 = "cab" ,各有 3 个不同字符。</code></pre><p><strong>示例3:</strong></p><pre class="language-none"><code class="language-none">输入:word1 = "abcde", word2 = "fghij"输出:true解释:无论交换哪一组下标,两个字符串中都会有 5 个不同字符。</code></pre><p><strong>提示:</strong></p><ul><li>$1 <= word1.length, word2.length <= 10^5$</li><li><code>word1</code> 和 <code>word2</code> 仅由小写英文字母组成。</li></ul><h4 id="题解:哈希"><a href="#题解:哈希" class="headerlink" title="题解:哈希"></a>题解:哈希</h4><p>使用两个哈希表mp1、mp2分别存储word1和word2中出现的字母及其个数。</p><p>然后遍历两个哈希表,假设此时交换的字母分别为哈希表中的第i个元素和第j个元素:</p><ul><li>如果两个字母相同,则判断原始两个字符串字母个数是否相同<ul><li>如果相同,符合题意,直接返回true</li><li>如果不相同,则继续遍历</li></ul></li><li>如果两个字母不相同,则判断mp2是否存在当前mp1遍历的字母,mp1是否存在mp2当前遍历的字母;以及mp1和mp2是否只存在一个当前字母,具体见代码。</li></ul><p><strong>C++代码:</strong></p><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span> map<span class="token operator"><</span><span class="token keyword">int</span><span class="token punctuation">,</span><span class="token keyword">int</span><span class="token operator">></span> mp1<span class="token punctuation">,</span>mp2<span class="token punctuation">;</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token keyword">bool</span> <span class="token function">isItPossible</span><span class="token punctuation">(</span>string s1<span class="token punctuation">,</span> string s2<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> n1<span class="token operator">=</span>s1<span class="token punctuation">.</span><span class="token function">length</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> n2<span class="token operator">=</span>s2<span class="token punctuation">.</span><span class="token function">length</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> mp1<span class="token punctuation">.</span><span class="token function">clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>mp2<span class="token punctuation">.</span><span class="token function">clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator"><</span>n1<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span> mp1<span class="token punctuation">[</span>s1<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">-</span><span class="token char">'a'</span><span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator"><</span>n2<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> mp2<span class="token punctuation">[</span>s2<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">-</span><span class="token char">'a'</span><span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span> <span class="token keyword">int</span> cnt1<span class="token operator">=</span>mp1<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> cnt2<span class="token operator">=</span>mp2<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">auto</span> it1<span class="token operator">=</span>mp1<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> it1<span class="token operator">!=</span>mp1<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> it1<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">auto</span> it2<span class="token operator">=</span>mp2<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> it2<span class="token operator">!=</span>mp2<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> it2<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>it1<span class="token operator">-></span>first <span class="token operator">==</span> it2<span class="token operator">-></span>first<span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>cnt1<span class="token operator">==</span>cnt2<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span> <span class="token keyword">continue</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> cnt1<span class="token operator">=</span>mp1<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> cnt2<span class="token operator">=</span>mp2<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>mp2<span class="token punctuation">.</span><span class="token function">count</span><span class="token punctuation">(</span>it1<span class="token operator">-></span>first<span class="token punctuation">)</span><span class="token punctuation">)</span> cnt2<span class="token operator">++</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>mp1<span class="token punctuation">.</span><span class="token function">count</span><span class="token punctuation">(</span>it2<span class="token operator">-></span>first<span class="token punctuation">)</span><span class="token punctuation">)</span> cnt1<span class="token operator">++</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>it1<span class="token operator">-></span>second<span class="token operator">==</span><span class="token number">1</span><span class="token punctuation">)</span> cnt1<span class="token operator">--</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>it2<span class="token operator">-></span>second<span class="token operator">==</span><span class="token number">1</span><span class="token punctuation">)</span> cnt2<span class="token operator">--</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>cnt1<span class="token operator">==</span>cnt2<span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">true</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">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre>]]></content>
<summary type="html"><h2 id="LeetCode第327场周赛题解"><a href="#LeetCode第327场周赛题解" class="headerlink" title="LeetCode第327场周赛题解"></a>LeetCode第327场周赛题解</h2><blockquote>
<p>比赛地址:<a href="https://leetcode.cn/contest/weekly-contest-327/">https://leetcode.cn/contest/weekly-contest-327/</a></p>
</blockquote></summary>
<category term="LeetCode周赛题解" scheme="http://bbstudy.net/categories/LeetCode%E5%91%A8%E8%B5%9B%E9%A2%98%E8%A7%A3/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>【LeetCode每日一题】1801.积压订单中的订单总数</title>
<link href="http://bbstudy.net/LeetCode-1801/"/>
<id>http://bbstudy.net/LeetCode-1801/</id>
<published>2023-01-05T15:34:20.865Z</published>
<updated>2023-01-05T15:39:26.334Z</updated>
<content type="html"><![CDATA[<blockquote><p>题目链接:<a href="https://leetcode.cn/problems/number-of-orders-in-the-backlog/">https://leetcode.cn/problems/number-of-orders-in-the-backlog/</a></p><p>题目难度:中等</p></blockquote><span id="more"></span><h3 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h3><p>给你一个二维整数数组 orders ,其中每个 orders[i] = [pricei, amounti, orderTypei] 表示有 amounti 笔类型为 orderTypei 、价格为 pricei 的订单。</p><p>订单类型 orderTypei 可以分为两种:</p><ul><li>0 表示这是一批采购订单 buy</li><li>1 表示这是一批销售订单 sell</li></ul><p>注意,orders[i] 表示一批共计 amounti 笔的独立订单,这些订单的价格和类型相同。对于所有有效的 i ,由 orders[i] 表示的所有订单提交时间均早于 orders[i+1] 表示的所有订单。</p><p>存在由未执行订单组成的 积压订单 。积压订单最初是空的。提交订单时,会发生以下情况:</p><ul><li>如果该订单是一笔采购订单 buy ,则可以查看积压订单中价格 最低 的销售订单 sell 。如果该销售订单 sell 的价格 低于或等于 当前采购订单 buy 的价格,则匹配并执行这两笔订单,并将销售订单 sell 从积压订单中删除。否则,采购订单 buy 将会添加到积压订单中。</li><li>反之亦然,如果该订单是一笔销售订单 sell ,则可以查看积压订单中价格 最高 的采购订单 buy 。如果该采购订单 buy 的价格 高于或等于 当前销售订单 sell 的价格,则匹配并执行这两笔订单,并将采购订单 buy 从积压订单中删除。否则,销售订单 sell 将会添加到积压订单中。</li></ul><p>输入所有订单后,返回积压订单中的 订单总数 。由于数字可能很大,所以需要返回对 $10^9 + 7$ 取余的结果。</p><p><strong>示例1:</strong></p><p><img src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2021/03/21/ex1.png" alt="img" loading="lazy"></p><pre class="language-none"><code class="language-none">输入:orders = [[10,5,0],[15,2,1],[25,1,1],[30,4,0]]输出:6解释:输入订单后会发生下述情况:- 提交 5 笔采购订单,价格为 10 。没有销售订单,所以这 5 笔订单添加到积压订单中。- 提交 2 笔销售订单,价格为 15 。没有采购订单的价格大于或等于 15 ,所以这 2 笔订单添加到积压订单中。- 提交 1 笔销售订单,价格为 25 。没有采购订单的价格大于或等于 25 ,所以这 1 笔订单添加到积压订单中。- 提交 4 笔采购订单,价格为 30 。前 2 笔采购订单与价格最低(价格为 15)的 2 笔销售订单匹配,从积压订单中删除这 2 笔销售订单。第 3 笔采购订单与价格最低的 1 笔销售订单匹配,销售订单价格为 25 ,从积压订单中删除这 1 笔销售订单。积压订单中不存在更多销售订单,所以第 4 笔采购订单需要添加到积压订单中。最终,积压订单中有 5 笔价格为 10 的采购订单,和 1 笔价格为 30 的采购订单。所以积压订单中的订单总数为 6 。</code></pre><p><strong>示例2:</strong></p><p><img src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2021/03/21/ex2.png" alt="img" loading="lazy"></p><pre class="language-none"><code class="language-none">输入:orders = [[7,1000000000,1],[15,3,0],[5,999999995,0],[5,1,1]]输出:999999984解释:输入订单后会发生下述情况:- 提交 10^9 笔销售订单,价格为 7 。没有采购订单,所以这 109 笔订单添加到积压订单中。- 提交 3 笔采购订单,价格为 15 。这些采购订单与价格最低(价格为 7 )的 3 笔销售订单匹配,从积压订单中删除这 3 笔销售订单。- 提交 999999995 笔采购订单,价格为 5 。销售订单的最低价为 7 ,所以这 999999995 笔订单添加到积压订单中。- 提交 1 笔销售订单,价格为 5 。这笔销售订单与价格最高(价格为 5 )的 1 笔采购订单匹配,从积压订单中删除这 1 笔采购订单。最终,积压订单中有 (1000000000-3) 笔价格为 7 的销售订单,和 (999999995-1) 笔价格为 5 的采购订单。所以积压订单中的订单总数为 1999999991 ,等于 999999984 % (10^9 + 7) 。</code></pre><p><strong>提示:</strong></p><ul><li>$1 <= orders.length <= 10^5$</li><li>$orders[i].length == 3$</li><li>$1 <= pricei, amounti <= 10^9$</li><li>$orderTypei$ 为 0 或 1</li></ul><h3 id="题解:优先队列模拟"><a href="#题解:优先队列模拟" class="headerlink" title="题解:优先队列模拟"></a>题解:优先队列模拟</h3><p>分别定义两个优先队列分别存储积压的采购订单和积压销售订单,然后按照题意模拟即可。</p><p>考察如何自定义优先队列,同时模拟比较考察代码能力。</p><h4 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h4><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">struct</span> <span class="token class-name">sell_order</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> price<span class="token punctuation">,</span> amount<span class="token punctuation">;</span> <span class="token function">sell_order</span><span class="token punctuation">(</span><span class="token keyword">int</span> p<span class="token punctuation">,</span> <span class="token keyword">int</span> a<span class="token punctuation">)</span> <span class="token punctuation">{</span> price <span class="token operator">=</span> p<span class="token punctuation">;</span> amount <span class="token operator">=</span> a<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">bool</span> <span class="token keyword">operator</span> <span class="token operator"><</span> <span class="token punctuation">(</span><span class="token keyword">const</span> sell_order <span class="token operator">&</span>p<span class="token punctuation">)</span> <span class="token keyword">const</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> price <span class="token operator">></span> p<span class="token punctuation">.</span>price<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span><span class="token keyword">struct</span> <span class="token class-name">buy_order</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> price<span class="token punctuation">,</span> amount<span class="token punctuation">;</span> <span class="token function">buy_order</span><span class="token punctuation">(</span><span class="token keyword">int</span> p<span class="token punctuation">,</span> <span class="token keyword">int</span> a<span class="token punctuation">)</span> <span class="token punctuation">{</span> price <span class="token operator">=</span> p<span class="token punctuation">;</span> amount <span class="token operator">=</span> a<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">bool</span> <span class="token keyword">operator</span> <span class="token operator"><</span> <span class="token punctuation">(</span><span class="token keyword">const</span> buy_order <span class="token operator">&</span>p<span class="token punctuation">)</span> <span class="token keyword">const</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> price <span class="token operator"><</span> p<span class="token punctuation">.</span>price<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span>priority_queue <span class="token operator"><</span>buy_order<span class="token operator">></span> buy<span class="token punctuation">;</span>priority_queue <span class="token operator"><</span>sell_order<span class="token operator">></span> sell<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">long</span> <span class="token keyword">long</span> mod <span class="token operator">=</span> <span class="token number">1e9</span> <span class="token operator">+</span> <span class="token number">7</span><span class="token punctuation">;</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token keyword">int</span> <span class="token function">getNumberOfBacklogOrders</span><span class="token punctuation">(</span>vector<span class="token operator"><</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">>></span><span class="token operator">&</span> orders<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> n <span class="token operator">=</span> orders<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><</span>n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>i <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">if</span><span class="token punctuation">(</span> orders<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</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 comment">//销售订单</span> sell<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token function">sell_order</span><span class="token punctuation">(</span>orders<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> orders<span class="token punctuation">[</span>i<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><span class="token punctuation">)</span><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> buy<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token function">buy_order</span><span class="token punctuation">(</span>orders<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> orders<span class="token punctuation">[</span>i<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><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token function">solve</span><span class="token punctuation">(</span>orders<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> orders<span class="token punctuation">[</span>i<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> orders<span class="token punctuation">[</span>i<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 class="token punctuation">;</span> <span class="token comment">// if(!buy.empty()) cout<<buy.top().price<<"---"<<buy.top().amount<<endl;</span> <span class="token comment">// if(!sell.empty()) cout<<sell.top().price<<"---"<<sell.top().amount<<endl;</span> <span class="token comment">// cout<<"---"<<endl;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ans<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token operator">!</span>sell<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> ans <span class="token operator">=</span> <span class="token punctuation">(</span>ans <span class="token operator">+</span> sell<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>amount<span class="token punctuation">)</span> <span class="token operator">%</span> mod<span class="token punctuation">;</span> <span class="token comment">// cout<<sell.top().price<<"---"<<sell.top().amount<<endl;</span> sell<span class="token punctuation">.</span><span class="token function">pop</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">while</span><span class="token punctuation">(</span><span class="token operator">!</span>buy<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> ans <span class="token operator">=</span> <span class="token punctuation">(</span>ans <span class="token operator">+</span> buy<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>amount<span class="token punctuation">)</span> <span class="token operator">%</span> mod<span class="token punctuation">;</span> <span class="token comment">// cout<<buy.top().price<<"---"<<buy.top().amount<<endl;</span> buy<span class="token punctuation">.</span><span class="token function">pop</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">return</span> ans<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">void</span> <span class="token function">solve</span><span class="token punctuation">(</span><span class="token keyword">int</span> p<span class="token punctuation">,</span> <span class="token keyword">int</span> cnt<span class="token punctuation">,</span> <span class="token keyword">int</span> type<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>type <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">while</span><span class="token punctuation">(</span><span class="token operator">!</span>sell<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> sell_order order <span class="token operator">=</span> sell<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>order<span class="token punctuation">.</span>price <span class="token operator"><=</span> p<span class="token punctuation">)</span> <span class="token punctuation">{</span> sell<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>cnt <span class="token operator">>=</span> order<span class="token punctuation">.</span>amount<span class="token punctuation">)</span> <span class="token punctuation">{</span> cnt <span class="token operator">-=</span> order<span class="token punctuation">.</span>amount<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> order<span class="token punctuation">.</span>amount <span class="token operator">-=</span> cnt<span class="token punctuation">;</span> cnt <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> sell<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>order<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">if</span><span class="token punctuation">(</span>cnt<span class="token operator">></span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> buy<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token function">buy_order</span><span class="token punctuation">(</span>p<span class="token punctuation">,</span> cnt<span class="token punctuation">)</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">else</span> <span class="token punctuation">{</span> <span class="token comment">//销售订单</span> <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token operator">!</span>buy<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> buy_order order <span class="token operator">=</span> buy<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>order<span class="token punctuation">.</span>price <span class="token operator">>=</span> p<span class="token punctuation">)</span> <span class="token punctuation">{</span> buy<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>cnt <span class="token operator">>=</span> order<span class="token punctuation">.</span>amount<span class="token punctuation">)</span> <span class="token punctuation">{</span> cnt <span class="token operator">-=</span> order<span class="token punctuation">.</span>amount<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> order<span class="token punctuation">.</span>amount <span class="token operator">-=</span> cnt<span class="token punctuation">;</span> cnt <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> buy<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>order<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">if</span><span class="token punctuation">(</span>cnt<span class="token operator">></span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> sell<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token function">sell_order</span><span class="token punctuation">(</span>p<span class="token punctuation">,</span> cnt<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre>]]></content>
<summary type="html"><blockquote>
<p>题目链接:<a href="https://leetcode.cn/problems/number-of-orders-in-the-backlog/">https://leetcode.cn/problems/number-of-orders-in-the-backlog/</a></p>
<p>题目难度:中等</p>
</blockquote></summary>
<category term="LeetCode每日一题" scheme="http://bbstudy.net/categories/LeetCode%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>LeetCode简单数据结构算法汇总</title>
<link href="http://bbstudy.net/easy-dataStruct/"/>
<id>http://bbstudy.net/easy-dataStruct/</id>
<published>2023-01-05T15:33:04.536Z</published>
<updated>2023-01-10T04:00:42.090Z</updated>
<content type="html"><![CDATA[<span id="more"></span><h2 id="1801-积压订单中的订单总数"><a href="#1801-积压订单中的订单总数" class="headerlink" title="1801. 积压订单中的订单总数"></a>1801. 积压订单中的订单总数</h2><blockquote><p>题解:优先队列</p><p>链接:<a href="http://bbstudy.net/LeetCode-1801">http://bbstudy.net/LeetCode-1801</a></p></blockquote>]]></content>
<summary type="html"><span id="more"></span>
<h2 id="1801-积压订单中的订单总数"><a href="#1801-积压订单中的订单总数" class="headerlink" title="1801. 积压订单中的订单总数"></a>1801. 积压订单中的订单总数</summary>
<category term="数据结构" scheme="http://bbstudy.net/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>LeetCode字符串相关算法汇总</title>
<link href="http://bbstudy.net/string/"/>
<id>http://bbstudy.net/string/</id>
<published>2023-01-05T14:13:10.474Z</published>
<updated>2023-01-05T14:16:57.515Z</updated>
<content type="html"><![CDATA[<span id="more"></span><h2 id="1803-统计异或值在范围内的数对有多少"><a href="#1803-统计异或值在范围内的数对有多少" class="headerlink" title="1803. 统计异或值在范围内的数对有多少"></a>1803. 统计异或值在范围内的数对有多少</h2><blockquote><p>题解:字典树</p><p>链接:<a href="http://bbstudy.net/LeetCode-1803">http://bbstudy.net/LeetCode-1803</a></p></blockquote>]]></content>
<summary type="html"><span id="more"></span>
<h2 id="1803-统计异或值在范围内的数对有多少"><a href="#1803-统计异或值在范围内的数对有多少" class="headerlink" title="1803. 统计异或值在范围内的数对有多少"></a>1</summary>
<category term="字符串" scheme="http://bbstudy.net/categories/%E5%AD%97%E7%AC%A6%E4%B8%B2/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>LeetCode二分查找算法汇总</title>
<link href="http://bbstudy.net/binary-search/"/>
<id>http://bbstudy.net/binary-search/</id>
<published>2023-01-05T12:40:38.194Z</published>
<updated>2023-01-05T14:16:48.727Z</updated>
<content type="html"><![CDATA[<span id="more"></span><h2 id="1802-有界数组中指定下标处的最大值"><a href="#1802-有界数组中指定下标处的最大值" class="headerlink" title="1802. 有界数组中指定下标处的最大值"></a>1802. 有界数组中指定下标处的最大值</h2><blockquote><p>题解:二分答案</p><p>链接:<a href="http://bbstudy.net/LeetCode-1802">http://bbstudy.net/LeetCode-1802</a></p></blockquote>]]></content>
<summary type="html"><span id="more"></span>
<h2 id="1802-有界数组中指定下标处的最大值"><a href="#1802-有界数组中指定下标处的最大值" class="headerlink" title="1802. 有界数组中指定下标处的最大值"></a>1802</summary>
<category term="二分" scheme="http://bbstudy.net/categories/%E4%BA%8C%E5%88%86/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>【LeetCode每日一题】1803.统计异或值在范围内的数对有多少</title>
<link href="http://bbstudy.net/LeetCode-1803/"/>
<id>http://bbstudy.net/LeetCode-1803/</id>
<published>2023-01-05T03:53:28.949Z</published>
<updated>2023-01-05T03:59:16.517Z</updated>
<content type="html"><![CDATA[<blockquote><p>题目链接:<a href="https://leetcode.cn/problems/count-pairs-with-xor-in-a-range/">https://leetcode.cn/problems/count-pairs-with-xor-in-a-range/</a></p><p>题目难度:困难</p></blockquote><span id="more"></span><h3 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h3><p>给你一个整数数组 nums (下标 从 0 开始 计数)以及两个整数:low 和 high ,请返回 漂亮数对 的数目。</p><p>漂亮数对 是一个形如 (i, j) 的数对,其中 0 <= i < j < nums.length 且 low <= (nums[i] XOR nums[j]) <= high 。</p><p><strong>示例1:</strong></p><pre class="language-none"><code class="language-none">输入:nums = [1,4,2,7], low = 2, high = 6输出:6解释:所有漂亮数对 (i, j) 列出如下: - (0, 1): nums[0] XOR nums[1] = 5 - (0, 2): nums[0] XOR nums[2] = 3 - (0, 3): nums[0] XOR nums[3] = 6 - (1, 2): nums[1] XOR nums[2] = 6 - (1, 3): nums[1] XOR nums[3] = 3 - (2, 3): nums[2] XOR nums[3] = 5</code></pre><p><strong>示例2:</strong></p><pre class="language-none"><code class="language-none">输入:nums = [9,8,4,2,1], low = 5, high = 14输出:8解释:所有漂亮数对 (i, j) 列出如下: - (0, 2): nums[0] XOR nums[2] = 13 - (0, 3): nums[0] XOR nums[3] = 11 - (0, 4): nums[0] XOR nums[4] = 8 - (1, 2): nums[1] XOR nums[2] = 12 - (1, 3): nums[1] XOR nums[3] = 10 - (1, 4): nums[1] XOR nums[4] = 9 - (2, 3): nums[2] XOR nums[3] = 6 - (2, 4): nums[2] XOR nums[4] = 5</code></pre><p><strong>提示:</strong></p><ul><li>$1 <= nums.length <= 2 * 10^4$</li><li>$1 <= nums[i] <= 2 * 10^4$</li><li>$1 <= low <= high <= 2 * 10^4$</li></ul><h3 id="题解:字典树"><a href="#题解:字典树" class="headerlink" title="题解:字典树"></a>题解:字典树</h3><p>参考题解:</p><ul><li><a href="https://leetcode.cn/problems/count-pairs-with-xor-in-a-range/solution/javac-zi-dian-shu-fu-zi-dian-shu-mo-ban-566um/">https://leetcode.cn/problems/count-pairs-with-xor-in-a-range/solution/javac-zi-dian-shu-fu-zi-dian-shu-mo-ban-566um/</a></li></ul><p>思路其实也不是很困难,首先对问题进行下转换,然后再将其转换为0-1字典树问题,重点在于query函数。</p><h4 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h4><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">const</span> <span class="token keyword">int</span> n<span class="token operator">=</span><span class="token number">20005</span><span class="token punctuation">;</span><span class="token keyword">int</span> trie<span class="token punctuation">[</span>n<span class="token operator">*</span><span class="token number">15</span><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> num<span class="token punctuation">[</span>n<span class="token operator">*</span><span class="token number">15</span><span class="token punctuation">]</span><span class="token punctuation">,</span> cnt<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token keyword">int</span> <span class="token function">countPairs</span><span class="token punctuation">(</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&</span> nums<span class="token punctuation">,</span> <span class="token keyword">int</span> low<span class="token punctuation">,</span> <span class="token keyword">int</span> high<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">get</span><span class="token punctuation">(</span>nums<span class="token punctuation">,</span>high<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token function">get</span><span class="token punctuation">(</span>nums<span class="token punctuation">,</span>low<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 keyword">int</span> <span class="token function">get</span><span class="token punctuation">(</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&</span> nums<span class="token punctuation">,</span> <span class="token keyword">int</span> high<span class="token punctuation">)</span> <span class="token punctuation">{</span> cnt<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> <span class="token function">memset</span><span class="token punctuation">(</span>trie<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>trie<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">memset</span><span class="token punctuation">(</span>num<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>num<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> ans <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><</span>nums<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span> ans <span class="token operator">+=</span> <span class="token function">query</span><span class="token punctuation">(</span>nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span>high<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">add</span><span class="token punctuation">(</span>nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> ans<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">void</span> <span class="token function">add</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> p<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">14</span><span class="token punctuation">;</span> i<span class="token operator">>=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">int</span> u <span class="token operator">=</span> <span class="token punctuation">(</span>x<span class="token operator">>></span>i<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">if</span><span class="token punctuation">(</span><span class="token operator">!</span>trie<span class="token punctuation">[</span>p<span class="token punctuation">]</span><span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span> trie<span class="token punctuation">[</span>p<span class="token punctuation">]</span><span class="token punctuation">[</span>u<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">++</span>cnt<span class="token punctuation">;</span> p <span class="token operator">=</span> trie<span class="token punctuation">[</span>p<span class="token punctuation">]</span><span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">;</span> num<span class="token punctuation">[</span>p<span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">int</span> <span class="token function">query</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">,</span> <span class="token keyword">int</span> high<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> sum <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> p <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">14</span><span class="token punctuation">;</span> i<span class="token operator">>=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">int</span> u <span class="token operator">=</span> <span class="token punctuation">(</span>x<span class="token operator">>></span>i<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">if</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">(</span>high <span class="token operator">>></span> i<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> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> sum <span class="token operator">+=</span> num<span class="token punctuation">[</span>trie<span class="token punctuation">[</span>p<span class="token punctuation">]</span><span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>trie<span class="token punctuation">[</span>p<span class="token punctuation">]</span><span class="token punctuation">[</span>u<span class="token operator">^</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">return</span> sum<span class="token punctuation">;</span> p <span class="token operator">=</span> trie<span class="token punctuation">[</span>p<span class="token punctuation">]</span><span class="token punctuation">[</span>u<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 keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>trie<span class="token punctuation">[</span>p<span class="token punctuation">]</span><span class="token punctuation">[</span>u<span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">return</span> sum<span class="token punctuation">;</span> p <span class="token operator">=</span> trie<span class="token punctuation">[</span>p<span class="token punctuation">]</span><span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> sum <span class="token operator">+=</span> num<span class="token punctuation">[</span>p<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">return</span> sum<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre>]]></content>
<summary type="html"><blockquote>
<p>题目链接:<a href="https://leetcode.cn/problems/count-pairs-with-xor-in-a-range/">https://leetcode.cn/problems/count-pairs-with-xor-in-a-range/</a></p>
<p>题目难度:困难</p>
</blockquote></summary>
<category term="LeetCode每日一题" scheme="http://bbstudy.net/categories/LeetCode%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>【LeetCode每日一题】1802.有界数组中指定下标处的最大值</title>
<link href="http://bbstudy.net/LeetCode-1802/"/>
<id>http://bbstudy.net/LeetCode-1802/</id>
<published>2023-01-04T15:23:25.641Z</published>
<updated>2023-01-04T15:33:47.995Z</updated>
<content type="html"><![CDATA[<blockquote><p>题目链接:<a href="https://leetcode.cn/problems/maximum-value-at-a-given-index-in-a-bounded-array/">https://leetcode.cn/problems/maximum-value-at-a-given-index-in-a-bounded-array/</a></p><p>题目难度:中等</p></blockquote><span id="more"></span><h3 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h3><p>给你三个正整数 n、index 和 maxSum 。你需要构造一个同时满足下述所有条件的数组 nums(下标 从 0 开始 计数):</p><ul><li>$nums.length == n$</li><li>nums[i] 是 正整数 ,其中 0 <= i < n</li><li>$abs(nums[i] - nums[i+1]) <= 1 $,其中 $0 <= i < n-1$</li><li>nums 中所有元素之和不超过 maxSum</li><li>nums[index] 的值被 最大化</li></ul><p>返回你所构造的数组中的 nums[index] 。</p><p>注意:abs(x) 等于 x 的前提是 x >= 0 ;否则,abs(x) 等于 -x 。</p><p><strong>示例1:</strong></p><pre class="language-none"><code class="language-none">输入:n = 4, index = 2, maxSum = 6输出:2解释:数组 [1,1,2,1] 和 [1,2,2,1] 满足所有条件。不存在其他在指定下标处具有更大值的有效数组。</code></pre><p><strong>示例2:</strong></p><pre class="language-none"><code class="language-none">输入:n = 6, index = 1, maxSum = 10输出:3</code></pre><p><strong>提示:</strong></p><ul><li>$1 <= n <= maxSum <= 10^9$</li><li>$0 <= index < n$</li></ul><h3 id="题解:贪心-二分"><a href="#题解:贪心-二分" class="headerlink" title="题解:贪心+二分"></a>题解:贪心+二分</h3><p>题目要求寻找最大的num[index],且nums数组的和$sum<=maxSum$。于是不妨构造以index下标为最大的“峰数组”,</p><p>即假设某下标为i,则$num[i-1]=num[i]-1$,$num[i+1]=num[i]-1$,如果$num[i]=1$,则$num[i-1]=num[i+1]=1$。</p><p>于是,nums数组转化为两个等差等差数列求和,剩余部分用1填充。</p><p>然而二分答案num[index],知道找到最大的num[index]即可。</p><p>注意:为了防止求和时出现int溢出,于是所有值用long long表示。</p><h4 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h4><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span> <span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token keyword">int</span> <span class="token function">maxValue</span><span class="token punctuation">(</span><span class="token keyword">int</span> n<span class="token punctuation">,</span> <span class="token keyword">int</span> index<span class="token punctuation">,</span> <span class="token keyword">int</span> maxSum<span class="token punctuation">)</span> <span class="token punctuation">{</span> ll l<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>r<span class="token operator">=</span><span class="token number">1e9</span><span class="token punctuation">,</span>x<span class="token punctuation">;</span> ll sum<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">while</span><span class="token punctuation">(</span>l<span class="token operator"><=</span>r<span class="token punctuation">)</span><span class="token punctuation">{</span> x<span class="token operator">=</span><span class="token punctuation">(</span>l<span class="token operator">+</span>r<span class="token punctuation">)</span><span class="token operator">>></span><span class="token number">1</span><span class="token punctuation">;</span> sum<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>index<span class="token operator">+</span><span class="token number">1</span><span class="token operator">>=</span>x<span class="token punctuation">)</span><span class="token punctuation">{</span> sum<span class="token operator">+=</span> <span class="token punctuation">(</span> x<span class="token operator">*</span><span class="token punctuation">(</span>x<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">/</span><span class="token number">2</span> <span class="token operator">+</span> <span class="token punctuation">(</span>index<span class="token operator">+</span><span class="token number">1</span><span class="token operator">-</span>x<span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span> sum<span class="token operator">+=</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span>x<span class="token operator">+</span>x<span class="token operator">-</span>index<span class="token punctuation">)</span><span class="token operator">*</span><span class="token punctuation">(</span>index<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">/</span><span class="token number">2</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">if</span><span class="token punctuation">(</span> <span class="token punctuation">(</span>n<span class="token operator">-</span><span class="token number">1</span><span class="token operator">-</span>index<span class="token punctuation">)</span> <span class="token operator">>=</span> <span class="token punctuation">(</span>x<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> sum<span class="token operator">+=</span> <span class="token punctuation">(</span> x<span class="token operator">*</span><span class="token punctuation">(</span>x<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">/</span><span class="token number">2</span> <span class="token operator">+</span> <span class="token punctuation">(</span>n<span class="token operator">-</span>index<span class="token operator">-</span>x<span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span> sum<span class="token operator">+=</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span>n<span class="token operator">-</span>index<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">*</span><span class="token punctuation">(</span>x<span class="token operator">-</span><span class="token number">1</span> <span class="token operator">+</span> x<span class="token operator">-</span><span class="token punctuation">(</span>n<span class="token operator">-</span>index<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 number">2</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// cout<<l<<"---"<<r<<"---"<<sum<<"---"<<x<<endl;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>sum<span class="token operator"><=</span>maxSum<span class="token punctuation">)</span> l<span class="token operator">=</span>x<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span> <span class="token keyword">else</span> r<span class="token operator">=</span>x<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> r<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre><p>改进方法:将求和过程改成函数,提高代码可用性,并方便debug。</p>]]></content>
<summary type="html"><blockquote>
<p>题目链接:<a href="https://leetcode.cn/problems/maximum-value-at-a-given-index-in-a-bounded-array/">https://leetcode.cn/problems/maximum-value-at-a-given-index-in-a-bounded-array/</a></p>
<p>题目难度:中等</p>
</blockquote></summary>
<category term="LeetCode每日一题" scheme="http://bbstudy.net/categories/LeetCode%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
<entry>
<title>LeetCode第283场周赛</title>
<link href="http://bbstudy.net/weekly-contest-283/"/>
<id>http://bbstudy.net/weekly-contest-283/</id>
<published>2022-09-30T06:54:25.444Z</published>
<updated>2022-03-06T11:47:32.000Z</updated>
<content type="html"><![CDATA[<h2 id="LeetCode第283场周赛题解"><a href="#LeetCode第283场周赛题解" class="headerlink" title="LeetCode第283场周赛题解"></a>LeetCode第283场周赛题解</h2><blockquote><p>比赛地址:<a href="https://leetcode-cn.com/contest/weekly-contest-283/">https://leetcode-cn.com/contest/weekly-contest-283/</a></p></blockquote><h3 id="一、Excel-表中某个范围内的单元格"><a href="#一、Excel-表中某个范围内的单元格" class="headerlink" title="一、Excel 表中某个范围内的单元格"></a><a href="https://leetcode-cn.com/problems/cells-in-a-range-on-an-excel-sheet/">一、Excel 表中某个范围内的单元格</a></h3><h4 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h4><p>Excel 表中的一个单元格 (r, c) 会以字符串 “<col><row>“ 的形式进行表示,其中:</p><p><col> 即单元格的列号 c 。用英文字母表中的 字母 标识。<br>例如,第 1 列用 ‘A’ 表示,第 2 列用 ‘B’ 表示,第 3 列用 ‘C’ 表示,以此类推。</p><p><row> 即单元格的行号 r 。第 r 行就用 整数 r 标识。<br>给你一个格式为 “<col1><row1>:<col2><row2>“ 的字符串 s ,其中 <col1> 表示 c1 列,<row1> 表示 r1 行,<col2> 表示 c2 列,<row2> 表示 r2 行,并满足 r1 <= r2 且 c1 <= c2 。</p><p>找出所有满足 r1 <= x <= r2 且 c1 <= y <= c2 的单元格,并以列表形式返回。单元格应该按前面描述的格式用 字符串 表示,并以 非递减 顺序排列(先按列排,再按行排)。</p><p><strong>示例1:</strong></p><p><img src="https://gitee.com/serendipity_LB/img/raw/master/ex1drawio.png" alt="img" loading="lazy"></p><pre class="language-none"><code class="language-none">输入:s = "K1:L2"输出:["K1","K2","L1","L2"]解释:上图显示了列表中应该出现的单元格。红色箭头指示单元格的出现顺序。</code></pre><p><strong>示例2:</strong></p><p><img src="https://gitee.com/serendipity_LB/img/raw/master/exam2drawio.png" alt="img" loading="lazy"></p><pre class="language-none"><code class="language-none">输入:s = "A1:F1"输出:["A1","B1","C1","D1","E1","F1"]解释:上图显示了列表中应该出现的单元格。 红色箭头指示单元格的出现顺序。</code></pre><p><strong>提示:</strong></p><ul><li>s.length == 5</li><li>‘A’ <= s[0] <= s[3] <= ‘Z’</li><li>‘1’ <= s[1] <= s[4] <= ‘9’</li><li>s 由大写英文字母、数字、和 ‘:’ 组成</li></ul><h4 id="题解:模拟"><a href="#题解:模拟" class="headerlink" title="题解:模拟"></a>题解:模拟</h4><p>直接按照题意模拟即可</p><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> vector<span class="token operator"><</span>string<span class="token operator">></span> <span class="token function">cellsInRange</span><span class="token punctuation">(</span>string s<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> l<span class="token operator">=</span>s<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">-</span><span class="token char">'A'</span><span class="token punctuation">,</span>r<span class="token operator">=</span>s<span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token operator">-</span><span class="token char">'A'</span><span class="token punctuation">;</span> <span class="token keyword">int</span> u<span class="token operator">=</span>s<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">-</span><span class="token char">'0'</span><span class="token punctuation">,</span>d<span class="token operator">=</span>s<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token operator">-</span><span class="token char">'0'</span><span class="token punctuation">;</span> string str<span class="token punctuation">;</span> vector<span class="token operator"><</span>string<span class="token operator">></span> ans<span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span>l<span class="token punctuation">;</span>i<span class="token operator"><=</span>r<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span>u<span class="token punctuation">;</span>j<span class="token operator"><=</span>d<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span> str<span class="token operator">=</span><span class="token string">""</span><span class="token punctuation">;</span> str<span class="token operator">+=</span>i<span class="token operator">+</span><span class="token char">'A'</span><span class="token punctuation">;</span>str<span class="token operator">+=</span>j<span class="token operator">+</span><span class="token char">'0'</span><span class="token punctuation">;</span> ans<span class="token punctuation">.</span><span class="token function">push_back</span><span class="token punctuation">(</span>str<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> ans<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre><h3 id="二、向数组中追加-K-个整数"><a href="#二、向数组中追加-K-个整数" class="headerlink" title="二、向数组中追加 K 个整数"></a><a href="https://leetcode-cn.com/problems/append-k-integers-with-minimal-sum/">二、向数组中追加 K 个整数</a></h3><h4 id="题意-1"><a href="#题意-1" class="headerlink" title="题意"></a>题意</h4><p>给你一个整数数组 nums 和一个整数 k 。请你向 nums 中追加 k 个 未 出现在 nums 中的、互不相同 的 正 整数,并使结果数组的元素和 最小 。</p><p>返回追加到 nums 中的 k 个整数之和。</p><p><strong>示例1:</strong></p><pre class="language-none"><code class="language-none">输入:nums = [1,4,25,10,25], k = 2输出:5解释:在该解法中,向数组中追加的两个互不相同且未出现的正整数是 2 和 3 。nums 最终元素和为 1 + 4 + 25 + 10 + 25 + 2 + 3 = 70 ,这是所有情况中的最小值。所以追加到数组中的两个整数之和是 2 + 3 = 5 ,所以返回 5 。</code></pre><p><strong>示例2:</strong></p><pre class="language-none"><code class="language-none">输入:nums = [5,6], k = 6输出:25解释:在该解法中,向数组中追加的两个互不相同且未出现的正整数是 1 、2 、3 、4 、7 和 8 。nums 最终元素和为 5 + 6 + 1 + 2 + 3 + 4 + 7 + 8 = 36 ,这是所有情况中的最小值。所以追加到数组中的两个整数之和是 1 + 2 + 3 + 4 + 7 + 8 = 25 ,所以返回 25 。</code></pre><p><strong>提示:</strong></p><ul><li>$1 <= nums.length <= 10^5$</li><li>$1 <= nums[i], k <= 10^9$</li></ul><h4 id="题解:思维"><a href="#题解:思维" class="headerlink" title="题解:思维"></a>题解:思维</h4><p>不妨将题意理解为:<strong>(原来的数组元素中重复元素和始终k大的数的总和sum1+追加进去后的元素总和num)-原来的数组元素总和sum2</strong></p><ul><li>假设原来数组元素均大于k,则只要追加1到k即可</li><li>如果数组中元素存在<=k的情况,则k需要动态的增加</li></ul><p>举个例子。例如示例1中,只存在1小于2,于是k+1=3。我们换种角度,假设数组原来元素中存在小于k的元素,我们不视为在原来数组中,而是在新追加的元素集合中,也就是新追加的元素集合始终为1到k的和(k如上所述随着数组元素的情况而动态改变)。同样对于示例1来说:</p><p>我们可以对最终数组元素总和理解为:(1+2+3)+(4+25+10+25)。</p><p>对于新追加元素集合,直接使用等差数列求和公式即可:$num=\frac{n*(n+1)}{2}$。</p><p>但是需要注意如果原来数组总存在多个<=k的数,且彼此相同,例如:</p><pre class="language-none"><code class="language-none">nums=[1,1,2,3,7,8],k=2</code></pre><p>对于上述例子,我们只处理一次1,另一个1还是视为原来的数组元素总和。也就是理解为:(1+2+3+4+5)+(1+7+8)。</p><p>于是需要用集合判重,这里采用map。</p><p>当然需要额外对数组排序。</p><p>具体见代码。</p><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token keyword">long</span> <span class="token keyword">long</span> <span class="token function">minimalKSum</span><span class="token punctuation">(</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&</span> nums<span class="token punctuation">,</span> <span class="token keyword">int</span> k<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> n<span class="token operator">=</span>nums<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">long</span> <span class="token keyword">long</span> m<span class="token operator">=</span><span class="token punctuation">(</span><span class="token keyword">long</span> <span class="token keyword">long</span><span class="token punctuation">)</span>k<span class="token punctuation">;</span> map<span class="token operator"><</span><span class="token keyword">int</span><span class="token punctuation">,</span><span class="token keyword">int</span><span class="token operator">></span>mp<span class="token punctuation">;</span>mp<span class="token punctuation">.</span><span class="token function">clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ans<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">long</span> <span class="token keyword">long</span> sum<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> <span class="token function">sort</span><span class="token punctuation">(</span>nums<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>nums<span class="token punctuation">.</span><span class="token function">end</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">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator"><</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token keyword">long</span> <span class="token keyword">long</span><span class="token punctuation">)</span>nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator"><=</span>m<span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>mp<span class="token punctuation">[</span>nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">{</span> mp<span class="token punctuation">[</span>nums<span class="token punctuation">[</span>i<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>m<span class="token operator">++</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span> ans<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 punctuation">}</span> <span class="token punctuation">}</span> sum<span class="token operator">+=</span><span class="token punctuation">(</span><span class="token keyword">long</span> <span class="token keyword">long</span><span class="token punctuation">)</span>nums<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">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator"><</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">></span>m<span class="token punctuation">)</span> ans<span class="token operator">+=</span><span class="token punctuation">(</span><span class="token keyword">long</span> <span class="token keyword">long</span><span class="token punctuation">)</span>nums<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> ans<span class="token operator">+=</span>m<span class="token operator">*</span><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><span class="token number">2</span><span class="token punctuation">;</span> <span class="token keyword">return</span> ans<span class="token operator">-</span>sum<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre><h3 id="三、根据描述创建二叉树"><a href="#三、根据描述创建二叉树" class="headerlink" title="三、根据描述创建二叉树"></a><a href="https://leetcode-cn.com/problems/create-binary-tree-from-descriptions/">三、根据描述创建二叉树</a></h3><h4 id="题意-2"><a href="#题意-2" class="headerlink" title="题意"></a>题意</h4><p>给你一个二维整数数组 descriptions ,其中 descriptions[i] = [parenti, childi, isLefti] 表示 parenti 是 childi 在 二叉树 中的 父节点,二叉树中各节点的值 互不相同 。此外:</p><p>如果 isLefti == 1 ,那么 childi 就是 parenti 的左子节点。<br>如果 isLefti == 0 ,那么 childi 就是 parenti 的右子节点。<br>请你根据 descriptions 的描述来构造二叉树并返回其 根节点 。</p><p>测试用例会保证可以构造出 有效 的二叉树。</p><p><strong>示例1:</strong></p><p><img src="https://gitee.com/serendipity_LB/img/raw/master/example1drawio.png" alt="img" loading="lazy"></p><pre class="language-none"><code class="language-none">输入:descriptions = [[20,15,1],[20,17,0],[50,20,1],[50,80,0],[80,19,1]]输出:[50,20,80,15,17,19]解释:根节点是值为 50 的节点,因为它没有父节点。结果二叉树如上图所示。</code></pre><p><strong>示例2:</strong></p><p><img src="https://gitee.com/serendipity_LB/img/raw/master/example2drawio.png" alt="img" loading="lazy"></p><pre class="language-none"><code class="language-none">输入:descriptions = [[1,2,1],[2,3,0],[3,4,1]]输出:[1,2,null,null,3,4]解释:根节点是值为 1 的节点,因为它没有父节点。 结果二叉树如上图所示。 </code></pre><p><strong>提示:</strong></p><ul><li>1 <= descriptions.length <= 104</li><li>descriptions[i].length == 3</li><li>1 <= parenti, childi <= 105</li><li>0 <= isLefti <= 1</li><li>descriptions 所描述的二叉树是一棵有效二叉树</li></ul><h4 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h4><p>通过数组par[]保存节点是否有父节点。数组TreeNode a[]保存所有的树节点。</p><p>遍历descriptions数组,假设当前遍历的元素是x,判断a数组中是否存在x[0]和x[1],如果不存在则加入a数组中,通过x[2]判断是左孩子或右孩子。</p><p>由于节点数最多为100000,于是遍历1到100000,判断是否存在父节点不存在的情况,若当前节点父节点不存在即为根节点。</p><pre class="language-cpp" data-language="cpp"><code class="language-cpp"><span class="token comment">/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */</span><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span> <span class="token keyword">int</span> par<span class="token punctuation">[</span><span class="token number">100010</span><span class="token punctuation">]</span><span class="token punctuation">;</span> TreeNode<span class="token operator">*</span> a<span class="token punctuation">[</span><span class="token number">100010</span><span class="token punctuation">]</span><span class="token punctuation">;</span> TreeNode<span class="token operator">*</span> <span class="token function">createBinaryTree</span><span class="token punctuation">(</span>vector<span class="token operator"><</span>vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">>></span><span class="token operator">&</span> descriptions<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<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">100000</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span> a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span><span class="token constant">NULL</span><span class="token punctuation">;</span>par<span class="token punctuation">[</span>i<span class="token punctuation">]</span><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">for</span><span class="token punctuation">(</span><span class="token keyword">auto</span> x<span class="token operator">:</span>descriptions<span class="token punctuation">)</span><span class="token punctuation">{</span> TreeNode<span class="token operator">*</span> far<span class="token operator">=</span>a<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><span class="token operator">==</span><span class="token constant">NULL</span><span class="token operator">?</span>a<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><span class="token operator">=</span><span class="token keyword">new</span> <span class="token function">TreeNode</span><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><span class="token operator">:</span>a<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><span class="token punctuation">;</span> TreeNode<span class="token operator">*</span> son<span class="token operator">=</span>a<span class="token punctuation">[</span>x<span class="token punctuation">[</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 constant">NULL</span><span class="token operator">?</span>a<span class="token punctuation">[</span>x<span class="token punctuation">[</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 keyword">new</span> <span class="token function">TreeNode</span><span class="token punctuation">(</span>x<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">:</span>a<span class="token punctuation">[</span>x<span class="token punctuation">[</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 keyword">if</span><span class="token punctuation">(</span>x<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span> far<span class="token operator">-></span>left<span class="token operator">=</span>son<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span> far<span class="token operator">-></span>right<span class="token operator">=</span>son<span class="token punctuation">;</span> <span class="token punctuation">}</span> par<span class="token punctuation">[</span>x<span class="token punctuation">[</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 number">1</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<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">100000</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">!=</span><span class="token constant">NULL</span><span class="token operator">&&</span>par<span class="token punctuation">[</span>i<span class="token punctuation">]</span><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> a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token constant">NULL</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre>]]></content>
<summary type="html"><h2 id="LeetCode第283场周赛题解"><a href="#LeetCode第283场周赛题解" class="headerlink" title="LeetCode第283场周赛题解"></a>LeetCode第283场周赛题解</h2><blockquote>
</summary>
<category term="LeetCode周赛题解" scheme="http://bbstudy.net/categories/LeetCode%E5%91%A8%E8%B5%9B%E9%A2%98%E8%A7%A3/"/>
<category term="LeetCode" scheme="http://bbstudy.net/tags/LeetCode/"/>
<category term="Algorithm" scheme="http://bbstudy.net/tags/Algorithm/"/>
</entry>
</feed>