Skip to content

Commit 77e99d3

Browse files
author
Navy.Tian
committed
add classic150
1 parent 99f7615 commit 77e99d3

File tree

4 files changed

+158
-0
lines changed

4 files changed

+158
-0
lines changed

classic150/_001_88.py

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# https://leetcode.cn/problems/merge-sorted-array/?envType=study-plan-v2&id=top-interview-150
2+
3+
from typing import List
4+
5+
6+
class Solution:
7+
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
8+
"""
9+
Do not return anything, modify nums1 in-place instead.
10+
"""
11+
# 从后往前, 较大的移动到后面,并移动该索引不断向前
12+
start = m + n - 1
13+
while start >= 0 and m > 0 and n > 0:
14+
if nums1[m - 1] > nums2[n - 1]:
15+
nums1[start] = nums1[m - 1]
16+
m -= 1
17+
else:
18+
nums1[start] = nums2[n - 1]
19+
n -= 1
20+
start -= 1
21+
22+
# m有多余不需要考虑,不需要移动,所以只需要考虑移动剩余的n到 nums1
23+
while start >= 0 and n > 0:
24+
nums1[start] = nums2[n - 1]
25+
n -= 1
26+
start -= 1
27+
28+
29+
if __name__ == "__main__":
30+
nums1 = [1, 2, 3, 0, 0, 0]
31+
Solution().merge(nums1=nums1, m=3, nums2=[2, 5, 6], n=3)
32+
assert nums1 == [1, 2, 2, 3, 5, 6]
33+
34+
nums1 = [1]
35+
Solution().merge(nums1=nums1, m=1, nums2=[], n=0)
36+
assert nums1 == [1]
37+
38+
nums1 = [0]
39+
Solution().merge(nums1=nums1, m=0, nums2=[1], n=1)
40+
assert nums1 == [1]
41+
42+
nums1 = [1, 2, 3, 0]
43+
Solution().merge(nums1=nums1, m=3, nums2=[0], n=1)
44+
assert nums1 == [0, 1, 2, 3]

classic150/_002_27.py

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# https://leetcode.cn/problems/remove-element/?envType=study-plan-v2&id=top-interview-150
2+
from typing import List
3+
4+
5+
class Solution:
6+
def removeElement(self, nums: List[int], val: int) -> int:
7+
start, end = 0, len(nums)
8+
total = 0
9+
while start < end:
10+
# <---------------|---->
11+
# 找到可以替换的 end, 并往后走一步,记录+1
12+
while end > start:
13+
if nums[end - 1] == val:
14+
end -= 1
15+
total += 1
16+
else:
17+
break
18+
# <-----|----------|---->
19+
# 找到可以替换的 start
20+
# 交换 start, end, 并均往前往后走一步, 记录+1
21+
while start < end:
22+
if nums[start] == val:
23+
nums[start], nums[end - 1] = nums[end - 1], nums[start]
24+
end -= 1
25+
start += 1
26+
total += 1
27+
break
28+
start += 1
29+
# 返回总长度 - 记录值,为新长度
30+
return len(nums) - total
31+
32+
33+
if __name__ == "__main__":
34+
nums = [1]
35+
assert Solution().removeElement(nums=nums, val=1) == 0
36+
assert nums == [1]
37+
38+
nums = [3, 2, 2, 3]
39+
assert Solution().removeElement(nums=nums, val=3) == 2
40+
assert nums == [2, 2, 3, 3]
41+
42+
nums = [2, 2, 3, 3]
43+
assert Solution().removeElement(nums=nums, val=3) == 2
44+
assert nums == [2, 2, 3, 3]
45+
46+
nums = [3, 3, 3, 3]
47+
assert Solution().removeElement(nums=nums, val=3) == 0
48+
assert nums == [3, 3, 3, 3]
49+
50+
nums = [0, 1, 2, 2, 3, 0, 4, 2]
51+
assert Solution().removeElement(nums=nums, val=2) == 5
52+
assert nums[:5] == [0, 1, 4, 0, 3]

classic150/_003_26.py

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
def removeDuplicates(self, nums: List[int]) -> int:
6+
index = cur = 0
7+
while cur + 1 < len(nums):
8+
# 找到一个与当前不相同的索引
9+
while cur + 1 < len(nums) and nums[cur + 1] == nums[cur]:
10+
cur = cur + 1
11+
# 找到后,原地赋值,索引往后移动,元素个数加一
12+
# 找不到的 case 表示后面几位一样,不需要操作,由外层 while 结束
13+
if cur + 1 < len(nums):
14+
nums[index + 1] = nums[cur + 1]
15+
cur += 1
16+
index += 1
17+
return index + 1
18+
19+
20+
if __name__ == "__main__":
21+
nums = [1, 1, 2]
22+
assert Solution().removeDuplicates(nums=nums) == 2
23+
assert nums[:2] == [1, 2]
24+
25+
nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4]
26+
assert Solution().removeDuplicates(nums=nums) == 5
27+
assert nums[:5] == [0, 1, 2, 3, 4]
28+
29+
nums = [1]
30+
assert Solution().removeDuplicates(nums=nums) == 1
31+
assert nums[:1] == [1]
32+
33+
nums = [1, 1]
34+
assert Solution().removeDuplicates(nums=nums) == 1
35+
assert nums[:1] == [1]
36+
37+
nums = [1, 2, 3, 4]
38+
assert Solution().removeDuplicates(nums=nums) == 4
39+
assert nums[:4] == [1, 2, 3, 4]
40+
# print(nums)
41+
# assert 1 == 2

classic150/_005_169.py

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
def majorityElement(self, nums: List[int]) -> int:
6+
win = nums[0]
7+
count = 1
8+
for num in nums[1:]:
9+
if win == num:
10+
count += 1
11+
elif win != num:
12+
count -= 1
13+
if count < 0:
14+
win = num
15+
count = 1
16+
return win
17+
18+
19+
if __name__ == "__main__":
20+
assert Solution().majorityElement(nums=[3, 2, 3]) == 3
21+
assert Solution().majorityElement(nums=[2, 2, 1, 1, 1, 2, 2]) == 2

0 commit comments

Comments
 (0)