IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 手把手带你刷Leetcode力扣 学习总结 -> 正文阅读

[数据结构与算法]手把手带你刷Leetcode力扣 学习总结

1. 总体规划

在这里插入图片描述

2. 算法复杂度

2.1 时间复杂度

  1. 什么是时间复杂度?
    算法的执行效率
    算法的执行时间与算法的输入值之间的关系
  2. 常见时间复杂度案例分析
    在这里插入图片描述
    O(1):与num无关
    在这里插入图片描述
    O(n)
    在这里插入图片描述
    O(log n):2的n次方等于num。典型:二分查找
    在这里插入图片描述
    O(m+n):循环并列,相加
    在这里插入图片描述
    O(nlogn):循环嵌套,相乘。典型:排序
    在这里插入图片描述
    O( n 2 n^2 n2)
  3. 常见时间复杂度对比
    在这里插入图片描述

2.2 空间复杂度

  1. 什么是空间复杂度?
    算法的存储空间与算法的输入值之间的关系
    占空间的都是声明出来的变量

  2. 常见空间复杂度案例分析
    在这里插入图片描述
    变量是常量:O(1)
    在这里插入图片描述
    变量是array、list等,递归:O(n)

  3. 常见空间复杂度对比
    在这里插入图片描述
    时间和空间只能二选一
    面试时:和面试官讲清楚
    工作时:时间>空间

3. 数据结构

3.1 数组【Array】

数组:在连续的内存空间中,存储一组相同类型的元素。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

特点: 适合读,不适合写------读多写少

3.1.1 Python常用操作

  1. 创建数组
    在这里插入图片描述

  2. 添加或插入元素
    在这里插入图片描述
    中间添加,插入:O(n)
    尾部添加,添加:O(1)

  3. 访问元素
    在这里插入图片描述

  4. 更新元素
    在这里插入图片描述

  5. 删除元素
    在这里插入图片描述
    remove:查找所需要的元素,然后删除,O(n)
    pop(i):删除i索引的值,但剩余元素需要移位,O(n)
    pop():删除最后一个,O(1)

  6. 获取数组长度
    在这里插入图片描述

  7. 遍历数组
    在这里插入图片描述

  8. 查找某个元素
    在这里插入图片描述

  9. 数组排序
    在这里插入图片描述
    a.sort(),会直接改变a
    sorted(a),不会改变

3.1.2 Java常用操作

3.1.3 练习题

485 最大连续1的个数
在这里插入图片描述
在这里插入图片描述

283 移动零
在这里插入图片描述
在这里插入图片描述

class Solution(object):
    def moveZeroes(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        for i in nums:
            if i==0:
                nums.remove(0)
                nums.append(0)
                
        return nums

27 移除元素
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

class Solution:
    def removeElement(self, nums, val):
        if nums is None or len(nums)==0:
            return 0
        l,r = 0, len(nums)-1
        while l<r:
            while(l<r and nums[l] != val):
                l=l+1
            while(l<r and nums[r] == val):
                r=r-1
            nums[l],nums[r] = nums[r],nums[l]
        return l if nums[l]==val else l+1
class Solution:
    def removeElement(self, nums, val):
        for i in range(len(nums)-1,-1,-1):
        if nums[i] == val:
        nums.remove(nums[i])

3.2 链表【Linked List】

在这里插入图片描述
单端链表 √
双端链表 leetcode一般不用
在这里插入图片描述
特点: 适合写,不适合读------读少写多

3.2.1 Python常用操作

  1. 创建链表
    在这里插入图片描述
  2. 添加元素
    在这里插入图片描述
  3. 访问元素
    在这里插入图片描述
  4. 搜索元素:返回索引
    在这里插入图片描述
  5. 更新元素
    在这里插入图片描述
  6. 删除元素
    在这里插入图片描述
  7. 长度
    在这里插入图片描述

3.2.2 Java常用操作

3.2.3 练习题

203 移除链表元素
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

class Solution:
    def removeElements(self, head: ListNode, val: int) -> ListNode:
        dummy = ListNode(0)
        dummy.next = head
        prev = dummy

        while head is not None:
            if head.val == val:
                prev.next = head.next
                head = head.next
            else:
                prev = head
                head = head.next 
        return dummy.next

206 反转链表
在这里插入图片描述
在这里插入图片描述

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        dummy = ListNode(0)
        dummy.next = head
        while head is not None and head.next is not None:
            dnext = dummy.next
            hnext = head.next
            dummy.next = hnext
            head.next = hnext.next
            hnext.next = dnext

        return dummy.next

3.3 队列【Queue】

在这里插入图片描述
在这里插入图片描述
插入删除只能在头尾,所以时间复杂度:O(1)

3.3.1 Python常用操作

  1. 创建队列
    在这里插入图片描述
  2. 添加元素
    在这里插入图片描述
  3. 获取即将出队的元素
    在这里插入图片描述
  4. 删除即将出队的元素
    在这里插入图片描述
  5. 判断队列是否为空
    在这里插入图片描述
  6. 队列长度
    len(queue)
  7. 遍历队列
    在这里插入图片描述

3.3.2 Java常用操作

3.3.3 练习题

933 最近的请求次数
在这里插入图片描述
在这里插入图片描述

class RecentCounter:

    def __init__(self):
        self.q = deque()
    def ping(self, t: int) -> int:
        self.q.append(t)
        while len(self.q)>0 and t-self.q[0]>3000:
            self.q.popleft()
        return len(self.q)

3.4 栈【Stack】

在这里插入图片描述
在这里插入图片描述

3.4.1 Python常用操作

  1. 创建栈
    在这里插入图片描述

  2. 添加元素
    在这里插入图片描述

  3. 查看栈顶元素-即将出栈的元素
    在这里插入图片描述

  4. 删除栈顶元素
    在这里插入图片描述

  5. 栈的大小
    在这里插入图片描述

  6. 栈是否为空
    在这里插入图片描述

  7. 栈的遍历
    在这里插入图片描述

3.4.2 Java常用操作

3.4.3 练习题

20 有效的括号
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

class Solution:
    def isValid(self, s: str) -> bool:
        if len(s)==0:
            return True
        stack= []
        for c in s:
            if c == "(" or c == "[" or c == "{":
                stack.append(c)
            else:
                if len(stack) == 0:
                    return False
                else:
                    temp = stack.pop()
                    if c == ")":
                        if temp != "(":
                            return False
                    elif c == "]":
                        if temp != "[":
                            return False 
                    elif c == "}":
                        if temp != "{":
                            return False   

        return True if len(stack) == 0 else False

496 下一个更大元素(栈+队列)
加粗样式
在这里插入图片描述
在这里插入图片描述

class Solution:
	def nextGreaterElement(self,nums1: List[int],nums2: List[int]) -> List[int]:
		res =[]
		stack = []
		for num in nums2:
			stack.append( num)
		for num in nums1:
			temp =[]
			isFound = False
			nextMax = -1
			while ( len(stack) != 0 and not isFound ) :
				top = stack.pop()
				if top > num:
					nextMax = top
				elif top ==num :
					isFound = True
				temp.append( top)
			res.append( nextMax)
			while len(temp) != 0:
				stack.append(temp. pop( ))
		return res

3.5 哈希表【Hash Table】

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.5.1 Python常用操作

  1. 创建哈希表:数组或字典
    在这里插入图片描述
  2. 添加元素
    在这里插入图片描述
  3. 删除元素
    在这里插入图片描述
  4. 修改元素
    在这里插入图片描述
  5. 获取key的值
    在这里插入图片描述
  6. 检查key是否存在
    在这里插入图片描述
  7. 哈希表长度
  8. 哈希表是否还有元素
    在这里插入图片描述

3.5.2 Java常用操作

3.5.3 练习题

217 存在重复元素
389 找不同
496 下一个更大元素

3.6 集合【Set】

无序 不重复
主要作用:
检查某一个元素是否存在
重复元素

在这里插入图片描述
在这里插入图片描述

3.6.1 Python常用操作

  1. 创建
  2. 添加元素
  3. 删除元素
  4. 修改元素
  5. 获取key的值
  6. 检查key是否存在
  7. 哈希表长度
  8. 哈希表是否还有元素

3.6.2 Java常用操作

3.6.3 练习题

3.7 树【Tree】

3.7.1 Python常用操作

  1. 创建
  2. 添加元素
  3. 删除元素
  4. 修改元素
  5. 获取key的值
  6. 检查key是否存在
  7. 哈希表长度
  8. 哈希表是否还有元素

3.7.2 Java常用操作

3.6.3 练习题

3.8 堆【Heap】

  1. 创建
  2. 添加元素
  3. 删除元素
  4. 修改元素
  5. 获取key的值
  6. 检查key是否存在
  7. 哈希表长度
  8. 哈希表是否还有元素

3.8.1 Python常用操作

3.8.2 Java常用操作

3.8.3 练习题

3.9 图【Graph】

  1. 创建
  2. 添加元素
  3. 删除元素
  4. 修改元素
  5. 获取key的值
  6. 检查key是否存在
  7. 哈希表长度
  8. 哈希表是否还有元素

3.9.1 Python常用操作

3.9.2 Java常用操作

3.9.3 练习题

4. 算法

参考链接:手把手带你刷Leetcode力扣

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-07 00:06:15  更:2021-07-07 00:07:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 16:37:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码