leetcode
文章平均质量分 62
小小小绿叶
这个作者很懒,什么都没留下…
展开
-
python 前缀和总结
前缀和是数据结构与算法中比较重要的知识,前缀和经常可以结合哈希表解决很多有意思的问题。为了方便学习,在这里总结leetcode中出现的前缀和问题。525. 连续数组给定一个二进制数组 nums (只含有0,1), 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。示例 1:输入: nums = [0,1]输出: 2说明: [0, 1] 是具有相同数量0和1的最长连续子数组。示例 2:输入: nums = [0,1,0]输出: 2说明: [0, 1] (或 [1, 0原创 2021-06-03 11:18:54 · 4049 阅读 · 2 评论 -
python 数组中两个数的最大异或值
给你一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n 。进阶:你可以在 O(n) 的时间解决这个问题吗?示例 1:输入:nums = [3,10,5,25,2,8]输出:28解释:最大运算结果是 5 XOR 25 = 28.这道题比较有意思,用到前缀树与贪心思想将复杂度降到O(n)1.构建二进制前缀树具体来说就是利用数的二进制表示,从高位到低位构建一棵树(因为只有0和1 两个值,所以是一棵二叉树),每个从根节点到叶原创 2021-05-17 11:13:53 · 854 阅读 · 1 评论 -
python 最小堆最大堆
堆本质是完全二叉树,最小堆要求节点元素不大于左右叶子节点元素,最大堆要求节点元素不小于左右叶子节点元素。下面通过例子来讲解最大堆。给定一个列表array=[16,7,3,20,17,8],对其进行堆排序。首先根据该数组元素构建一个完全二叉树,得到根据最大堆的定义要求,我们需要让节点元素不小于左右叶子节点元素,所以我们从最后一个非叶节点开始依次向上调整元素位置。构造初始堆,则从最后一个非叶节点开始调整,调整过程如下:第一步: 初始化大顶堆(从最后一个有子节点开始往上调整最大堆)20和16交换后原创 2021-05-15 13:44:14 · 570 阅读 · 0 评论 -
二叉搜索树(寻找,插入,删除)
二叉搜索树二叉搜索树是特殊的二叉树。若一颗二叉树,它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 我们把这样的二叉树成为二叉搜索树,它的左、右子树也分别为二叉搜索树。二叉搜索树的例子:二叉搜索树的查找给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。如题返回解题思路:给定二叉搜索树,我们只需要在二叉搜索树的结构里原创 2021-03-18 11:17:18 · 760 阅读 · 0 评论 -
leetcode---92.反转链表II
题目:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL方法1:用数组保存链表,通过索引直接调换需要翻转的头尾值class Solution: ...原创 2020-04-18 16:45:52 · 182 阅读 · 0 评论 -
leetcode---72编辑距离
题目:给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:1.插入一个字符2.删除一个字符3.替换一个字符解题思路:我们需要运用题目中的三种操作来把word1转换成word2。首先,分析一下这3种操作。假设给定A,B两个单词,那对于A,B来说,只需要在A上进行操作,最终让A=B即可。我们用D...原创 2020-04-06 16:53:45 · 402 阅读 · 0 评论 -
leetcode---42.接雨水
题目:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)解题思路:黑色看成墙,宽度为1,给定数组,每个数代表从左到右墙的高度,雨滴的个数其实就是上图蓝色正方形的个数。解法一:按行求开始的想法比较暴力且...原创 2020-04-04 16:19:02 · 661 阅读 · 0 评论 -
leetcode---生命游戏
题目:生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:1.如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;...原创 2020-04-02 11:15:00 · 291 阅读 · 0 评论 -
leetcode----快速排序
原理介绍假设我们需要对数组Array=[2,5,1,3,7,6,4]进行排序。首先我们把数组第一个元素作为基准数。然后,我们从右向左分别与基准数比较,找到比基准数小的索引;再从左向右分别于基准数比较,找到比基准数大的索引。找到两个索引后,对调两索引的元素。举例子,我们看Array,把左右两边数的索引分别设为i=1,j=len(Array)-1,从右往左与2作比较,发现1小于2,再从左往右,发现5...原创 2020-04-01 10:08:16 · 385 阅读 · 0 评论