自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 算法题之填充每个节点的下一个右侧节点指针 II

算法题之填充每个节点的下一个右侧节点指针 II题目描述题解java代码public class FillUpRightNode { /* *给定一个二叉树:填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 * 输入:root = [1,2,3,4,5,null,7] * 输出:[1,#,2,3,#,4,5,7,#] * */ public static void mai

2020-09-30 16:42:31 149

原创 算法题之求基数x的n次方

算法题之求基数x的n次方题目描述题目分析我们先来看两个例子:代码实现//利用递归和二分法进行计算 public double myPow(double x,int n) { if (n == 0) { return 1; } //如果n为负数:则将其改为负数,并将1/x提取出一个 if (n < 0) { //由于n若为Integer.MIN_VALUE,即-2^3

2020-09-28 19:55:24 694

原创 算法题之求所有从根节点到叶子节点路径总和等于给定目标和的路径问题

算法题之求所有从根节点到叶子节点路径总和等于给定目标和的路径问题题目描述思路图解代码实现方式1 public List<List<Integer>> pathSum(TreeNode root, int sum) { //定义存储最后结果的list集合 List<List<Integer>> res = new ArrayList<>(); //定义sub存储每一次满足要求的结果集

2020-09-28 19:04:38 930

原创 算法题之中序后序构建二叉树(以及前序中序构建二叉树)

算法题之中序后序构建二叉树(以及前序中序构建二叉树)题目描述中序与后序遍历构建二叉树思路分析代码实现public class FindBinaryTreeByInfixAndPost { //定义两个中序数组和后序数组属性 int[] inorder; int[] postorder; //定义属性post_idx记录每一 次的根结点位置 int post_idx; //定义一个hashmap:存储中序遍历结果 HashMap<Int

2020-09-25 16:36:12 243 1

原创 算法题之字符串的Z字变换

算法题之字符串的Z字变换题目描述题解代码实现import java.util.ArrayList;import java.util.List;public class ZWordExchange { /* * 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 * 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时, * 排列如下: * L C I R * E T O E S I

2020-09-25 09:59:41 204

原创 算法题之求字符串的最长回文子串(中间扩散法,动态规划)

算法题之求字符串的最长回文子串(中间扩散法,动态规划)题目描述回文串:是一个正读和反读都一样的字符串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”题解1:中间扩散法代码实现public String longestPalindromeByMidEx(String s) { //如果s长度为0

2020-09-23 14:54:55 410

原创 算法题之监控二叉树问题

算法题之监控二叉树问题问题描述给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例 1:输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。示例 2:输入:[0,0,null,0,null,0,null,null,0]输出:2解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。题解代码实现package com.

2020-09-22 16:38:33 162

原创 算法题之求最大不重复子串的个数(滑动窗口)

算法题之求最大不重复子串的个数(滑动窗口)题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkpw”输出: 3解释: 因为无重复字符的最长子串是 “kpw”,所以其长度为 3。题解(滑动窗口)以输入: "pwwkp

2020-09-22 10:04:48 1966 3

原创 算法题之求子集问题

算法题之求子集问题题目描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。输入: nums = [1,2,3] 输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]题解代码实现package com.bingym.algorithm.recursionproblems.subset;import java.util.ArrayList;import java.util.Arrays;impo

2020-09-21 10:03:51 620

原创 递归回溯问题总结(迷宫问题,匹配路线问题,王子找公主问题)

递归回溯问题总结(迷宫问题,匹配路线问题,王子找公主问题)递归回溯问题回溯法概述:用回溯法解决的问题的所有选项可以形象的用树状图结构进行描述,在某一步有n个可能的选项.那么该步骤可以看成是树状结构中的一个节点,每个选项看成树中节点连接连接线,经过这些连接线到达该节点的n个子节点,树的叶节点对应着终结状态.如果在叶节点的状态满足题目中的约束条件,那么我们即找到了一个可行的解决方案;如果叶节点的状态不满足约束条件,只能回溯到上一个节点再继续尝试其他的选项,如果上一个节点的所有可能的选项都已经试过,并且不

2020-09-20 19:17:13 443

原创 算法题之输出字符串的数字

算法题之输出字符串的数字题目描述请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中

2020-09-19 16:26:31 2257

原创 算法题值秋叶集问题(动态规划实现)

算法题值秋叶集问题(动态规划实现)题目描述小扣出去秋游,途中收集了一些红叶和黄叶,他利用这些叶子初步整理了一份秋叶收藏集 leaves, 字符串 leaves 仅包含小写字符 r 和 y, 其中字符 r 表示一片红叶,字符 y 表示一片黄叶。出于美观整齐的考虑,小扣想要将收藏集中树叶的排列调整成「红、黄、红」三部分。每部分树叶数量可以不相等,但均需大于等于 1。每次调整操作,小扣可以将一片红叶替换成黄叶或者将一片黄叶替换成红叶。请问小扣最少需要多少次调整操作才能将秋叶收藏集调整完毕。示例 1:输入

2020-09-17 18:55:47 271

原创 算法题之两数之和(链表实现)

算法题之两数之和(链表实现)题目描述给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路分析由于思路1不能完成最

2020-09-17 10:55:29 491

原创 算法题之二叉排序树的翻转(递归实现)

算法题之二叉排序树的翻转(递归实现)题目描述题目分析题解思路:从头结点遍历整颗二叉树:若当前节点为null:表示已经到达叶子节点的下一个节点,直接返回若当前节点的左子树不为空:则递归进行左子树的翻转操作若当前节点的右子树不为空:则递归进行右子树的翻转操作最后,对当前节点进行翻转操作:首先定义一个辅助节点变量temp = this.left;然后将当前节点的左子树等于当前节点的右子树:this.left = this.right;最后将当前节点的右子树等于当前节点的左子树:this.r

2020-09-16 17:21:08 343

原创 算法题之判断数独是否有效问题

算法题之判断数独是否有效问题题目描述判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例 1:输入:[[“5”,“3”,".",".",“7”,".",".",".","."],[“6”,".",".",“1”,“9”,“5”,".",".

2020-09-15 16:57:08 1101

原创 算法问题之酒店预订问题(动态规划)

酒店预订问题(动态规划)题目描述你要出去旅游,有N元的预算住酒店,有M家酒店供你挑选,这些酒店都有价格X。需要你正好花完这N元住酒店(不能多,也不能少)最少能住几晚?返回最少住的天数,没有匹配的返回-1比如你有1000元,所有酒店都是大于1000的,则返回-1比如你有1000元,有1家1000元的,有1家300,有1家700。则最少能住1晚,最多住2晚(300+700)。返回1比如你有1000元,有1家387元,有1家2元,有一家611,则返回3(3家各住1天)比如你有1000元,有1家1元的

2020-09-15 08:33:03 1864

原创 m位非负整数N去掉X位数的剩下位数最小值(java代码)

m位非负整数N去掉X位数的剩下位数最小值题设给定一个用字符串表示的m位非负整数N,去掉其中的x位数以后,使得剩下的数字Y最小:注意:m>=xN不会包含前导零,即首位一定是非0数字输入:第一行:字符窗数字a第二行:x示例:输入:14323193输出:1219题目分析:该题依旧属于递归回溯问题问题分析第一次我们选择的第一个数将其加入集合中,然后递归选择第2个,第3个…直到集合的size等于我们去掉X个数以后剩余K位数的K,此时我们需要对其进行判断:(1)如果此时我们集合中

2020-09-14 18:52:25 1138

原创 HashMap高阶笔记讲解

HashMap高阶笔记讲解1.HashMap集合简介​ HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。​ JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突**(两个对象调用的hashCode方法计算的哈希码值一致导致计算的数组索引值相同)*

2020-09-14 17:12:18 522

原创 组合求和问题(java实现)

组合求和问题(java实现)题设题目分析举例图解java代码实现package com.bingym.algorithm.mergenum;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class MergeNumDemo { static int num[] = {0,1,2,3,4,5,6,7,8,9}; public static void ma

2020-09-12 13:07:39 515

原创 java实现ArrayList和LinkedList[包含接口List和抽象类AbstractList]

java实现ArrayList和LinkedList[包含接口List和抽象类AbstractList]图解首先我们需要定义一个MyList的接口,将ArrayList和LinkedList共同的方法进行定义package com.bingym.list.mylist;public interface MyList<E> { //自定义List接口:内部包含了List的抽象方法 int size();//获取集合的大小 boolean isEmpty();/

2020-09-11 15:29:14 435

原创 双向链表实现(java)

双向链表实现(java)java代码实现package com.bingym.linkedlist.doublelist;public class DoubleLinkedList { //双向链表:既存在一个节点的后向节点next域,同时也存在一个节点的前向节点pre //定义属性:头结点head,不包含任何信息,只是作为一个头结点 private Node head = new Node(0,""); public Node getHead() {

2020-09-11 14:59:06 138

原创 单向链表实现(java代码)

单向链表实现以及常见的面试题收录(java代码)Java代码package com.bingym.linkedlist;import java.util.Stack;public class SingleLinkedListByOrder { //实现单向链表功能:链表的添加add(可以按照编号index进行插入),链表内容的打印 //内部需要包含一个节点类:内部类/外部类都可以 //定义单向链表的属性 private Node head =new Node(

2020-09-11 14:56:19 495

原创 ArrayList简单实现API

ArrayList简单实现APIArrayList简单介绍ArrayList底层是使用动态数组生成的,若在创建ArrayList集合时,未指定其容量,则在添加元素时,会进行扩容处理,第一次会将空的集合扩容为10,后面若添加元素仍然超过其最大容量,则将其每次都扩容为原来长度的1.5倍;下面自定义完成集合ArrayList的创建,其中包含简单的API:空参构造方法添加元素的方法: add(E e)获取集合长度的方法: getSize()根据集合的索引获取元素的方法: get(int index)

2020-09-10 11:28:32 160 1

原创 JVM学习笔记汇总:结合尚硅谷宋红康老师视频教程及PPT

JVM学习笔记汇总:结合尚硅谷宋红康老师视频教程及PPT第一章:JVM虚拟机的介绍1.1虚拟机的分类虚拟机通常分为两类:系统虚拟机和程序虚机。其中,系统虚拟机是指完全对物理计算机的仿真,而程序虚拟机是指专门为执行单个计算机程序而设计的的。我们的java虚拟机就是典型的程序虚拟机。1.2Java虚拟机的整体架构1.3 Java代码的执行流程1.4 Java的架构模型java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。具体来说,两种架构的区

2020-09-09 14:15:32 3110 2

原创 Floyd算法解决最小路径问题(Java代码实现)

Floyd算法解决最小路径问题(Java代码实现)Floyd算法问题1代码实现package com.bingym.floyd;public class FloydAlgorithmDemo2 { /* * K:1~6[表示访问的中间顶点] * i:1~6[表示访问的起始顶点] * J:1~6[表示访问的终点顶点] * 计算出每一个顶点作为起始顶点,到达其他顶点的最短路径 * 举例:k=2,i=1,j从1~6:第一轮即计算出以1顶点为起始顶

2020-09-05 10:52:14 544

原创 Dijkstra算法求解最短路径问题(java代码实现)

Dijkstra算法求解最短路径问题(java代码实现)java代码实现package com.bingym.dijkstra;import java.util.Arrays;public class DijkstraAlgorithmNoDirectedGraph { /* * 利用Dijkstra算法求解最短路径问题 * 此时为无向图,顶点分别为:'A', 'B', 'C', 'D', 'E', 'F', 'G'七个顶点 * 求解每个顶点到其

2020-09-05 08:52:17 1060 3

原创 Kruskal算法求解最小生成树问题(java代码实现)

Kruskal算法求解最小生成树问题(java代码实现)Kruskal算法求解上面的公交问题(即求解该图的最小生成树)的思路分析在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。例如,对于如上图所示的连通网可以有多棵权值总和不相同的生成树。以上图为例,来对克鲁斯卡尔进行演示(假设,用数组R保存最小生成树结果)。图解分析文字描述:第1步:将边<E,F>加入R中。边<E,F>的

2020-09-04 14:06:21 1285

原创 普利姆算法(Prim)解决修路问题

普利姆算法(Prim)解决修路问题普利姆算法应用当前问题得到的最小生成树思路图解:java代码package com.bingym.prim;import java.util.Arrays;public class PrimAlgorithm { /* * 普利姆算法: * 典型的修路问题: * 1)有胜利乡有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通 * 2)各个村庄的距离用边线表示(权) ,比如 A –

2020-09-03 21:40:19 699

原创 贪心算法(电台覆盖问题实现)

贪心算法(电台覆盖问题实现)贪心算法(1)贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法(2)贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果贪心算法问题:电台覆盖问题贪心算法求解思路第一步:第二步:第三步:第四步:第五步:java代码实现package com.bingym.greedy;import java.util.*;

2020-09-03 17:12:16 661

原创 0-1背包问题(动态规划java实现)

0-1背包问题(动态规划java实现)背包问题:我们有一个背包:背包容量为C,先存在若干个物品:每个物品i有自己的重量W[i],也有自己的价值V[i];现在需要讨论在现有背包容量不溢出的情况下,每一个物品只能放入背包一次(0-1背包问题),计算出最后背包能达到的最大价值,同时输出里面所存放那些物品;我们利用动态规划进行分析时,需要将这个大问题拆成小问题进行处理:此时我们假设添加第i(i从0到n[n为存在物品的总个数])个物品,当前容量为j(就从0到C[C为背包的容量])时所能达到的最大价值maxVal

2020-09-02 20:28:52 1474

原创 算法问题1:玩家预测问题(动态规划求解)

算法问题1:玩家预测问题(动态规划求解)玩家预测问题概述给定一个表示分数的非负整数数组。 玩家 1 从数组任意一端拿取一个分数,随后玩家 2 继续从剩余数组任意一端拿取分数,然后玩家 1 拿,…… 。每次一个玩家只能拿取一个分数,分数被拿取之后不再可取。直到没有剩余分数可取时游戏结束。最终获得分数总和最多的玩家获胜。举例:输入:[1, 5, 2]输出:False解释:一开始,玩家1可以从1和2中进行选择。如果他选择 2(或者 1 ),那么玩家 2 可以从 1(或者 2 )和 5 中进行选择。如

2020-09-02 19:51:14 608 1

原创 常见算法之分治算法(解决汉诺塔问题)

常见算法之分治算法(解决汉诺塔问题)分治算法介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治算法可以求解的一些经典问题:1.二分搜索2.大整数乘法3.棋盘覆盖4.合并排序5.快速排序6.线性时间选择7.最接近点对问题8.循环赛日程表9.汉诺塔分

2020-09-02 10:34:36 1599

原创 常见算法之二分查找(java代码实现:1.递归方式,2.非递归方式)

常见算法之二分查找(java代码实现:1.递归方式,2.非递归方式)二分查找算法:递归方式实现package com.bingym.binarysearch;public class BinarySearchByRecursion { public static void main(String[] args) { //注意:二分查找算法的序列必须为有序序列 int[] arr = {1,2,7,9,14,25,9,100};//定义需要查找的数组

2020-09-02 10:22:03 95

原创 图的广度优先遍历(BFS)---java代码实现

图的广度优先遍历(BFS)—java代码实现广度优先遍历基本思想图的广度优先搜索(Broad First Search) 。类似于一个分层搜索的过程,广度优先遍历需要使用一个队列以保持访问过的结点的顺序,以便按这个顺序来访问这些结点的邻接结点广度优先遍历算法步骤1.访问初始结点v并标记结点v为已访问。2.结点v入队列3.当队列非空时,继续执行,否则算法结束。4.出队列,取得队头结点u。5.查找结点u的第一个邻接结点w。6.若结点u的邻接结点w不存在,则转到步骤3;否则循环执行以下三个步骤

2020-09-01 16:01:02 1179 2

原创 图的深度优先遍历(DFS)---java实现

图的深度优先遍历(DFS)—java实现图遍历介绍所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: (1)深度优先遍历 (2)广度优先遍历深度优先遍历基本思想图的深度优先搜索(Depth First Search)(1)深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点, 可以这样理解:每次都在访问完当前结点后首先访

2020-09-01 12:04:52 3202

原创 图的实现(java-邻接矩阵方式实现)

图的实现(java-邻接矩阵方式实现)图:是一种数据结构,其中结点(顶点)可以具有零个或者多个相邻的结点元素,两个结点之间的连接叫做边,结点也可以称为顶点;图的表示方式:第一种:是利用邻接矩阵(用二位数组实现)来进行表示的;第二种:是利用邻接表(用数组+链表实现)来进行表示的;(1)邻接矩阵需要为每个顶点都分配n个边的空间,其实有很多边都是不存在,会造成空间的一定损失.(2)邻接表的实现只关心存在的边,不关心不存在的边。因此没有空间浪费,邻接表由数组+链表组成下面我们使用第一种方式用jav

2020-09-01 10:24:12 879 1

动态规划算法笔记总结ZIP分享

进行动态规划问题的详细总结,总结了相关的经典问题,例如0-1背包问题,完全背包问题,然后对LeetCode若干使用动态规划实现的题型进行梳理和思路分析讲解

2020-12-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除