首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
数据结构+算法
Forlogen
创建于2021-07-05
订阅专栏
有关数据结构和算法的基础介绍,以及LeetCode相关题目
等 1 人订阅
共204篇文章
创建于2021-07-05
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
98 - 验证二叉搜索树 - python + Java
给定一个二叉树,判断其是否是一个有效的二叉搜索树。节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。解释: 输入为: [5,1,4,null,null,3,6]。二叉树遍历性质的应用:根据二叉搜索树的定义以及二叉树的...
94 - 二叉树的中序遍历 - python
给定一个二叉树,返回它的中序 遍历。二叉树的中序遍历顺序为:左- 根 - 右,最常用的是使用递归来进行求解,递归过程是:遍历左子树 - 打印当前结点 - 遍历右子树 ,递归终止条件是root == None。inOrder(root.res.append(root.inOrder...
86 - 分隔链表 - python
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。根据题目可知,最后的链表中所有小于 x 的节点都在大于或等于 x 的节点之前,而且必须保留元素之间的相对关系。例如对于1->4->3-...
82 - 删除排序链表中的重复元素 II - python
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。这道题和83题相同之处在于,都是给一个排序链表。要求删除链表中重复的元素;不同之处在于,83题要求重复的元素只出现一次,而该题则要求如果元素有重复则全部删除。首先新建结点拼接到链表头部,设置指针p指...
83 - 删除排序链表中的重复元素 - python
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。如果不同,则继续往后,更新cur = cur.next如果相同,则执行cur.next = cur.next.while cur and cur.if cur.next.val == cur.cur.next = cu...
75 - 颜色分类 - python + Java
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。题目要求对给定的数组按照给定的顺序原地...
34 - 在排序数组中查找元素的第一个和最后一个位置 - python
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值,返回 [-1, -1]。你的算法时间复杂度必须是 O(log n) 级别。依据于之前所做的题目,如果忽略对于时间复杂度的控制,采用暴力的方法是...
23 - 合并K个排序链表 - python
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。题目要求合并给定的K个排序链表,K = 0,1, …, n,且每个链表中的元素可能有重复值。暴力法:首先遍历K个链表的每个结点,同时使用数组存储结点的值。然后将数组中的元素进行排序,最后使用排序后的数组构建结果...
[快慢指针]19 - 删除链表的倒数第N个节点 - python + Java
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。 如果不要求使用一趟扫描就实现结点的删除,暴力的方法可以先读取...
81 - 搜索旋转排序数组Ⅱ - python
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。这道题相比于33 - 搜索旋转数组 - ...
33 - 搜索旋转数组 - python
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂...
80 - 删除排序数组中重复的元素 - python
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2,...
70 - 爬楼梯 - python
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。注意:给定 n 是一个正整数。解释: 有两种方法可以爬到楼顶。1. 2. 解释: 有三种方法可以爬到楼顶。1. 2. 3. F(n)=F(n−1)+F(n−2),因此可以使用斐波那契数列的公式进行求解...
67 - 二进制求和 - python
给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。题目要求两个字符串表示的二进制数相加后的结果,结果同样使用二进制表示。因为两个字符串不一定等长,而且我们需要从后往前依次计算相加结果。a.b.res.insert(0, '{}'.res...
66 - 加一 - python
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。解释: 输入数组表示数字 123。解释: 输入数组表示数字 4321。题目给定的非负整数以数组的形式存...
58 - 最后一个单词的长度 - python
给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0 。一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。if len(s.s = s.str...
[动态规划] 53 -最大子序和 - Java
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。int len = nums.return Collections.max(Arrays.由于dp[i]的值只和dp[...
35 - 搜索插入位置 - python
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。给定一个无重复元素的排序数组,题目要求找到能插入target的位置索引。O(n)。return nums.
31 - 下一个排列 - python
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。根据题意可知,题目给定了一个数字...
21 -合并两个有序链表 - python
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。根据题目的描述可知,给定的两个链表本身就是递增有序的。..p.val < q.p.val<q...q.val < p.q.val<p.# Definition for singly-lin...
下一页