![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 93
啥都不懂的小程序猿
这个作者很懒,什么都没留下…
展开
-
LeetCode刷题——哈希表(python语言)
LeetCode刷题——哈希表(python语言)一、哈希表二、刷题2.1 存在重复元素给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。示例 1:输入:nums = [1,2,3,1]输出:true示例 2:输入:nums = [1,2,3,4]输出:false示例 3:输入:nums = [1,1,1,3,3,4,3,2,4,2]输出:true提示:1 <= nums.length &l原创 2022-03-12 01:02:00 · 483 阅读 · 0 评论 -
LeetCode刷题——分治(python语言)
LeetCode刷题——分治(python语言)一、分治分治就是分而治之,对于一个复杂的问题,划分为规模较小的相同的问题(相互独立,如果不独立,最好用动态规划),以便各个击破。典型的例子就是归并排序,现将数组不断平均划分,直到最后分为两个元素,比较大小,将求出的小规模的解合并为一个大规模的解,自底向上求出大规模问题的解。二、刷题2.1 将有序数组转换为二叉搜索树给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节原创 2022-03-07 14:53:58 · 880 阅读 · 0 评论 -
LeetCode刷题——字符串(python语言)
LeetCode——字符串(python语言)一、字符串1.1 字符串定义字符串就是一系列字符的连接。字符串可以遍历,每次遍历都是字符。1.2 字符串匹配二、刷题2.1 验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true解释:“amanaplanacanalpanama” 是回文串示例 2:输入:原创 2022-03-05 18:46:03 · 377 阅读 · 0 评论 -
LeetCode刷题——动态规划(python语言)
LeetCode刷题——动态规划(python语言)一、动态规划二、刷题2.1 最大子数组和给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23原创 2022-03-05 18:38:59 · 696 阅读 · 0 评论 -
LeetCode刷题——排序(python语言)
LeetCode刷题——排序(python语言)一、排序顾名思义,排序就是将数组按照从小到大的顺序排列。广义的排序分为内部排序方法和外部排序方法。排序的方法有很多种,常用的冒泡、选择、插入、希尔、归并、快速、堆、计数、桶、基数排序。按照时间复杂度划分:O(n2)O(n^2)O(n2):冒泡、选择、插入O(n∗log2n)O(n*log_2n)O(n∗log2n) :希尔、归并、快速、堆O(n)O(n)O(n):计数、桶、基数二、刷题2.1 排序数组给你一个整数数组 nums,请你将该原创 2022-03-03 15:52:36 · 1170 阅读 · 0 评论 -
LeetCode刷题——搜索(python语言)
LeetCode刷题——搜索(python语言)一、搜索搜索简单来说分为查找和遍历。查找分为有序查找(二分查找)和无序查找(顺序查找,二叉搜索树)。顺序查找:一个挨一个找,从头找到尾,属于暴力算法。效率低二叉搜素树,保证一个条件就是左子树的值小于根节点的值小于右子树的值。这样中序遍历获得从小到大的元素二分查找:前提是已经排好序,可以将待查找元素和中间位置元素比较,然后修改左右指针。遍历分为深度优先搜索(DFS)和广度优先搜索(BFS)。深度优先搜索(DFS)主要的遍历思想是栈(stac原创 2022-03-01 21:03:33 · 1127 阅读 · 0 评论 -
LeetCode刷题——双指针(python代码)
LeetCode刷题——双指针(python代码)一、双指针双指针通俗来说就是用两个变量存储数据,然后根据逻辑关系进行使用的一种思想。二、刷题2.1 反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]提示:链表中节点的数目范围是 [0, 5000]-5000 <=原创 2022-02-27 20:26:02 · 285 阅读 · 0 评论 -
LeetCode刷题——树(python语言)
LeetCode刷题——树(python语言)一、树二、刷题2.1 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。解法一:利用DFS(深度优先搜索),每次向下遍历,深度加一。设置变量temp记录当前节点深度将temp作原创 2022-02-25 17:03:02 · 1574 阅读 · 0 评论 -
LeetCode刷题——位运算(python语言)
LeetCode刷题——位运算(python语言)一、位运算1.1 与运算全为1,才为11.2 或预算有1,就是11.3 取反运算1为0,0为11.4 异或运算相同为0 ,相异为1二、刷题2.1 只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出:原创 2022-02-25 16:51:03 · 184 阅读 · 0 评论 -
LeetCode刷题——栈(python语言)
LeetCode刷题——栈(python语言)一、栈1.1 定义栈(Stack):也称堆栈。一种线性表数据结构,是一种只允许在表的一端进行插入和删除操作的线性表。我们把栈中允许插入和删除的一端称为[栈顶(top)];另一端则称为[栈底(bottom)]。当表中没有任何数据元素时,称之为[空栈]。栈的特点:线性表后进先出栈的存储方式有顺序栈和链式栈。1.2 栈的基本操作初始化空栈判断栈是否为空判断栈是否已满插入元素删除元素获取栈顶元素1.3 栈的顺序存储实现代码cl原创 2022-02-18 23:22:10 · 776 阅读 · 0 评论 -
LeetCode刷题——链表(python语言)
LeetCode刷题——链表(python语言)一、链表1.1 逻辑结构与存储结构1.1.1 逻辑结构逻辑结构:数据元素之间的逻辑关系集合、线性结构(一对一)、树形结构(一对多)、图结构(多对多)1.1.2 存储结构存储结构包括顺序存储、链式存储、索引存储、散列存储顺序存储(顺序表):逻辑上相邻的元素物理位置也相邻链式存储(单链表):逻辑上相邻的元素物理位置不一定相邻1.2 单链表1.2.1 单链表的定义带头节点的单链表(写代码方便)不带头结点的单链表(写代码麻烦)class L原创 2022-02-17 01:01:12 · 793 阅读 · 0 评论 -
LeetCode刷题——数组(python语言)
LeetCode刷题数组一、数组1.1 数组的定义数组是具有一定顺序关系的若干对象组成的集合,组成数组的对象称为数组元。其中向量对应一维数组,矩阵对应二维数组。1.2 数组的存储特点数组在内存中按照顺序连续存储二维数组的分配按照行(C,C++,C#)来分配数组名表示的是数组的首地址,是常量二、刷题2.1 两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对原创 2022-02-14 18:47:22 · 8809 阅读 · 0 评论