随笔分类 - 算法学习
python中的堆
摘要:在Python中,堆(Heap)是一种特殊的完全二叉树结构,满足以下特性: 最大堆(Max Heap):父节点的值大于或等于子节点的值。 最小堆(Min Heap):父节点的值小于或等于子节点的值。 Python标准库 heapq 提供了一个 最小堆 的实现,虽然没有直接提供最大堆的实现,但是可以通
关于递归
摘要:递归是一个非常重要且常用的编程思想,尤其在树、图、动态规划等问题中非常有用。它的核心是:将问题分解为子问题,通过递归的方式解决更小的子问题,最终汇聚成整体的解答。 如果你对递归函数感到陌生,或者不确定如何编写一个递归函数,可以通过以下步骤逐步建立递归的理解和技巧。 递归的基本结构 递归函数通常有两个
python中的列表
摘要:在刷算法题时,Python 的列表(list)是非常常用的数据结构。列表的操作灵活且功能丰富,非常适合用来处理数组、队列、堆栈等问题。以下总结了常用的列表语法和在算法题中会用到的场景: 1. 列表的创建 直接创建 lst = [1, 2, 3, 4] 列表推导式 squares = [x ** 2
python中的队列
摘要:在 Python 中,队列(Queue)通常使用 collections.deque 来实现,因其提供了高效的从两端添加和删除元素的操作。队列通常遵循 先进先出(FIFO) 的原则,也就是最先插入的元素最先被移除。 队列的基本操作: append(x): 将元素 x 加入队列的尾部。 popleft
排序算法模板--python版
摘要:在刷算法题时,排序是一个非常常见的操作。Python 提供了多种排序算法的实现方式,而在一些经典的算法题中,我们需要手动实现不同的排序算法以符合题目要求。以下是一些常见的排序算法模板,包含了 冒泡排序、选择排序、插入排序、快速排序、归并排序 和 堆排序,这些算法的模板通常会在刷题中频繁用到。 1.
python中的图
摘要:在 Python 中,图(Graph)是一个非常重要的数据结构,特别是在刷算法题时。图有许多类型(如有向图、无向图、有权图、无权图等),并且涉及的算法(如深度优先搜索、广度优先搜索、最短路径等)都非常常见。以下是 Python 中常见的图的语法,尤其是刷算法题时用到的技巧。 1. 图的基本定义 图通
python中的二叉树
摘要:在刷算法题中,二叉树是常见的题型,掌握二叉树的基本语法和常见操作是非常重要的。以下是一些在Python中常用的二叉树语法及操作,特别是刷算法题时用到的。 1. 二叉树的定义: 首先定义二叉树的节点结构。每个节点通常有三个属性:val(节点的值),left(左子节点),right(右子节点)。 # D
python中的队列
摘要:在 Python 中,队列(Queue)是一种常见的数据结构,特别是在刷算法题时经常被用到。以下是队列相关的基础语法及其在算法题中的应用总结。 1. 队列的基本定义 队列遵循 FIFO(先进先出) 原则,可以通过以下方式实现: 1) collections.deque deque 是双端队列,支持快
python中的链表
摘要:在 Python 中,链表不是内置的数据结构,但可以通过类的方式实现自定义链表。以下是链表在刷算法题中常用的语法和操作方法。 1. 定义链表节点 链表节点是一个包含值和指向下一个节点的指针的结构: class ListNode: def __init__(self, val=0, next=None
python中的栈
摘要:在 Python 中,栈是一种数据结构,常用于需要遵循 后进先出(LIFO) 原则的操作。在刷算法题时,栈常用来解决括号匹配、单调栈、深度优先搜索等问题。 以下是 Python 中栈的相关语法和常用操作。 栈的实现方式 Python 中可以使用以下两种方式实现栈: 使用列表 (list)。 使用 c
python中的优先队列
摘要:在 Python 中,优先队列(Priority Queue)是一个可以随时获取队列中最大(或最小)元素的数据结构。Python 的标准库 heapq 提供了一个实现最小堆的优先队列,默认情况下是最小堆,但可以通过一些技巧来实现最大堆。优先队列在算法中常用于求解最短路径、合并有序链表、求解 k 个最
python中的序列结构《增删改查》的复杂度
摘要:在 Python 中,不同的序列数据结构(如 list、tuple、set、dict 等)对增、删、改、查操作的时间复杂度不同。下面是对常见数据结构的总结,按操作类型(增、删、改、查)分析它们的时间复杂度: 1. list(列表) 查找操作(如 in 或 index()): 时间复杂度:O(n) 原
python中的dict()
摘要:在 Python 中,dict() 是创建字典的内置函数,字典是一种键值对(key-value pair)的数据结构。由于字典具有高效的键值查找、插入和删除操作,在 LeetCode 刷题中非常常用,尤其是处理映射关系、快速查找、计数、前缀匹配等问题时。 基本特性 键值对存储:字典中的每个元素是一个
python中的set()
摘要:在 Python 中,set() 是用来创建集合的内置函数。集合是一个无序且不重复的元素集合,在 LeetCode 刷题中经常用来处理去重、集合操作(如交集、并集、差集)、快速查找等问题。 基本特性 无序性:集合中的元素没有顺序。 不重复性:集合会自动去除重复元素。 可变性:集合本身可以修改,但其中
Leecode热题100——1.哈希
摘要:1.两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,
ACW--基础语法1(快排,归并,二分)
摘要:1.快排 2.归并 3.二分 通过与中间值mid比较,选择左边或是右边,就是二分 具有 单调性的一定可以使用二分法解决 没有单调性,有时候也可以用二分 3.1整数二分 划分思路: 整数二分有两个模板,一个是区间[l,r]被划分成[l,mid]和[mid+1,r]时使用的,还有一个是区间[l,r]被划
常用算法模板
摘要:快速排序 def quick_sort(arr): if len(arr) <= 1: # 基本情况:如果数组为空或只有一个元素,则返回 return arr else: pivot = arr[0] # 选择基准值(可以选择第一个元素) less_than_pivot = [x for x in
283. 移动零
摘要:283. 移动零 自己的 思路是双指针,右指针用来找非零元素,找到后赋值给左指针,保证左指针的左面都是非零元素。遍历到最后,让左指针本身和右边全为零即可 class Solution { public void moveZeroes(int[] nums) { int i = 0; int j =
88.合并两个有序数组
摘要:非递减顺序,即非严格递增序列 自己没写出来 class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int tail1 = m-1; int tail2 = n-1; int tail = nums1.
75.颜色分类
摘要:自己的思路: 思路和移动零一样,只是进行了两次移动,第一次为”移动2“,第二次为倒着的”移动0“(将0全部移动到最前面),中间自然会剩下1 自己的代码 class Solution { public static void sortColors(int[] nums) { // ”移动2“ int