23. 合并K个升序链表
class Solution:
def mergeKLists(self, lists: List[ListNode]) -> ListNode:
import heapq
head = []
res = ListNode()
p = res
for i in range(len(lists)):
if lists[i]:
heapq.heappush(head, (lists[i].val,i))
lists[i] = lists[i].next
while head:
val, idx = heapq.heappop(head)
p.next = ListNode(val)
p = p.next
if lists[idx]:
heapq.heappush(head, (lists[idx].val, idx))
lists[idx] = lists[idx].next
return res.next
33 搜索旋转排序数组
class Solution:
def search(self, nums: List[int], target: int) -> int:
if not nums:
return -1
left = 0
right = len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
if nums[mid] >= nums[left]:
if nums[left] <= target <= nums[mid]:
right = mid - 1
else:
left = mid + 1
else:
if nums[mid] <= target <= nums[right]:
left = mid + 1
else:
right = mid - 1
return -1
26 删除排序数组中的重复项
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
slow,fast = 0,0
while fast<len(nums):
if nums[slow] != nums[fast]:
slow += 1
nums[slow] = nums[fast]
fast += 1
return slow+1