Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f41bde3

Browse files
🐱(biweekly): 第 9 场双周赛
1 parent 2fe907a commit f41bde3

File tree

1 file changed

+114
-0
lines changed

1 file changed

+114
-0
lines changed

‎docs/biweekly/README.md‎

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,4 +454,118 @@ class Solution:
454454
res += edge
455455

456456
return res
457+
```
458+
459+
## 第 9 场双周赛
460+
461+
[点击前往第 9 场双周赛](https://leetcode-cn.com/contest/biweekly-contest-9)
462+
463+
### 5072. 最多可以买到的苹果数量
464+
465+
[原题链接](https://leetcode-cn.com/contest/biweekly-contest-9/problems/how-many-apples-can-you-put-into-the-basket/)
466+
467+
#### 思路
468+
469+
1. 排序
470+
2. 遍历排序结果,将苹果重量依次相加:
471+
- 如果相加和小于 5000,则把这个苹果放入袋子
472+
- 如果相加和大于 5000,跳出遍历循环
473+
474+
```python
475+
class Solution:
476+
def maxNumberOfApples(self, arr: List[int]) -> int:
477+
arr.sort()
478+
res = 0
479+
s = 0
480+
for n in arr:
481+
s += n
482+
if s > 5000:
483+
break
484+
else:
485+
res += 1
486+
return res
487+
```
488+
489+
### 5073. 进击的骑士
490+
491+
[原题链接](https://leetcode-cn.com/contest/biweekly-contest-9/problems/minimum-knight-moves/)
492+
493+
#### 思路
494+
495+
BFS,需要进行枝剪,否则会超时。
496+
497+
骑士所走的 8 个方向具有对称性,所以我们只要保留 `x > 0 && y > 0` 方向即可。这里借用了队列来实现 BFS。
498+
499+
```python
500+
class Solution:
501+
def minKnightMoves(self, x: int, y: int) -> int:
502+
if x == 0 and y == 0:
503+
return 0
504+
505+
dx = [2, 2, -2, -2, 1, 1, -1, -1]
506+
dy = [1, -1, 1, -1, 2, -2, 2, -2]
507+
# 对称性
508+
x = -x if x < 0 else x
509+
y = -y if y < 0 else y
510+
511+
# 初始化队列
512+
q = list()
513+
mark = dict()
514+
mark[0] = True
515+
q.append([0, 0])
516+
M = 10000
517+
518+
res = 0
519+
while len(q):
520+
q_length = len(q)
521+
res += 1
522+
# 遍历队列现有元素
523+
while q_length:
524+
px, py = q[0][0], q[0][1]
525+
# 取出队列头部元素
526+
del(q[0])
527+
q_length -= 1
528+
529+
for i in range(len(dx)):
530+
pdx = px + dx[i]
531+
pdy = py + dy[i]
532+
# 对称性枝剪
533+
if pdx < 0 or pdy < 0:
534+
continue
535+
if abs(pdx) + abs(pdy) > 300:
536+
continue
537+
# 是否为要求的值
538+
if pdx == x and pdy == y:
539+
return res
540+
# 是否已记录
541+
tmp = pdx * M + pdy
542+
if tmp in mark:
543+
continue
544+
mark[tmp] = True
545+
q.append([pdx, pdy])
546+
```
547+
548+
### 5071. 找出所有行中最小公共元素
549+
550+
[原题链接](https://leetcode-cn.com/contest/biweekly-contest-9/problems/find-smallest-common-element-in-all-rows/)
551+
552+
#### 思路
553+
554+
1. 用字典 `key` 存储每行中存在的元素,`value` 值为元素个数
555+
2. 从小到大遍历字典 `key` 所代表的元素,若 `value` 值等于 `len(mat)`(代表每行都出线了这个元素),则返回该元素
556+
557+
```python
558+
class Solution:
559+
def smallestCommonElement(self, mat: List[List[int]]) -> int:
560+
mat_num = len(mat)
561+
mat_map = dict()
562+
for nums in mat:
563+
for num in nums:
564+
mat_map[num] = mat_map.get(num, 0) + 1
565+
566+
key_list = sorted([x for x in mat_map])
567+
for k in key_list:
568+
if mat_map.get(k, 0) == mat_num:
569+
return k
570+
return -1
457571
```

0 commit comments

Comments
(0)

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