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 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

Lines changed: 44 additions & 0 deletions
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

Lines changed: 52 additions & 0 deletions
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

Lines changed: 41 additions & 0 deletions
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

Lines changed: 21 additions & 0 deletions
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)

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