
数据结构
想成为优秀程序员的lxffffff
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
最长有效括号
最长有效括号32. 最长有效括号 题目描述:给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 来源:力扣(LeetCode) 解法1:动态规划 一开始想到了动态规划,但是没有想到嵌套形式的括号应当怎么处理,看了题解觉得大佬的解法十分巧妙。 定义dp[i] 表示以下标 i 字符结尾的最长有效括号的长度。由于有效的字串必然以 ‘)’ 结尾,则’(‘的dp值一定为0。 那么一共有2种可能。(来自原创 2020-07-04 18:53:43 · 218 阅读 · 0 评论 -
机器人的运动范围-矩阵路径(学习leetcode大佬写的清楚的解法)
题目链接:机器人的运动范围 点进去即可看到大佬清楚的讲解原创 2020-04-08 15:54:37 · 213 阅读 · 0 评论 -
旋转矩阵-leetcode官方有趣解法
题目链接:旋转矩阵原创 2020-04-07 10:30:20 · 297 阅读 · 0 评论 -
sudoku-solver
题目链接:牛客网 题目描述: 请编写一个程序,给数独中的剩余的空格填写上数字 空格用字符’.'表示 假设给定的数独只有唯一的解法 解题思路: 来自牛客网 后劲好大 和n皇后问题一样,用一个num记录填过得数字个数,同时按照顺序从左到右从上到下遍历,num也可以表示当前位置的坐标。如果已经填了数字就继续进入递归,如果没有填数字就从1-9开始尝试,同时用一个函数判断是否符合规则,如果符合就先填入,...原创 2020-02-16 19:06:50 · 224 阅读 · 0 评论 -
set-matrix-zeroes
题目链接:牛客网 题目描述: 给定一个m*n的矩阵,如果有一个元素是0,就把该元素所在的行和列上的元素全置为0,要求使用原地算法。 拓展: 你的算法有使用额外的空间吗? 一种比较直接的算法是利用O(m,n)的空间,但是这不是一个好的解法 使用简单的改进可以在O(m+n)的空间解决这个问题,但是还不是最佳的解法 你能在常量级的空间复杂度内解决这个问题吗? 解题思路:来自牛客网 可乐猪 时间复杂度...原创 2020-02-15 21:21:13 · 118 阅读 · 0 评论 -
word-search
题目链接:牛客网 题目描述: 给出一个二维字符数组和一个单词,判断单词是否在数组中出现, 单词由相邻单元格的字母连接而成,相邻单元指的是上下左右相邻。同一单元格的字母不能多次使用。 例如: 给出的字符数组= [↵ [“ABCE”],↵ [“SFCS”],↵ [“ADEE”]↵] 单词 =“ABCCED”, -> 返回 true, 单词 =“SEE”, ->返回 true, 单词...原创 2020-02-15 21:17:03 · 516 阅读 · 0 评论 -
n-queens(n皇后问题)
题目链接:牛客网 题目描述 N皇后问题是把N个皇后放在一个N×N棋盘上,使皇后之间不会互相攻击。 给出一个整数n,返回n皇后问题的所有摆放方案 例如: 4皇后问题有两种摆放方案 题目解析:这个问题就是n个皇后摆放在n*n的棋盘格中,使得横、竖和两个对角线方向均不会同时出现两个皇后。这道题我一直都不会做,于是学习了牛客网黄汉韬的做法。 首先将所有的位置都置为没有放置皇后。 用递归的方法从第一行开...原创 2020-02-14 20:32:51 · 546 阅读 · 0 评论 -
search-insert-position
题目链接:牛客网 题目描述: 给出一个有序的数组和一个目标值,如果数组中存在该目标值,则返回该目标值的下标。如果数组中不存在该目标值,则返回如果将该目标值插入这个数组应该插入的位置的下标 假设数组中没有重复项。 下面给出几个样例: [1,3,5,6], 5 → 2 [1,3,5,6], 2 → 1 [1,3,5,6], 7 → 4 [1,3,5,6], 0 → 0 解题思路:这道题可以用暴力的...原创 2020-02-13 16:45:32 · 118 阅读 · 0 评论 -
path-sum-ii
题目链接:牛客网 题目描述: 给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum的路径, 例如: 给出如下的二叉树,sum=22, 5↵ / ↵ 4 8↵ / / ↵ 11 13 4↵ / / ↵ 7 2 5 1 返回 ...原创 2020-02-13 16:33:23 · 118 阅读 · 0 评论 -
populating-next-right-pointers-in-each-node
题目链接:牛客网 题目描述: 给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next;} 填充所有节点的next指针,指向它右兄弟节点。如果没有右兄弟节点,则应该将next指针设置为NULL。 初始时,所有的next指针都为NULL 注意: 你只能使用常量级的额外内存空间 ...原创 2020-02-12 18:36:56 · 106 阅读 · 0 评论 -
层序遍历的各种用法
本文在层序遍历binary-tree-level-order-traversal的基础上稍加修改解决了以下题目。(不一定是以下每道题的最优解法,但是可以在会了层序遍历的基础上解题) binary-tree-level-order-traversal-ii binary-tree-zigzag-level-order-traversal populating-next-right-pointers-...原创 2020-02-12 18:31:47 · 449 阅读 · 0 评论 -
Binary Tree Maximum Path Sum
题目链接:牛客网 题目描述: 给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。 这个路径的开始节点和结束节点可以是二叉树中的任意节点 例如: 给出以下的二叉树, 1↵ / ↵ 2 3 返回的结果为6 解题思路: 来自于Binary Tree Maximum Path Sum – LeetCode 这道题是求树的路径和的题目,不过和平常不同的是这里的路径不仅可...原创 2020-02-11 16:27:57 · 281 阅读 · 0 评论 -
构造二叉树(先序+中序 后序+中序)
题目链接:牛客网 给出一棵树的前序遍历和中序遍历,请构造这颗二叉树 注意: 可以假设树中不存在重复的节点 先遍历的第一个数是根节点,中序遍历的根节点左边是左子树,右边是右子树。通过先序遍历遍历找到根结点,通过中序中根结点的位置可以将树划分成两个子树,然后递归的进行调用即可构造好二叉树。 /** * Definition for binary tree * struct TreeNode {...原创 2020-02-10 18:43:32 · 257 阅读 · 0 评论 -
树的遍历(中序+后序)
题目链接:牛客网 给出一棵二叉树,返回这棵树的中序遍历 递归的方法: class Solution { public: void inorder(TreeNode*root, vector<int>&res){ if(root!=NULL){ inorder(root->left, res); r...原创 2020-02-10 18:36:51 · 128 阅读 · 0 评论 -
贪心(minimum-window-substring)
题目链接:牛客网 题目描述: 给出两个字符串S和T,要求在O(n)的时间复杂度内在S中找出最短的包含T中所有字符的子串。 例如: S =“ADOBECODEBANC” T =“ABC” 找出的最短子串为"BANC". 注意: 如果S中没有包含T中所有字符的子串,返回空字符串 “”; 满足条件的子串可能有很多,但是题目保证满足条件的最短的子串唯一。 解题思路: 来源:牛客网Ballontt 注意...原创 2020-02-08 21:06:27 · 263 阅读 · 0 评论 -
贪心(maximal-rectangle)
题目链接:牛客网 题目描述: 给出一个只包含0和1的二维矩阵,找出最大的全部元素都是1的长方形区域,返回该区域的面积 解题思路: 本题可以基于Leetcode #84 Largest Rectangle in Histogram去解。 这个博主的辅助栈法:Leetcode #84 Largest Rectangle in Histogram进行了详细的讲解。 以下图片来自博客截图。 ...原创 2020-02-07 19:04:30 · 298 阅读 · 0 评论 -
贪心
题目链接:牛客网 题目描述: 环形路上有n个加油站,第i个加油站的汽油量是gas[i].你有一辆车,车的油箱可以无限装汽油。从加油站i走到下一个加油站(i+1)花费的油量是cost[i],你从一个加油站出发,刚开始的时候油箱里面没有汽油。求从哪个加油站出发可以在环形路上走一圈。返回加油站的下标,如果没有答案的话返回-1。 注意: 答案保证唯一。 解题思路: 来自牛客网 牛客923 采用贪心的...原创 2020-02-06 16:33:15 · 192 阅读 · 0 评论 -
最后一个单词的长度
题目链接:牛客网 题目描述: 计算字符串最后一个单词的长度,单词以空格隔开。 输入描述: 一行字符串,非空,长度小于5000。 输出描述: 整数N,最后一个单词的长度。 输入: hello world 输出: 5 **解题思路:**来自牛客网J_kiwi 可能出现的问题:最后的输入为空格结尾而不是单词结尾。 使用动态数组来做,输入的字符串依次存入数组中,最后返回数组中最后一个元素(字符串)的...原创 2020-02-05 22:58:54 · 142 阅读 · 0 评论 -
最长公共字串
题目链接:牛客网 题目描述: 查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。 输入描述: 输入两个字符串 输出描述: 返回重复出现的字符 输入: abcdefghijklmnop abcsafjklmnopqrstuvw 输出: jklmnop 解题思路: 思路来源于牛客网Crazy Coding Girl 选择2个输入字符串中短的一个作为基础,遍历短字符...原创 2020-02-05 22:53:53 · 130 阅读 · 0 评论 -
回文字符串
题目描述: 给定一个字符串s,分割s使得s的每一个子串都是回文串 返回所有的回文分割结果。(注意:返回结果的顺序需要和输入字符串中的字母顺序一致。) 例如:给定字符串s=“aab”, 返回 [↵ [“aa”,“b”],↵ [“a”,“a”,“b”]↵ ] 解题思路: 注意:(来自牛客网华科平凡)如果要求输出所有可能的解,往往都是要用深度优先搜索。如果是要求找出最优的解,或者解的...原创 2020-02-04 22:58:43 · 408 阅读 · 0 评论 -
连续最长的数字串
题目链接:牛客网 题目描述: 读入一个字符串str,输出字符串str中的连续最长的数字串 输入描述: 1个测试输入包含1个测试用例,一个字符串str,长度不超过255。 输出描述: 在一行内输出str中里连续最长的数字串。 **解题思路:**思路来源于牛客网卷积神经网络哦 从下标为0开始遍历字符串,没有出现数字下标+1,当遇到数字时进入数字循环直到不是数字为止,记录最长的数字串长度和最长的数...原创 2020-02-04 22:25:57 · 279 阅读 · 0 评论 -
查找(二维数组中的查找+查找第K大的元素)
二维数组中的查找 题目:牛客网 题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路: 这个二维数据从左下角往右上看是一个有序的矩阵,每一行的第一个数是本行最小的数,往上的每一行的数都小于本行的数。 从左下角遍历该二维数组,当目标数...原创 2020-02-03 22:32:52 · 1831 阅读 · 0 评论 -
大整数排序
题目描述: 对N个长度最长可达到1000的数进行排序。 输入描述: 输入第一行为一个整数N,(1<=N<=100)。 接下来的N行每行有一个数,数的长度范围为1<=len<=1000。 每个数都是一个正数,并且保证不包含前缀零。 输出描述: 可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。 输入: 3 111111111...原创 2020-02-02 21:23:48 · 197 阅读 · 0 评论 -
成绩排序
成绩排序 输入描述: 输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开 输出描述: 按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开 输入: 3 0 fang 90 yang 50 ning 70 输出: fang 90 ning 70 yang 50 解题思路,利用STL中的stable_sort。带有st...原创 2020-02-02 21:05:53 · 230 阅读 · 0 评论 -
二叉搜索树
题目描述:判断给出的二叉树是否是一个二叉搜索树(BST) 二叉搜索树:二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 解题思路:来自牛客网Bra...原创 2020-01-20 21:51:42 · 114 阅读 · 0 评论 -
层序遍历
题目描述:给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 解题思路:思路来自牛客网努力的牛牛 利用队列这个数据结构,队列是先进先出的。因为是按照从左到右的顺序层次遍历,所以用队列记录每一层的根结点,然后根据队列的大小(即这一层的节点数目),依次将队列中的节点取出,加入到vector中,将左子树和右子树放入队列。每一层遍历过后,将这一层vecotr加入总的vector...原创 2020-01-20 21:27:52 · 181 阅读 · 0 评论 -
平衡二叉树
判断给定的二叉树是否是平衡的 在这个问题中,定义平衡二叉树为每个节点的左右两个子树高度差的绝对值不超过1的二叉树 解题思路: 每个节点的高度为最大子树高度+1,因此可以用递归的思想计算每个结点的左右子树大小。设置一个标志位flag=-,当计算出一个节点的左右子树大小之后进行比较,如果相差超过1则将标志位设为flag=-1。如果flag=-1,则说明不是平衡二叉树,如果flag=0则说明是平衡...原创 2020-01-19 21:22:27 · 127 阅读 · 0 评论 -
前序遍历
求给定的二叉树的前序遍历。 先序遍历(Pre-order)是按照根左右的顺序沿一定路径经过路径上所有的结点。在二叉树中,先根后左再右。巧记:根左右。 下图所示二叉树的遍历结果是:ABDECF 栈:后进先出(LIFO-last in first out):最后插入的元素最先出来。队列:先进先出(FIFO-first in first out):最先插入的元素最先出来。 解题思路: 1...原创 2020-01-19 20:35:33 · 451 阅读 · 0 评论