
零基础学数据结构
文章平均质量分 58
零基础学数据结构
怪我冷i
这个作者很懒,什么都没留下…
展开
-
LeetCode经典150题.274.H指数
给你一个整数数组citations,其中表示研究者的第i篇论文被引用的次数。计算并返回该研究者的 h。根据维基百科上h代表“高引用次数” ,一名科研人员的h是指他(她)至少发表了h篇论文,并且有h篇论文被引用次数大于等于h。如果h有多种可能的值,h是其中最大的那个。原创 2023-12-20 19:00:00 · 394 阅读 · 0 评论 -
LeetCode经典150题Golang版.55. 跳跃游戏
给你一个非负整数数组nums,你最初位于数组的。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回true;否则,返回false。原创 2023-12-22 00:15:00 · 392 阅读 · 0 评论 -
LeetCode经典150题Golang版.121. 买卖股票的最佳时机II
给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候只能持有股票。你也可以先购买,然后在出售。返回 你能获得的利润*。原创 2023-12-17 11:45:00 · 98 阅读 · 0 评论 -
LeetCode经典150题.121. 买卖股票的最佳时机
给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择买入这只股票,并选择在卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。原创 2023-12-17 00:30:00 · 100 阅读 · 0 评论 -
LeetCode经典150题Golang版.189. 轮转数组
给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。O(1)原创 2023-12-16 21:45:00 · 144 阅读 · 0 评论 -
169. 多数元素(majority-element)
给定一个大小为n的数组nums,返回其中的多数元素。多数元素是指在数组中出现次数⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。**进阶:**尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。原创 2023-11-25 00:00:29 · 242 阅读 · 0 评论 -
26. 删除有序数组中的重复项(remove-duplicates-from-sorted-array)
给你一个的数组nums,请你**** 删除重复出现的元素,使每个元素,返回删除后数组的新长度。元素的应该保持。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为knumsnumsknumsnumsnumsk如果所有断言都通过,那么您的题解将被。首先注意数组是有序的,那么重复的元素一定会相邻。要求删除重复元素,实际上就是将不重复的元素移到数组的左侧。考虑用 2 个指针,一个在前记作 p,一个在后记作 q,算法流程如下:1.比较 p 和 q 位置的元素是否相等。原创 2023-11-23 21:46:06 · 164 阅读 · 0 评论 -
leetcode.679.24点游戏
给定一个长度为4的整数数组cards。你有4张卡片,每张卡片上都包含一个范围在[1,9]的数字。您应该使用运算符和括号'('和')'将这些卡片上的数字排列成数学表达式,以获得值24。你须遵守以下规则:/-“12 + 12”如果可以得到这样的表达式,其计算结果为24,则返回true,否则返回false。原创 2022-11-07 22:44:39 · 984 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。:本题与主站 105 题重复:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/原创 2022-10-10 11:10:36 · 129 阅读 · 0 评论 -
大根堆与小根堆(java,c++,python)
Java 使用可方便实现大顶堆。为大根堆,r为小根堆。原创 2022-10-08 10:19:25 · 513 阅读 · 0 评论 -
leetcode.622. 设计循环队列(Design Circular Queue)
设计你的循环队列实现。循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。原创 2022-09-28 15:26:01 · 399 阅读 · 0 评论 -
leetcode.138.随机链表的复制
leetcode.138.随机链表的复制Java解法:时间复杂度O(n);解法一:使用hash存储原结点和克隆结点的映射关系,通过映射关系处理克隆结点的random指针空间复杂度O(n)java代码/*// Definition for a Node.class Node { int val; Node next; Node random; public Node(int val) { this.val = val; this原创 2021-08-12 12:30:42 · 227 阅读 · 0 评论 -
leetcode.671. 二叉树中第二小的节点
671. 二叉树中第二小的节点给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。更正式地说,root.val = min(root.left.val, root.right.val) 总成立。给出这样的一个二叉树,你需要输出所有节点中的**第二小的值。**如果第二小的值不存在的话,输出 -1 。示例 1:输入:root = [2,2,5,null,null,5,7]输出:5解释:最小原创 2021-07-27 00:55:24 · 182 阅读 · 0 评论 -
1893. 检查是否区域内所有整数都被覆盖
1893. 检查是否区域内所有整数都被覆盖给你一个二维整数数组 ranges 和两个整数 left 和 right 。每个 ranges[i] = [starti, endi] 表示一个从 starti 到 endi 的 闭区间 。如果闭区间 [left, right] 内每个整数都被 ranges 中 至少一个 区间覆盖,那么请你返回 true ,否则返回 false 。已知区间 ranges[i] = [starti, endi] ,如果整数 x 满足 starti <= x <= e原创 2021-07-23 11:55:03 · 109 阅读 · 0 评论 -
二分查找死循环问题
二分查找死循环问题看代码public class Solution_69 { public int mySqrt(int x) { // 特殊值判断 if (x == 0) { return 0; } if (x == 1) { return 1; } int left = 1; int right = x / 2;原创 2021-07-12 14:38:16 · 580 阅读 · 0 评论 -
leetcode.17.10. Find Majority Element LCCI
面试题 17.10. Find Majority Element LCCIA majority element is an element that makes up more than half of the items in an array. Given a positive integers array, find the majority element. If there is no majority element, return -1. Do this in O(N) time and O原创 2021-07-09 16:14:55 · 140 阅读 · 0 评论 -
01背包问题
0-1背包问题Reference: https://www.jianshu.com/p/a66d5ce49df5问题描述:0-1背包问题:给定n种物品和一背包。物品 i 的重量似乎 wi,其价值为 vi,背包的容量为 c。问应该如何选择装入背包中的物品,使得装入背包中物品的总价值最大?说实在的,书上讲的东西生涩难懂,我更偏向于看一些有趣的东西。我们来换一个风格来描述这一个问题。以下内容大部分来自**《算法图解》**一书。看完之后大有收获。另一种风格的描述:假设你是一个小偷,背着一个可装下4转载 2021-07-01 07:57:30 · 224 阅读 · 0 评论 -
leetcode.437. 路径总和 III (前缀和 + 回溯 + HashMap)
437. 路径总和 III给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / \ 5 -3 / \ \ 3原创 2021-06-28 16:35:26 · 167 阅读 · 1 评论 -
LeetCode背包问题---题目列表
LeetCode背包问题—动态规划01背包416. 分割等和子集474. 一和零494. 目标和完全背包1449. 数位成本和为目标值的最大数字322. 零钱兑换518. 零钱兑换 II279. 完全平方数原创 2021-06-07 00:16:04 · 2864 阅读 · 0 评论 -
342. 4的幂
342. 4的幂给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x示例 1:输入:n = 16输出:true示例 2:输入:n = 5输出:false示例 3:输入:n = 1输出:true提示:-231 <= n <= 231 - 1进阶:你能不使用循环或者递归来完成本题吗?代码与思路我们把思路转化成第一步,判断是否是2的幂原创 2021-05-31 11:28:40 · 125 阅读 · 0 评论 -
leetcode.异或题总结
leetcode.异或题总结表格如下题号题目名称题解通过率难度1442形成两个异或相等数组的三元组数目22978.5%中等810黑板异或游戏2058.3%困难1486数组异或操作63486.0%简单1310子数组异或查询48771.1%中等1720解码异或后的数组45287.1%简单1734解码异或后的排列35872.3%中等1829每个查询的最大异或值736原创 2021-05-18 13:52:03 · 202 阅读 · 0 评论 -
leetcode.993.二叉树的堂兄弟节点
993.二叉树的堂兄弟节点在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。示例 1:输入:root = [1,2,3,4], x = 4, y = 3输出:false示例 2:输入:root =原创 2021-05-17 16:38:56 · 185 阅读 · 0 评论 -
5742. 将句子排序
5742. 将句子排序一个 句子 指的是一个序列的单词用单个空格连接起来,且开头和结尾没有任何空格。每个单词都只包含小写或大写英文字母。我们可以给一个句子添加 从 1 开始的单词位置索引 ,并且将句子中所有单词 打乱顺序 。比方说,句子 "This is a sentence" 可以被打乱顺序得到 "sentence4 a3 is2 This1" 或者 "is2 sentence4 This1 a3" 。给你一个 打乱顺序 的句子 s ,它包含的单词不超过 9 个,请你重新构造并得到原本顺序的句原创 2021-05-16 01:06:42 · 254 阅读 · 0 评论 -
leetcode.2. 两数相加
leetcode.2. 两数相加两数相加#include <vector>#include <iostream>#include <unordered_map>using namespace std;/** * 单链表的定义 * Definition for singly-linked list. */struct ListNode { int val; ListNode* next; ListNode() : val(0)原创 2021-05-12 15:32:25 · 154 阅读 · 0 评论 -
leetcode.872.叶子相似的树
872. 叶子相似的树请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。示例 1:输入:root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,原创 2021-05-10 11:51:34 · 158 阅读 · 0 评论 -
leetcode.938. 二叉搜索树的范围和
leetcode.938. 二叉搜索树的范围和#include <iostream>#include <vector>#include <stack>using namespace std;struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) :原创 2021-04-27 12:27:53 · 120 阅读 · 0 评论 -
leetcode.783. 二叉搜索树节点最小距离(minimum-distance-between-bst-nodes)
783. 二叉搜索树节点最小距离给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。**注意:**本题与 530:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/ 相同示例 1:输入:root = [4,2,6,1,3]输出:1示例 2:输入:root = [1,0,48,null,null,12,49]输出:1提示:树中节点数目在范围 [2, 100] 内原创 2021-04-13 10:08:39 · 200 阅读 · 0 评论 -
leetcode.179.最大数(largest-number)
179.最大数给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。**注意:**输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:"210"示例 2:输入:nums = [3,30,34,5,9]输出:"9534330"示例 3:输入:nums = [1]输出:"1"示例 4:输入:nums = [10]输出:"10"提示:1 <= nums.length <=原创 2021-04-12 23:42:33 · 369 阅读 · 0 评论 -
数据结构与算法——红黑树(上)
为什么工程中都用红黑树这种二叉树?上两节,我们依次讲了树、二叉树、二叉查找树。二叉查找树是最常用的一种二叉树,它支持快速插入、删除、查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是O(logn)。不过,二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于log2n的情况,从而导致各个操作的效率下降。极端情况下,二叉树会退化为链表,时间复杂度会退化到O(n)。我上一节说了,要解决这个复杂度退化的问题,我们需要设计一种平衡二叉查找树,也就是今天要讲的这种数据结构。很多书籍原创 2021-04-09 21:51:46 · 280 阅读 · 0 评论 -
数据结构与算法——红黑树(下)
文章目录实现红黑树的基本思想基本操作插入操作的平衡调整CASE1CASE2CASE3附地址实现红黑树的基本思想不知道你有没有玩过魔方?其实魔方的复原解法是有固定算法的:遇到哪几面是什么样子,对应就怎么转几下。你只要跟着这个复原步骤,就肯定能将魔方复原。实际上,红黑树的平衡过程跟魔方复原非常神似,大致过程就是:遇到什么样的节点排布,我们就对应怎么去调整。只要按照这些固定的调整规则来操作,就能将一个非平衡的红黑树调整成平衡的。还记得我们前面讲过的红黑树的定义吗?今天的内容里,我们会频繁用到它,所以,我们现原创 2021-04-09 21:32:13 · 154 阅读 · 0 评论 -
leetcode.191. 位1的个数
191. 位1的个数编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。示例 1:输入:000000原创 2021-03-29 16:00:58 · 99 阅读 · 0 评论 -
leetcode.190. 颠倒二进制位
190. 颠倒二进制位颠倒给定的 32 位无符号整数的二进制位。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。进阶:如果多次调用这个函数,你将如何优化你的算法?示例 1:原创 2021-03-29 15:35:33 · 171 阅读 · 0 评论 -
leetcode.341. 扁平化嵌套列表迭代器
文章目录341. 扁平化嵌套列表迭代器模板javacpp思路与代码方法一:方法三:cpp深度优先搜索c语言深度优先搜索方法四:栈(面试的时候需要写出来)测试NestedInteger接口类SingletonInteger 实现类NestedList 实现类NestedIterator类测试类341. 扁平化嵌套列表迭代器给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。示例 1:原创 2021-03-23 17:20:20 · 214 阅读 · 0 评论 -
leetcode.191.位1的个数
文章目录leetcode.191.位1的个数代码与思路参考leetcode.191.位1的个数编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的原创 2021-03-22 18:28:33 · 118 阅读 · 0 评论 -
leetcode.480. 滑动窗口中位数(sliding-window-median)
文章目录480. 滑动窗口中位数方法一:双优先队列 + 延迟删除Solution 类DualHeap 类480. 滑动窗口中位数参考leetcode.295. 数据流的中位数方法一:双优先队列 + 延迟删除Solution 类class Solution { public double[] medianSlidingWindow(int[] nums, int k) { DualHeap dh = new DualHeap(k); for (int i =原创 2021-02-03 23:55:38 · 253 阅读 · 0 评论 -
leetcode.295. 数据流的中位数
295. 数据流的中位数方法一:优先队列题目import java.util.PriorityQueue;public class MedianFinder { /** * 当前大顶堆和小顶堆的元素个数之和 */ private int count; private PriorityQueue<Integer> maxheap; private PriorityQueue<Integer> minheap;原创 2021-02-03 23:40:07 · 123 阅读 · 0 评论 -
leetcode.等价多米诺骨牌对的数量
1128. 等价多米诺骨牌对的数量中文给你一个由一些多米诺骨牌组成的列表 dominoes。如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。形式上,dominoes[i] = [a, b] 和 dominoes[j] = [c, d] 等价的前提是 a==c 且 b==d,或是 a==d 且 b==c。在 0 <= i < j < dominoes.length 的前提下,找出满足 dominoes[i] 和 domin原创 2021-01-27 15:07:26 · 192 阅读 · 1 评论 -
leetcode.860. 柠檬水找零
860. 柠檬水找零在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。示例 1:输入:[5,5,5,10,20]输出:true解释:前 3 位顾客那里,我们按顺序收取 3 张 5 美原创 2020-12-31 11:24:13 · 145 阅读 · 0 评论 -
leetcode.1046. 最后一块石头的重量
文章目录1046. 最后一块石头的重量代码与思路javacppc语言java(手写堆,不用API)1046. 最后一块石头的重量We have a collection of stones, each stone has a positive integer weight.Each turn, we choose the two heaviest stones and smash them together. Suppose the stones have weights x and y with x原创 2020-12-30 17:32:39 · 292 阅读 · 0 评论 -
leetcode.451. 根据字符出现频率排序
451. 根据字符出现频率排序Given a string, sort it in decreasing order based on the frequency of characters.Example 1:Input:"tree"Output:"eert"Explanation:'e' appears twice while 'r' and 't' both appear once.So 'e' must appear before both 'r' and 't'. There原创 2020-12-24 00:16:16 · 144 阅读 · 0 评论