数据结构
CodeGuN
道阻且长
展开
-
不同路径
题目地址:https://leetcode-cn.com/problems/unique-paths/考虑使用动态规划只能向下和向右移动dp[i][j] 表示到坐标(i,j)的路径条数。由于机器人从i = 0,j = 0出发,每次只能向下或向右移动在坐标为(0,j)的位置机器人要到达的话只有一条路径(一直向下);在所有坐标为(i,0)的位置,机器人要到达也只有一条路径(一直向右).而要到达任一位置(i,j)的路径条数,总是等于位置(i-1,j)的路径条数 + (i,j-1)的路径条数得:.原创 2020-10-19 14:23:26 · 89 阅读 · 0 评论 -
无重复字符的最长子串
题目地址: https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/submissions/一旦出现出现次数,先考虑散列表;涉及子串,考虑滑动窗口。每向右移动一次就判断字符是否出现过,未出现则添加进set,否则结束while,计算最大值。在左指针向右移动时就剔除一个set中存储的值,可以优化至循环剔除到重复值的位置。class Solution { public int length.原创 2020-10-05 11:38:40 · 193 阅读 · 0 评论 -
最小路劲和
题目地址: https://leetcode-cn.com/problems/minimum-path-sum/submissions/经典DP的题目当左边和上边都不是矩阵边界时: 即当i != 0, j != 0grid[i][j] = Math.min(grid[i - 1][j] + grid[i][j], grid[i][j - 1] + grid[i][j]);当只有左边是矩阵边界时: 只能从上面来,即当i = 0, j != 0 dp[i][j] = dp[i][j -.原创 2020-09-28 14:02:04 · 95 阅读 · 0 评论 -
二叉树的最近公共祖先
题目地址: https://leetcode-cn.com/problems/er-cha-shu-de-zui-jin-gong-gong-zu-xian-lcof/submissions/终止条件:当到达叶子节点并未找到值则直接返回null当root等于p或q,直接返回root后序遍历返回值:当left和right同时为null的时候,说明无符合条件的值,返回ull当left和right同时不为null的时候,说明p,q分布在root的左子树和右子树中,返回root当left为.原创 2020-09-27 20:38:23 · 287 阅读 · 0 评论 -
剪绳子Ⅰ
题目:https://leetcode-cn.com/problems/jian-sheng-zi-lcof/对于的正整数 n,当 n≥2 时,可以拆分成至少两个正整数的和。令 k 是拆分出的第一个正整数,则剩下的部分是 n−k,n−k 可以不继续拆分,或者继续拆分成至少两个正整数的和。由于每个正整数对应的最大乘积取决于比它小的正整数对应的最大乘积,因此可以使用动态规划求解。dp数组的含义: dp[i] 表示将正整数 i 拆分成至少两个正整数的和之后,这些正整数的最大乘积。边界条件: 0 不是正整.原创 2020-09-27 15:41:26 · 105 阅读 · 0 评论 -
盛最多水的容器
题目地址: https://leetcode-cn.com/problems/container-with-most-water/使用的方法:双指针法开始 l 指向数组的首位 ,r 指向数组末位。遍历过程中去移动 l和r指向的位置,直到 l == r 。容纳的水量是由两个指针指向的数字中较小值 * 指针之间的距离决定的。所以在移动指针的时候需要 移动 指向的值小的一端(虽然我们不知道移动之后下一个值是否会更小),遍历完所有值,遍历过程中尽可能的往让面积变大的方向走。最后的结果就是最大值.原创 2020-09-26 14:02:22 · 64 阅读 · 0 评论 -
把数组排成最小的数
题目: https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/此题求拼接起来的 “最小数字” ,本质上是一个排序问题。排序判断规则:设 nums 任意两数字的字符串格式 x 和 y若拼接字符串 x + y > y + x ,则 x > y;反之,若 x + y < y + x,则 x < y ;根据以上规则,套用任何排序方法对 nums 执行排序即可。class Sol.原创 2020-08-29 22:36:00 · 82 阅读 · 0 评论 -
数组中数字出现的次数 II
题目: https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof/一个数组出现了3次,二进制位也会出现3次把所有的出现的三次的数字的二进制表示的每一位都分别加起来,那么每一位都能够被3整除我们把数组中所有的数字的二进制表示的每一位都加起来。如果某一位不能被3整除,那么只出现一次的那个数字的该位置一定为1。class Solution { public int singleNumber(.原创 2020-08-29 19:35:45 · 152 阅读 · 0 评论 -
礼物的最大价值
题目位置: https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof/从棋盘的左上角开始拿格子里的礼物,并每次 向右 或者 向下 移动一格、直到到达棋盘的右下角。根据题目说明,易得某单元格只可能从上边单元格或左边单元格到达。DP的思想:局部最优 ->整体最优public int maxValue(int[][] grid) { int m = grid.length; int n = grid.原创 2020-08-29 12:06:25 · 113 阅读 · 0 评论 -
队列中的最大值
题目: https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/需要一个双端队列 作为辅助队列在每次入队时,如果 deque 队尾元素小于即将入队的元素 value,则将小于 value 的元素全部出队后,再将 value 入队;否则直接入队。LeetCode官方的例子:如果我们向队列中插入数字序列 1 1 1 1 2,那么在第一个数字 2 被插入后,数字 2 前面的所有数字 1 将不会对结果产生影响。因为按照队列的取出顺序,数字 .原创 2020-08-22 16:00:25 · 468 阅读 · 0 评论 -
顺时针打印矩阵
题目地址: https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/边界类型问题:考虑设定矩阵的“左、上、右、下”四个边界,模拟以上矩阵遍历顺序。设置上下左右四个边界变量: //行 为下边界 int row = matrix.length - 1; //列 为右边界 int column = matrix[0].length - 1; int[] a.原创 2020-08-22 12:35:56 · 92 阅读 · 0 评论 -
矩阵中的路径
题目:https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/这种路径的问题一般都是需要使用 DFS(深度优先遍历)分别遍历上下左右 四个方向dfs(i + 1, j, t + 1) || dfs(i - 1, j, t + 1) ||dfs(i, j - 1, t + 1) || dfs(i, j + 1, t + 1);递归终止条件:if(i < 0 || j < 0 || i >.原创 2020-08-08 16:18:30 · 121 阅读 · 0 评论 -
栈的压入、弹出序列
题目地址: https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/使用辅助栈的方式模拟进栈与出栈:发现与popped数组相同的数时,就将该数出栈,由于是栈的操作: 先进后出则: 在判断当相同数字 的时,前面进入该栈的数组必定是在popped数组(前提是符合栈的要求,否则栈最后不为null)后面的,所以循环判断后续的数字是否符合要求,符合要求则继续出栈。pushed = [1,2,3,4,5], popped = [4.原创 2020-08-08 13:24:50 · 301 阅读 · 0 评论 -
机器人的运动范围
题目地址: https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/使用深度优先搜索,去查找符合条件的点的个数上下左右(其实这题没必要搜索上左)dfs(i + 1, j) dfs(i - 1, j) dfs(i, j - 1)dfs(i, j + 1)终止条件:当搜索到的二维数组下标的位置越界 则终止当发现节点已经被搜索过则终止节点不符合题目条件则终止 if(i < 0 || j < .原创 2020-08-01 11:59:07 · 129 阅读 · 0 评论 -
最小的K个数
题目地址: https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/题目需要在无序的数组中查找出 最小的K个数,并且这K个数不要求有序输出所以我们只需要得到 小于等于第K+1大 K-1 的数复杂度分析: 因为我们是要找下标为k的元素,第一次切分的时候需要遍历整个数组 (0 ~ n) 找到了下标是 middle 的元素,假如 k 比 middle 小的话,那么我们下次切分只要遍历数组 (0 ~ k-1)的元素就行啦,反之如果 k 比 mid.原创 2020-07-25 17:40:19 · 199 阅读 · 0 评论 -
树的子结构
题目: https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/先序遍历树A的每个节点判断树A中是否包含有树BisSubStructure(A, B) 函数:特例处理: 当 树 A 为空 或 树 B 为空 时,直接返回 false ;返回值: 若树 B 是树 A 的子结构,则必满足以下三种情况之一,因此用或 || 连接;以 节点 A为根节点的子树 包含树 B ,对应 dfsJude(A, B);树 B 是 树 A 左子树 的子结构.原创 2020-07-18 23:11:48 · 316 阅读 · 0 评论 -
最长不含重复字符的子字符串
题目:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/使用Hash表+双指针的做法遇到相同的值,就从hash表中取出该值前一次出现的位置,做一次比较,保证值是最大的。public static int lengthOfLongestSubstring(String s) { //使用hash表来判断 Map<Character,Inte.原创 2020-07-18 19:24:40 · 103 阅读 · 0 评论 -
从上到下打印二叉树Ⅲ
题目地址:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/按题目的要求,需要我们偶数行按照从左到右的顺序打印,奇数行按照从右到左的顺序打印。对于这样的需要按照一定的顺序打印结果的时候,可以使用LinkedList作为一个双端的队列层次打印二叉树我们本来就习惯于从左到右打印。所以:从左到右打印: 把我们的数据从双端队列的首部依次插入,确保输出后顺序不变从右到左打印: 把我们的数据从双端.原创 2020-07-18 16:35:41 · 137 阅读 · 0 评论 -
二叉树的层序遍历
题目: https://leetcode-cn.com/problems/binary-tree-level-order-traversal/递归法(DFS): 递归的方法传入一个标记行数的参数numbers来判断行数。class Solution { List<List<Integer>> list = new ArrayList<>(); public List<List<Integer>> levelOrder(Tre.原创 2020-07-11 17:23:48 · 148 阅读 · 0 评论 -
二叉搜索树与双向链表
题目:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。由于是以可二叉搜索树,我们可以直接使用 中序遍历二叉树的中序遍历 void dfs(Node node){ if(node == null) return; dfs(node.l.原创 2020-07-11 14:50:06 · 95 阅读 · 0 评论 -
数据结构之简单的顺序表、链表
注意:此文只适用于初学者,浅显的代码,实际上顺序表和链表还有更加高效有用的处理方式顺序表:#include <stdio.h>#include <stdlib.h>/***ArrList顺序表*/typedef struct ArrList{int *elem;int length;int listSize;}arrList;bool Entry(a...原创 2019-03-26 16:12:17 · 134 阅读 · 0 评论 -
数据结构之栈和队列的简单实现
注意:此文为最基本的栈和队列的实现顺序栈/***顺序栈 */ #include <stdio.h>#include <stdlib.h>#define MAX 10typedef struct{ int data[MAX]; int top;}ArrStack;void InitStack(ArrStack *s){ s->top=-1;...原创 2019-04-04 01:28:50 · 177 阅读 · 0 评论 -
两个int类型的数据相加,有可能会出现超出int的表示范围。
两个int类型的数据相加,有可能会出现超出int的表示范围。来源:https://www.cnblogs.com/zhuyeshen/p/10685123.html/*移位运算符:<<(左移)规律:一个操作数进行左移运算的时候,结果就是等于操作数乘以2的n次方,n就是左移 的位数. 3<<1 = 3 *2(1) = 6; 3<<2 = ...转载 2019-06-06 11:02:42 · 1655 阅读 · 0 评论 -
数据结构之查找(顺序查找和二分查找)一
话不多上,贴代码#include <stdio.h>#include <string.h>#include <stdlib.h>int OptimizationOrder_search(int *a,int n,int key){ //优化版顺序查找 int i; a[0]=key; i=n; while(a[i]!=key){ ...原创 2019-06-07 15:24:02 · 972 阅读 · 0 评论 -
数据结构之二叉排序树
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有节点的值均小于它的根节点的值;(2)若右子树不空,则右子树上所有节点的值均大于它的根节点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的节点。以下只创建并先序打印出二叉排序树#include <stdio.h>#include <string.h>#incl...原创 2019-06-07 15:26:50 · 517 阅读 · 0 评论 -
数据结构之图的邻接表实现(包含BFS、DFS的实现)
后附代码基础知识有向图中孤立点:V中不与E中任一条边关联的点称为D的孤立点.简单图:不含平行边的图称为简单图.完备图:图中任两个顶点U与u之间,恰有两条有向边(u,v),及(v,u),则称该有向图D为完备图.基本图:把有向图D的每条边除去定向就得到一个相应的无向图G,称G为D的基本图.称D为G的定向图。强连通图:给定有向图G=(VE),并且给定该图G中的任意两个结点u和v,如果结点u...原创 2019-06-02 21:07:23 · 1714 阅读 · 0 评论 -
证明:含有n个结点的二叉链表中含有n+1个空链域
https://blog.csdn.net/qq_24118527/article/details/81871889原创 2019-06-21 11:18:03 · 1602 阅读 · 0 评论 -
图解中序遍历的线索二叉树
https://blog.csdn.net/kevinscsdn/article/details/80689161原创 2019-06-21 13:11:35 · 484 阅读 · 0 评论 -
数据结构之二叉树的构建、遍历
先序遍历:规则:若二叉树为空,则空操作返回,否则先访问根节点,然后先序遍历左树,在先序遍历右树中序遍历规则:若树为空,则空操作返回,否则从根节点开始(注意并不是先访问根节点),中序遍历根节点的左子树,然后是访问根节点,最后中序遍历右子树后序遍历规则:若树为空,则空返回操作,否则从左到右先叶子后节点的方式遍历访问左右子树,最后是访问根节点层序遍历规则:若树为空,则空操作返回,否则...原创 2019-05-03 16:35:57 · 219 阅读 · 2 评论