数据结构与算法
追随者永远是胜利者
坚韧皮实,行稳致远
展开
-
剑指Offer(从 1 到 N 中 1 出现的次数)java实现
剑指offer上有一题:从 1 到 n 中 1 出现的次数,本思路是剑指offer中的思路,用java代码做的实现,思路请参考《剑指offer》源代码: public static int countDigitOne(int n) { if(n < 0) return 0; char[] ch = String.v...原创 2020-02-29 20:24:36 · 226 阅读 · 0 评论 -
leetcode题解(257) Binary Tree Paths(打印所有二叉树根节点到叶节点的路径)
题目描述:Given a binary tree, return all root-to-leaf paths.Note:A leaf is a node with no children.Example:Input: 1 / \2 3 \ 5Output: ["1->2->5", "1->3"]Explanation: ...原创 2019-10-23 22:19:29 · 251 阅读 · 0 评论 -
Leetcode(85)maximal-rectangle(最大矩形面积)
题目描述:Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area.Example:Input:[ ["1","0","1","0","0"], ["1","0","1","1","1"], ["...原创 2019-10-23 20:35:55 · 241 阅读 · 0 评论 -
字节跳动线上笔试:字符串路径匹配
题目描述: 输入一个二维字符数组map和一个字符串数组word,判断word中的元素是否在map中有相应的路径存在,其中map中的路径可以上下左右各走一格。如果存在输出 Has,如果不存在输出 Not Has。像Word中的第一行在Map中第一列存在,Word中的第二行在Map中的第三行存在,....解题思路:本题使用回溯法,深度优先搜素遍历二维字符数组中的元素,寻找可能存在的路径。...原创 2019-04-23 09:53:44 · 975 阅读 · 0 评论 -
八大排序算法中的归并排序
归并排序其实就是分治思想的应用。分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。如下图:对数组进行排序,先按二分法拆分数组,然后依次对每一个单元进行拆分。直到拆分到单个元素。代码如下:public class Test_A...原创 2019-04-29 20:35:08 · 156 阅读 · 0 评论 -
Leetcode 之 First Bad Version (第一个错误的版本)
题目描述:给定一个元素 n 代表有 [1, 2, ..., n] 版本,在第 x 位置开始出现错误版本,导致后面的版本都错误。可以调用 isBadVersion(int x) 知道某个版本是否错误,要求找到第一个错误的版本。解题思路:本题采用二分法来实现,二分法中低位为l,高位为h。中间数的取法有两种: 1、m = (l...原创 2019-05-14 23:12:04 · 149 阅读 · 0 评论 -
int型转换为long型遇到的一个小问题
LeetCode上有一道题:给出一个数 n ,求(0, n)之间素数的个数。然后我采用埃拉托斯特尼筛法在每次找到一个素数时,将能被素数整除的数排除掉。但是,在进行int类型转换的时候会报:java.lang.ArrayIndexOutOfBoundsException代码如下:public int countPrimes(int n) { boolea...原创 2019-07-09 12:51:59 · 1977 阅读 · 0 评论 -
剑指offer(机器人的运动范围)
一、题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?二、解答解题思路:这个方格也可以...原创 2019-04-22 08:50:14 · 228 阅读 · 0 评论 -
剑指offer(二叉搜索树转换为双向链表)
一、题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。二、解题思路非递归思路:中序遍历二叉搜索树,就是对节点的顺序遍历。依次把节点存储到集合中,然后让集合中的前一个元素指向后一个元素,同时后一个元素指向前一个元素。 //把二叉搜索树转变为排序的双向链表 public static TreeNod...原创 2019-04-14 14:11:04 · 199 阅读 · 0 评论 -
剑指offer(字符串的排序)
一、题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。二、解题思路回溯法:如上图1、让第一个字符和自身以及右边的每一个字符依次交换,形成第一级。2、然后,让第二个字符和自身以及右边的每一个字符依次交换,形成第二级。3、同上步骤2,依次执...原创 2019-04-14 13:42:32 · 187 阅读 · 0 评论 -
数组生成大顶堆与堆排序
大顶堆:堆可以看做一个完全二叉树,如果该完全二叉树满足双亲结点大于等于孩子结点,则这样的堆也称为大顶堆。小顶堆:如果完全二叉树满足双亲结点小于等于孩子结点,则这样的堆也称为小顶堆。对于一个数组生成的完全二叉树,如果完全二叉树中的一个节点对应数组中的下标索引为index,则这个节点的左右子节点对应数组中的下标索引为: lef...原创 2019-04-06 17:10:21 · 2603 阅读 · 0 评论 -
中序线索化二叉树
为什么要线索化二叉树?答:对于如下一颗二叉树,中序遍历二叉树结果为4,2,5,1,3那么我想知道5前面的数是什么,就必须要先中序遍历一遍然后再去查询5前面的数字。那么如果我这样操作:对于左右子节点为null的节点,它的左节点指向前一个节点,右节点指向下一个节点,同时标记指针置为1,这样的话,我就可以直接知道中序遍历时5的前一个节点和后一个节点。这个对二叉树的操作过程叫:线索化二叉...原创 2019-04-06 21:01:19 · 7634 阅读 · 1 评论 -
图的广度优先遍历(BFS)
图的相关概念先省略,对于广度优先遍历(BFS):1、从第一个顶点开始,每走一步依次遍历与此相连的顶点。2、然后输出第一个顶点,再依次遍历与第二个顶点相连的所有顶点3、重复第二步,直到遍历完所有顶点。直接说一个例子:对于一个图,邻接表与邻接矩阵如下BFS实现流程:(1)实例化一个队列,从邻接矩阵中的第一个顶点,依次放入与此相连的顶点(2)遍历完与第一个顶点相连的所有...原创 2019-04-10 20:16:08 · 329 阅读 · 0 评论 -
图的深度优先搜索
前一篇是图的BFS:https://blog.csdn.net/qq_34404196/article/details/89192886图的实例如下:(1)(2)(3)(4)(5)(6)代码如下:public class Graph { Vertex[] vertex; public int[][] adjMat; int c...原创 2019-04-10 20:26:04 · 118 阅读 · 0 评论 -
二叉排序树的创建与中序遍历
概述:二叉排序树也叫二叉查找树,二叉搜索树:BST,对于二叉树中的任何一个非叶子节点,要求左节点比当前节点值小,右子节点比当前节点值大。生成二叉查找树的流程//代理类public class BinaryTree { Node root; public void setRoot(Node root){ this.root = root; ...原创 2019-04-02 21:05:29 · 1084 阅读 · 0 评论 -
二叉排序树中节点与父节点的查找
直接上代码public class Node{ int value; Node left; Node right; public Node(int value){ this.value = value; } public void add(Node node){ if(node==null){ ...原创 2019-04-02 21:08:19 · 1622 阅读 · 0 评论 -
剑指offer矩阵中的路径问题
一、题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因...原创 2019-04-08 20:46:56 · 165 阅读 · 0 评论 -
剑指offer【二叉搜索树的后序遍历序列】(java版)
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:二叉搜索树又叫二叉排序树,它的父节点总是大于左子节点(如果左子节点不为空),总是小于右子节点(如果右子节点不为空)。且对二叉搜索树进行中序遍历,得到一个有序升序序列。(1).基于此性质,我们可知对一个二叉搜素树进行后续遍历,则最后...原创 2019-04-09 23:36:24 · 100 阅读 · 0 评论 -
JAVA实现Huffman编码(赫夫曼编码)
思路:把字符串转化为字节数组,对字符串中不同字符出现的次数进行统计,统计结果存储到一个Map中 键为字符字节,值为此字符字节在字符串中出现的次数 创建赫夫曼树 读取每一个字符字节的路径方向值,把字符串中的每个字符用路径方向值来表示 把得到的二进制字符串切分为有符号字节存储到字节数组中 打印原字符串,二进制字符串,字节数组 代码如下://Node类用于创建树结构publi...原创 2019-02-17 13:47:02 · 483 阅读 · 0 评论