【datawhale】数据结构打卡任务1

  • 练习: Three Sum(求三数之和)

中文版:https://leetcode-cn.com/problems/3sum/

数组排序后固定一个数,这个固定的数从索引0开始取,另外两个数通过双指针进行搜索,当然,还要考虑重复的情况

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums.sort()#排序
        res=[]#建立空数组
        for i in range(len(nums)-2):#第一个数索引最大只能取len(nums)-2
            if i>0 and nums[i]==nums[i-1]:
                continue
            j=i+1#确定双指针索引
            k=len(nums)-1
            while j<k:
                if nums[i]+nums[j]+nums[k]==0:#
                    res.append([nums[i],nums[j],nums[k]])
                    while j<k and nums[j]==nums[j+1]:
                        j+=1
                    while j<k and nums[k]==nums[k-1]:
                        k-=1
                    j+=1
                    k-=1
                elif nums[i]+nums[j]+nums[k]>0:
                    k-=1
                else:
                    j+=1
        return res

Majority Element(求众数)

 

中文版:https://leetcode-cn.com/problems/majority-element/

题目假设有众数且数组不为空,可排序后中位数总为众数(题目规定众数为出现次数大于len(nums)/2)

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        nums.sort()
        n=len(nums)
        return nums[n//2]#取整

Missing Positive(求缺失的第一个正数)[作为可选]打卡来不及了,等下来做

英文版:https://leetcode.com/problems/first-missing-positive/

中文版:https://leetcode-cn.com/problems/first-missing-positive/

  • 【链表】

实现单链表、循环链表、双向链表,支持增删操作

实现单链表反转

实现两个有序的链表合并为一个有序链表

实现求链表的中间结点

  • 练习: Linked List Cycle I(环形链表)

中文版:https://leetcode-cn.com/problems/linked-list-cycle/

(快慢指针法,若指针相遇则判断有环)

class Solution(object):
    def hasCycle(self, head):
        slow = fast = head
        while slow and fast and fast.next:
            slow = slow.next
            fast = fast.next.next
            if slow == fast:
                return True
        return False

 

Merge k Sorted Lists(合并 k 个排序链表)

 

中文版:https://leetcode-cn.com/problems/merge-k-sorted-lists/

优先级队列

时间复杂度:O(n∗log(k))O(n*log(k))O(n∗log(k)),n 是所有链表中元素的总和,k 是链表个数。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def mergeKLists(self, lists: List[ListNode]) -> ListNode:
        import heapq
        dummy = ListNode(0)
        p = dummy
        head = []
        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 dummy.next

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值