数据结构与算法刷题专栏
文章平均质量分 71
数据结构+算法
不会code的菜鸟
这个作者很懒,什么都没留下…
展开
-
LeetCode 【数据结构与算法专栏】【链表】
刷题笔记链表leetcode专栏leetcode 203 移除链表元素leetcode 707 设计链表leetcode 206 翻转链表leetcode 24 两两交换链表中的节点leetcode 19 删除链表的倒数第 N 个结点leetcode 160 链表相交leetcode 142 环形链表 IIleetcode 328 奇偶链表leetcode 234 回文链表leetcode 21 合并两个有序链表leetcode 2 两数相加leetcode 430 扁平化多级双向链表leetcode 13原创 2022-12-31 23:42:02 · 856 阅读 · 1 评论 -
LeetCode 【数据结构与算法专栏】【数组】
刷题笔记数组leetcode专栏leetcode 704 二分查找leetcode 27 移除元素leetcode 26 删除有序数组中的重复项leetcode 80 删除有序数组中的重复项 IIleetcode 283 移动零leetcode 75 颜色分类leetcode 215 数组中的第K个最大元素leetcode 167 两数之和 IIleetcode 11 盛最多水的容器leetcode 125 验证回文串leetcode 345 反转字符串中的元音字母leetcode 844 比较含退格的字符原创 2022-12-31 23:32:03 · 784 阅读 · 0 评论 -
Catch That Cow POJ 3278 (BFS问题)
问题链接http://poj.org/problem?id=3278摘自王道笔试指南#include <iostream>#include <string>#include <vector>#include <queue>using namespace std;const int MAXN = 100001;vector<bool> inq(MAXN, false);struct Status{ int loc; i原创 2022-02-19 21:45:57 · 466 阅读 · 0 评论 -
PAT 1076 Forwards on Weibo
https://pintia.cn/problem-sets/994805342720868352/problems/994805392092020736#include <iostream>#include <vector>#include <queue>using namespace std;const int MAXN = 1010;struct Node { int v; int layer; Node(int _v, in原创 2022-02-17 17:59:07 · 484 阅读 · 0 评论 -
0-1背包问题—— 动态规划,二维dp和一维dp
刷题笔记0-1背包问题动态规划0-1背包问题动态规划有关于动态规划可以解决0-1背包问题的证明,即证明原问题的最优解包含子问题的最优解,可以采用反证法来证明。(教材上有)dp数组的定义以及含义:首先采用二维dp,我们需要同时考虑value和weight两个变量。dp[i][j] 表示从下标为[1-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。(为了回溯结果方便,物品下标编号从1到n)dp状态转移公式:对于第i个物品,决策只有两种,一种是第i个物品放入背包x[i] = 1,这时dp[i原创 2022-01-14 12:54:40 · 1372 阅读 · 0 评论 -
0-1背包问题——暴力搜索、回溯法和剪枝限界
刷题笔记动态规划0-1背包问题回溯法和剪枝限界动态规划0-1背包问题回溯法和剪枝限界运用回溯法解题通常包含以下三个步骤:1、针对所给问题,定义问题的解空间;2、确定易于搜索的解空间树;3、以深度优先的方式搜索解空间树,并在搜索过程中用剪枝函数避免无效搜索0-1背包问题,对于每一个物品只有两种决策,一种是该物品装入背包,x[i] = 1,另一种是该物品不装入背包,x[i] = 0。所以对于物品编号1-n所形成的解空间树的高度是n+1(包含叶子节点)。叶子节点最下面一层节点的数量是2^n,表示该问原创 2022-01-14 11:23:41 · 1613 阅读 · 0 评论 -
LeetCode 【数据结构与算法专栏】【贪心】
刷题笔记贪心算法leetcode专栏leetcode 455 分法饼干leetcode 376 摆动序列leetcode 53 最大子数组和leetcode 122 买卖股票的最佳时机 IIleetcode 55 跳跃游戏leetcode 45 跳跃游戏 IIleetcode 1005 K次取反后最大化的数组和leetcode 134 加油站leetcode 135 分发糖果leetcode 860 柠檬水找零leetcode 406 根据身高重建队列leetcode 452 用最少数量的箭引爆气球leet原创 2022-01-11 11:23:41 · 197 阅读 · 0 评论 -
leetcode 哈希表相关算法刷题笔记
刷题笔记hash table 算法leetcode专栏leetcode 242 有效的字母异位词leetcode 383 赎金信leetcode 49 字母异位词分组leetcode 138 复制带随机指针的链表leetcode 1002 查找共用字符leetcode 349 两个数组的交集leetcode 350 两个数组的交集IIleetcode 202 快乐数leetcode 1 两数之和leetcode 15 三数之和leetcode 18 四数之和leetcode 454 四数相加IIhash原创 2022-01-06 19:26:35 · 459 阅读 · 0 评论 -
LeetCode 【数据结构与算法专栏】【二叉树】
刷题笔记二叉树算法leetcode专栏leetcode 94 二叉树的中序遍历leetcode 144 二叉树的前序遍历leetcode 145 二叉树的后序遍历leetcode 102 二叉树的层序遍历leetcode 107 二叉树的层序遍历IIleetcode 119 二叉树的右视图leetcode 637 二叉树的层平均值leetcode 429 N叉树的层序遍历leetcode 515 在每个树行中找到最大值leetcode 116 填充每个节点的下一个右侧节点指针leetcode 117 填充每原创 2022-01-05 17:19:27 · 462 阅读 · 1 评论 -
LeetCode 【数据结构与算法专栏】【回溯算法】
leetcode 77 组合给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3],[1,4], ]示例 2:输入:n = 1, k = 1 输出:[[1]]提示:1 <= n <= 201 <= k <= n来源:力扣(LeetCode)链接:https:/原创 2022-01-03 23:17:28 · 749 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3方法一:将数组进行排序,需要O(nlogn)的时间,然后再用两个指针扫描一遍数组即可。这里排序的时候,刚开始直接用的sort函数,之后尝试自己写了一个简单的快排逻辑。int Partition(vector<原创 2021-07-25 02:10:38 · 124 阅读 · 0 评论 -
未排序数组中累加和为给定值的最长子数组系列问题
摘自:程序员代码面试指南给定一个无序数组arr,其中元素可正、可负、可0。给定一个整数K,求arr所有的子数组中累加和为K的最长数组长度。解答:s(i)代表子数组arr[0…i]所有元素的累加和,那么子数组arr[j…i](0 <= j <= i < arr.length)的累加和为s(i) - s(j-1)。原问题解法只遍历一次arr,具体过程为:1、设置变量sum = 0,表示从0位置开始一直加到i位置所有元素的和。设置变量len = 0,表示累加和为K的最长子数组长度。设置原创 2020-12-14 22:08:23 · 303 阅读 · 0 评论 -
leetcode 111 二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。参考二叉树的最大深度,传送门:https://blog.csdn.net/CLZHIT/article/details/111118994参考来自微信公众号代码随想录的文章:二叉树的最小深度解法一:递归解法求二叉树的最小深度和求二叉树的最大深度的差别主要在于处理左右孩子不为空的逻辑。class Solution {public: int minDepth(T原创 2020-12-13 21:51:42 · 159 阅读 · 0 评论 -
剑指offer34 二叉树中和为某一值的路径
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。此题的解法和思路和leetcode 113 路径之和是相同的:移步:https://blog.csdn.net/CLZHIT/article/details/103935351/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left原创 2020-12-13 20:50:27 · 120 阅读 · 0 评论 -
leetcode 145 二叉树的后续遍历
给定一个二叉树,返回它的 后序 遍历。解法二:非递归形式采用两个栈实现后续遍历的过程,具体流程如下:1、申请一个栈,记为sck1,将头节点压入栈sck1中。2、从sck1中弹出的节点记为tmpNode,然后依次将tmpNode的左孩子和右孩子节点压入sck1中。3、在整个过程中,每次从sck1中pop出的节点都放入sck2中。4、不断重复步骤2和步骤3,直到sck1为空,过程停止。5、从sck2中依次弹出节点并存储,其结果就是后续遍历的结果。class Solution {public:原创 2020-12-13 19:25:41 · 91 阅读 · 0 评论 -
leetcode 92 二叉树的中序遍历
给定一个二叉树的根节点 root ,返回它的 中序 遍历。解法一:递归实现,省略解法二:非递归实现1、申请一个新的栈stack,初始化时,令遍历tmpNode = root。2、先把tmpNode节点压入栈中,再对以tmpNode节点为头结点的整颗子树来说,依次把左边界压入栈中,即不停地令tmpNode = tmpNode->left,然后重复步骤2。3、不断重复步骤2,发现tmpNode为空,此时从stack中弹出一个节点,记为node,收集node的值,并让tmpNode = tmpNo原创 2020-12-13 18:35:03 · 156 阅读 · 0 评论 -
leetcode 559 N叉树的最大深度
给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。链接:https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree实例一:输入:root = [1,null,3,2,4,null,5,6]输出:3实例二:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10原创 2020-12-13 17:58:32 · 99 阅读 · 0 评论 -
leetcode 217 存在重复元素
给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true链接:https://leetcode-cn.com/problems/contains-duplicate解法一:class Solution {publ原创 2020-12-13 16:04:30 · 126 阅读 · 0 评论 -
leetcode 104 二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/解法一:采用递归实现:1、递归函数的参数和返回值:参数就是传入树的根节点,返回值为这颗树的深度。2、终止条件,如果遇到NULL节点,则返回03、单层递归逻辑,对于根节点,先求左子树的深度,再求右子树的深度,最后取左右子树深度的最大数值加1,就是整原创 2020-12-13 15:33:44 · 117 阅读 · 0 评论 -
leetcode144 二叉树的前序遍历
给你二叉树的根节点 root ,返回它节点值的前序遍历。实例一:输入:root = [1,null,2,3]输出:[1,2,3]解法一:采用递归来实现前序遍历的逻辑根据递归的三要素:1、确定递归函数的参数和返回值:确定哪些参数是递归过程中需要进行处理的,就需要在递归函数里加上这个参数,并且还要明确每次递归的返回值是什么进行确定递归函数的返回类型。2、确定终止条件:递归算法,经常会遇到栈溢出的错误,就是终止条件写的有问题,操作系统是用一个栈结构来保存每一层递归的信息,如果递归没有终止,操作系统原创 2020-12-13 11:58:07 · 160 阅读 · 0 评论 -
leetcode 861 翻转矩阵后的得分
有一个二维矩阵 A 其中每个元素的值为 0 或 1 。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。返回尽可能高的分数。示例:输入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]]输出:39解释:转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]0b1111 + 0b1001 + 0b1111 = 15 +原创 2020-12-08 00:07:40 · 152 阅读 · 0 评论 -
leetcode 118 杨辉三角形
具体查看题目链接:https://leetcode-cn.com/problems/pascals-triangle/class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> result; vector<int> up; for (int i = 0; i < numRows; i++) {原创 2020-12-07 00:35:08 · 138 阅读 · 0 评论 -
leetcode 107 二叉树的层次遍历II
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7]3/ 9 20/ 15 7返回其自底向上的层次遍历为:[[15,7],[9,20],[3]]链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/** * Definition for a binary tr原创 2020-12-06 23:21:51 · 138 阅读 · 0 评论 -
leetcode 102 二叉树的层次遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/** * Definition for a binary tree node. * stru原创 2020-12-06 23:11:48 · 105 阅读 · 0 评论 -
面试题——二叉树的层次建树
题目描述:给定一个数组,根据其中的元素层次建立一颗二叉树,并通过任意一种遍历方式将建好的树数据打印输出。typedef struct TreeNode{ struct TreeNode* pleft = nullptr; struct TreeNode* pright = nullptr; int data;}TNode, * pTNode; class Solution{public: void levelbuildTree() { for (auto& ele :原创 2020-12-06 22:03:52 · 376 阅读 · 0 评论 -
面试题——根据二叉搜索树后续遍历的数组,重建出整颗树并返回树的头结点
struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}};int Rand(int min, int max){ srand(time(NULL)); return min + rand() % (max - min + 1);}TreeNode* createTree(int min, int ma.原创 2020-12-06 23:20:10 · 357 阅读 · 0 评论 -
剑指offer 51: 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5其中逆序对分别是:[7,5][6,4][5,4][7,4][7,6]解决思路一:暴力求解O(n^2)的时间复杂度,O(1)的空间复杂度,并且暴力求解是不会改变原有数组的顺序的,leetcode上面提交会超时:class Solution {public: int reversePairs(vector<in原创 2020-11-23 23:07:51 · 157 阅读 · 0 评论 -
leetcode 26 删除排序数组中重复的项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。Example 1:Input: nums = [1,1,2]Output: 2, nums = [1,2]Explanation: Your function should return length = 2, with the first two elements of nums being 1 a原创 2020-11-22 23:36:53 · 92 阅读 · 1 评论 -
leetcode 128 最长连续序列 (Longest Consecutive Sequence)
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。进阶:你可以设计并实现时间复杂度为 O(n) 的解决方案吗?Given an unsorted array of integers nums, return the length of the longest consecutive elements sequence.Follow up: Could you implement the O(n) solution?Example 1:Input:原创 2020-11-22 22:43:54 · 211 阅读 · 0 评论 -
leetcode 1 两数之和 (Two Sum)
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.You may assume that each input wou原创 2020-11-22 20:46:19 · 173 阅读 · 0 评论 -
leetcode 15 三数之和 (3Sum)
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。Given an array nums of n integers, are there elements a, b, c in nums such that a+b+c = 0 ?Find all unique triplets in the array which gives the sum of原创 2020-11-22 20:27:08 · 175 阅读 · 0 评论 -
Leetcode 81 Search in Rotated Sorted Array II
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.(i.e., [0,0,1,2,2,5,6] might become [2,5,6,0,0,1,2]).You are given a target value to search. If found in the array return true, otherwise return false.Example原创 2020-11-10 00:50:14 · 71 阅读 · 0 评论 -
leetcode 33 Search in Rotated Sorted Array
You are given an integer array nums sorted in ascending order, and an integer target.Suppose that nums is rotated at some pivot unknown to you beforehand (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).If target is found in the array return its inde原创 2020-11-10 00:36:54 · 117 阅读 · 0 评论 -
leetcode 53 最大子段和(动态规划)
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。若采用暴力枚举所有连续字段的和,复杂度是O(n^2)若尝试采用动态规划方...原创 2020-01-14 23:21:31 · 475 阅读 · 0 评论 -
leetcode 198 打家劫舍(动态规划)
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号...原创 2020-01-14 18:06:40 · 233 阅读 · 0 评论 -
leetcode 70 爬楼梯(动态规划)
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1、 1 阶 + 1 阶2、2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1、1 阶 + 1 阶 + 1 阶2、1 阶 + 2 阶3、2 阶...原创 2020-01-14 17:24:17 · 166 阅读 · 0 评论 -
leetcode 76 最小窗口子串
给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”说明:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。算法思路:1、设置两个字符哈希数组,map_s与map_t,map_s代表当前处理的窗口区...原创 2020-01-14 16:49:08 · 292 阅读 · 0 评论 -
leetcode 187 重复的DNA序列(哈希or+位运算解决)
所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来查找 DNA 分子中所有出现超过一次的 10 个字母长的序列(子串)。示例:输入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”输出:[“AAAAACCCCC”, “CCCCCAA...原创 2020-01-14 13:38:50 · 363 阅读 · 0 评论 -
leetcode 3 无重复字符的最长子串(双指针维持滑动窗口)
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其...原创 2020-01-14 12:26:52 · 180 阅读 · 0 评论 -
leetcode 49 字母异位词分组(哈希映射map)
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。已知一组字符串,将所有由颠倒字母顺序而构成的字放...原创 2020-01-14 00:48:59 · 241 阅读 · 0 评论