class Solution:
def removeDuplicates(self,nums:List[int])->int:
# 雙指針
i = 0
for j in range(len(nums)):
if nums[i] != nums[j]:
i += 1
nums[i] = nums[j]
return i + 1
def rotate(nums, k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n = len(nums)
k = k % n
nums[:] = nums[n-k:] + nums[:n-k]
這裏爲什麼是nums[ : ],爲什麼寫 nums 在IDE 裏面也OK ,但是 OJ 通不過,
- nums1 = A # 更改 nums1 這一變量名所指向的對象。讓 nums1 變量指向 A 所指向的對象
- nums1[:] = A # 對 nums1 指向的對象賦值。把 A 變量指向的對象的值逐個 copy 到 nums1 指向的對象中並覆蓋 nums1 指向的對象的原來值。
參考
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
while n: # 當 nums2 的裏面還有元素的時候,即 n 不爲 0
# 當 nums1 的裏面還是有元素的時候,即 m 不爲 0
if m and nums1[m - 1] >= nums2[n - 1]:
nums1[m + n - 1] = nums1[m - 1]
m -= 1
# 此句是在 while 循環內的代碼,則 nums2 裏面是不爲 0 的,又和 前面 if 構成 if else 的分支,所以 此處默認 m 不爲 0 ,就不用贅述了
else:
nums1[m + n - 1] = nums2[n - 1]
n -= 1
21 合併倆個有序鏈表
方法 1 :DummyNode
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
# DummyNode
dummy = cur = ListNode(0)
while l1 and l2: # l1 和 L2都存在的情況
if l1.val < l2.val:
cur.next = l1
l1 = l1.next
else:
cur.next = l2
l2 = l2.next
cur = cur.next
cur.next = l1 or l2 # l1 和 l2 不·爲 0的情況
return dummy.next
# recursively
def mergeTwoLists2(self, l1, l2):
if not l1 or not l2:
return l1 or l2
if l1.val < l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
# in-place, iteratively
def mergeTwoLists(self, l1, l2):
if None in (l1, l2):
return l1 or l2
dummy = cur = ListNode(0)
dummy.next = l1
while l1 and l2:
if l1.val < l2.val:
l1 = l1.next
else:
nxt = cur.next
cur.next = l2
tmp = l2.next
l2.next = nxt
l2 = tmp
cur = cur.next
cur.next = l1 or l2
return dummy.next