自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 玩家传递信息

小 A 和 ta 的小伙伴们玩传信息游戏,游戏规则如下:有 n 名玩家,所有玩家编号分别为 0 ~ n-1,其中小朋友 A 的编号为 0每个玩家都有固定的若干个可传信息的其他玩家(也可能没有)。传信息的关系是单向的(比如 A 可以向 B 传信息,但 B 不能向 A 传信息)。每轮信息必须需要传递给另一个人,且信息可重复经过同一个人给定总玩家数 n,以及按 [玩家编号,对应可传递玩家编号] 关系组成的二维数组 relation。返回信息从小 A (编号 0 ) 经过 k 轮传递到编号为 n-1 的小.

2021-10-04 09:37:06 203

原创 跳台阶问题

给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。public static int jump(int[] nums) { int count =0; for (int i=nums.length-1;i>=0;i--){ if (i == 0) { break.

2021-09-26 18:33:26 142

原创 乘积最大问题

给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。求最大乘积,看到这种求最值问题的,首先想到的就是用动态规划。1、如果n为1,dp[1] = 1;2、如果n大于等于2,它的状态方程为,dp[i] = Max(dp[i],dp[j]*[i-j]),但dp[j]也是经过拆分的,需要判断合并是否比拆开乘积更大。代码如下:public static int integerBreak(int n) { .

2021-09-26 17:25:24 643

原创 背包 问题

/*** 背包问题:有n个物品和一个大小为m的背包,给定数组A表示每个物品的大小和数组V表示每个物品的价值* 问最多能装入背包的总价值是多大?* 转换问题为:从n个商品中做选择,当包的大小为m时的最大价值* 状态F(i,j):从i个商品中做选择,当包的大小为j时的最大价值* (1)A[i-1]<=j: 不放:F(i,j)=F(i-1,j) 放:F(i,j)=F(i-1,j-A[i-1])+V[i-1]* F(i,j) = Math.max(F(i-1,j),F(i-1,j-A[i-1.

2021-08-22 17:04:41 127

原创 用户登录界面测试用例

2021-08-07 09:28:08 336

原创 MyBatis持久层框架来了

在开发JAVA项目时,需要和数据库进行交互,最开始的数据库编程,我们选用的是JDBC,它就是数据库和JAVA程序之间如何交互的API,但是步骤比较繁琐。今天我们就来学习一个最新的数据库框架,它就是MyBatis,它是一个半自动的持久层框架,为什么说是半自动的呢,因为它还需要手动编写SQL语句,所以称为半自动框架。那么它和JDBC相比,优势在于哪呢?下面画个图给大家看下:相比于JDBC,大大简化了数据库的操作步骤,但是配置可能会麻烦一点。1、MyBatis中的重要概念sqlSession顾名.

2021-08-06 12:35:15 177

原创 股票的最大利润

题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?解法一:暴力解法两层循环,对于每一个数,都去计算它与前面的数差的最大值。public int maxProfit(int[] prices) { if(prices.length==0)return 0; int max_Profit=0; int price = 0; for(int i=1;i<prices.length;i++)

2021-07-30 18:22:14 94

原创 丑数问题来了

题目是这样的,我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。对于这个题呢,我们可以运用数学思维去解决,丑数是只包含质因子的数,那么可以反过来想,就是一个数乘以2、3或5得到该丑数。由于需要保持从小到大,所以取3种乘积情况下的最小值。对于三个乘系数不同可以设置三个指针 (每个指针都从第一个丑数的位置开始), 若每次取得的最小值与其中一个或多个相等,这多个指针都会移动(因为会出现由于不同乘积而得到的重复值)。运用动态规划解法如下: pu..

2021-07-29 21:21:37 77

原创 最长不含重复字符的子字符串

居然在剑指offer里刷到了这道题,记得虾皮一面的时候面试官就给了我这道题,当时思路有点混乱,没有做出来。今天刷到了之后,经过几番调试,终于做出来了。 这道题做法其实很多,我一开始就想着用map存储,但是无法获取下标,所以进展不下去,后面还是两层循环弄了出来。第二层循环从后往前,只要遇到相同的,长度len直接等于**i-j**。代码如下:public int lengthOfLongestSubstring(String s) { char[] chars = s.toCharArr.

2021-07-28 23:00:53 76

原创 把数字翻译成字符串

这几天做了一些关于数字的题,数字组合最小,数字翻译成字符串,数字的二进制运算。下面是其中一道:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。这道题也不说多难吧,就比较典型,既可以用递归也可以使用动态规划,看题解:0-25之内的数字都有对应的字母,这个区间内的数字,都可以进行重组。大于25或者小于10的数字都只有一

2021-07-24 12:54:51 104

原创 重建二叉树

今天刷了一下二叉树的题,刷到了重建二叉树,题是这样的:给出二叉树的先序和中序遍历序列,重建该二叉树。一说到二叉树的题,我们都知道递归是用得最多的,比如二叉树的前中后序遍历,用递归特别简单易懂。所以碰到二叉树的题,我们可以先用递归思路思考下,果不其然,这道题递归同样也适用,接下来讲解一下递归的思想:首先可以用list存储中序遍历数组的元素,用它存储的原因在于,后面可以查询下标;第二步, 从前序遍历数组中取出第一个元素,我们都知道它是根结点,所以二叉树的根结点就找到了;记录此时根结点的索引i

2021-07-22 19:24:05 64

原创 剪绳子问题

题目:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。这是剑指offer里的一道题,一看最值问题大概率就是动态规划了,这道题也不例外,思考一会儿之后,我就确定了它可以利用动态规划的思想解决。可以理解成长度为i的绳子,分成j段时的最大乘积.

2021-07-21 19:53:10 87

原创 和为s的两个数字

文章目录前言一、题目二、题解三、代码前言一、题目输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。二、题解这道题其实可以设置两个指针,左指针left,右指针right;在大循环里设置left<right;1、如果nuns[left]+nums[right]==target,则输出nums[left],nums[right];2、如果nums[left]+nums[right]<target,因为是递增数组,

2021-07-17 17:46:28 58

原创 Spring框架来了

文章目录前言一、Spring是什么?二、为什么要用Spring?三、SpringBoot又是什么?1、SpringBoot2、SpringBoot的优点四、SpringMVC又是啥呢?总结前言前几天发布了自己用Spring改造过的博客系统,还没有系统讲过Spring,今天就来看看Spring到底是何方神圣!!!一、Spring是什么?Spring是一个开源框架,于2003年兴起的一个轻量级的JAVA开发框架。为了解决企业级应用开发的复杂性而创建的,使用Spri可以让简单的JavaBean实现之前只有

2021-07-15 20:32:15 150

原创 矩阵的顺时针旋转打印

今天第二次刷剑指offer,刷到了一个矩阵题,感觉挺有意思,想把它记录下来,题目是这样的输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。从四个方向打印,分析如下:(1)从左到右,top++;(2)从上到下,right–;(3)从右到左,bottom–;(4)从下到上,left++;代码如下: public static int[] spiralOrder(int[][] matrix) { if (matrix.length == 0) {

2021-07-14 20:26:50 109

原创 经典字符串例题

文章目录前言一、String、StringBuffer、StringBuilder三者的区别二、关于字符串的一些经典例题1.两个字符串的最长公共子串1.常规解法2.动态规划解法2.最长回文字符串1.常规解法2.动态规划解法3.字符串所有排列总结前言字符串虽然只是JAVA中的一种引用类型,深入学习,会发现关于字符串的问题真的不是一星半点,我们都知道String定义的是不可变的字符串,所以提供了StringBuilder和StringBuffer来对字符串进行修改,三者有什么区别呢?一、String、St

2021-07-10 15:53:57 742

原创 经典单链表反转三解法

文章目录前言一、递归解法二、迭代解法二、头插法总结前言单链表真的是面试中考得最多的一道题,看似简单,但是当面试官问你还有优化的方法吗?你还能从容给面试官讲出优化的方法吗?今天我们就来看看反转单链表的几种方法。一、递归解法递归解法就是不断将一个大问题不断拆解,直到找到一个小问题的解能够代表全局的解,这就是递归,那么反转链表的Basecase就是当只有一个节点,或者没有node,也就是if (node == null || node.next == null) { retur

2021-07-10 15:34:56 279

原创 HTTP的几个重要版本演变

文章目录前言一、HTTP1.0二、HTTP1.1三、HTTP/2四、HTTPS总结前言在上次发了一篇关于HTTP的文章之后,后来又去了解了HTTP的发展史,简直是浪漫充满曲折,今天就来看看HTTP经历了哪些过程才形成了今天这个伟大的局面。一、HTTP1.0我们知道HTTP最开始是没有密文传输的,也没有长连接,也不支持多次请求;在最开始的时候,HTTP的1.0版本的时候,HTTP只支持短连接,相比之前,增加了POST、HEAD等新方法,响应状态码也是这时候才有的,引入了头部,即请求头和响应头,在请求中

2021-07-09 19:25:23 313

原创 Spring实现博客系统

在上次用Servlet实现了博客系统之后,一直觉得代码写起来比较繁琐,而且耦合度很高。直到学习了Spring,我又看到了一线生机,运用SpringBoot重新改造了我的博客系统,接下来讲讲Spring是个什么东西,并把我的改造思路给大家分享下。 1、什么是SpringSpring简直是个神奇的东西,它向所有的对象提供它所需的东西,同时也把对象所需要的东西提供给对方,大大降低了代码之间的耦合度。所有对象的销毁和创建都由Spring掌控,在Spring中有个主要概念,就是控制反转,那么什么是控制...

2021-07-07 17:50:09 691 1

原创 网络的发展过程

没有一个计算机是信息孤岛促使着计算机网络的出现和发展。有了计算机,我们从工业时代转入信息时代,而有了计算机网络,我们又从信息时代转入到了网络时代。由于使用计算机的人数不断增加,计算机也经历了一系列的发展,最初的大型通用计算机->超级计算机->小型机->个人电脑->便携式电脑->智能手机终端等都是这个过程的产物。计算机网络也由独立模式演变为网络互联模式。 计算机网络按规模划分,有广域网(WAN)和局域网(LAN),局域网一般用在某个小的区域里,距离较远的地方一般使用广域网。计..

2021-06-23 08:31:12 1802

原创 有了锁,再也不用害怕多线程不安全了

引入了线程之后,线程安全问题随之而来,所以就有了锁的概念,引入锁之后又有了锁的升级,锁的分类,下面就让我们详细了解锁;一、锁的分类1、乐观锁乐观锁即表达一种乐观思想,认为读多写少,遇到并发写的情况可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作。java中的乐观锁基本都是通过CAS实现操作实现的,CAS是一种更新的原子操作(比较当前值跟传入值是否一样,一样则更新,否则失败)。2、悲..

2021-06-14 23:25:07 131

原创 2021-06-12

Java 堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法 ;年老代主要使用标记-整理垃圾回收算法,因此 java 虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6 中 Sun HotSpot 虚拟机的垃圾收集器如下:一、Serial 垃圾收集器 垃圾收集器 (单线程、复制算法)Serial是最基本垃圾收集器,使用复制算法,曾经是JDK1.3之前新生代唯一的垃圾收集器。Serial 是一个单线程的收集器,它不但只会使用一个 CPU 或...

2021-06-12 20:59:43 56

原创 JVM垃圾收集机制

**Java 堆从 GC 的角度还可以细分为: 新生代( Eden 区 、 From Survivor 区 和 To Survivor 区 )和老年代。**1. 新生代是用来存放新生的对象。一般占据堆的1/3空间。由于频繁创建对象,所以新生代会频繁触发MinorGC 进行垃圾回收。新生代又分为 Eden 区、ServivorFrom、ServivorTo 三个区。1.1 Eden 区Java新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当Eden区内存不够的时候就会触发

2021-04-25 09:32:34 100

原创 饿汉模式的实现

学习设计模式之后,我们会接触到单例模式,单例模式呢有两种实现,饿汉模式和懒汉模式,饿汉模式相对比较简单,就是一开始就把对象创建好,需要了就直接调用就行,那么懒汉模式则是等到要用的时候才去创建对象,这就涉及到重复创建的问题。下面来看单例模式的几种实现1.不好的解法一:只适用于单线程场景public class SingletonDemo1 { private static SingletonDemo1 instance; private SingletonDemo1(){};

2021-04-21 21:48:43 249 2

原创 一道解不出的题

链表真的是有点转不过来,今天又做了一道链表题,调了半天问题也没解决,先放着,提醒自己记得解决。public static ListNode minSequenceListNode(ListNode head){ if (head.next==null) { return head; } //用来统计链表总节点数 int count =1; ListNode tmp = head;

2021-04-18 22:39:38 64

原创 蓝桥杯--国赛题

1.将 2019 拆分为若干个两两不同的完全平方数之和,一共有多少种不同的方法?注意交换顺序视为同一种方法,例如 132 + 252 + 352 = 2019 与 132 + 352 +252 = 2019 视为同一种方法。static int count =0; public static void main(String[] args) { dfs(0, 45, 2019); System.out.println(count); } pri

2021-04-17 15:40:10 273

原创 搜索算法----DFS

今天来看看搜素算法之一-----深度优先搜索,对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。来看一些例题:1.有三个盒子,还有三个小球,要把每个小球放入三个袋子中,有多少种方法, 每个盒子的处理逻辑:尝试处理手里的每一张牌,拿一张牌放入盒子,再去处理下一个盒子。 public static void DFS(int[] box, int[] used, int idx) { //盒子全部处理完毕 if (idx == box.length...

2021-04-12 19:29:16 136

原创 蓝桥杯--省赛题4

今天来看道蓝桥杯的动态规划题:题目描述小蓝在一个 nn 行 mm 列的方格图中玩一个游戏。开始时,小蓝站在方格图的左上角,即第 11 行第 11 列。小蓝可以在方格图上走动,走动时,如果当前在第 rr 行第 cc 列,他不能走到行号比 rr 小的行,也不能走到列号比 cc 小的列。同时,他一步走的直线距离不超过 33。例如,如果当前小蓝在第 33 行第 55 列,他下一步可以走到第 33 行第 66 列、第 33 行第 77 列、第 33 行第 88 列、第 44 行第 55 列、第 44 行第

2021-04-10 22:28:02 515

原创 2021-04-09

学了字符串,做了字符串的一些相关题总结如下:package InterviewImportant.DP;import java.util.ArrayList;import java.util.Collection;import java.util.Collections;import java.util.List;public class MyString { public static void main1(String[] args) { int[] ar =

2021-04-09 21:06:08 58

原创 二叉树题

我们学了数据结构中的二叉树,那么我把二叉树相关例题做了之后,总结如下:package InterviewImportant.DS;import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;import java.util.Queue;class TreeNode{ char val; TreeNode left; TreeNode right; publ

2021-04-09 21:04:07 78

原创 链表题

学了链表,我把链表的相关题做了一下,并总结如下:package InterviewImportant.DS;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;class ListNode{ public int val; public ListNode next; public ListNode(int val) {

2021-04-09 21:01:52 62

原创 蓝桥杯--省赛题3

public static void main(String[] args) { //x 3/ 半分钟后吃掉一个Y 之后每隔一分钟吃掉一个Y //Y 2/ // X=10; Y=89; 60分钟后Y=? long x =10; long y=90; for (int i=1;i<=60;i++){ y-=x; if (i % 2 == 0) {...

2021-04-09 20:55:32 106

原创 蓝桥杯--省赛题2

//求[1,2020]有多少个2 public static void main1(String[] args) { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); int n = sc.nextInt(); int count =0; for (int i=m;i<=n;i++){ int e = i;...

2021-04-09 20:47:45 52

原创 蓝桥杯--省赛题

//康威生命游戏 public static long sumisAliveCell(int[][] dp, long k) { int sum = 0; //k表示迭代代数 while (k > 0) { //设置一个二维数组,让它等于原始数组dp int[][] map = new int[dp.length][dp[0].length]; for (in...

2021-04-09 20:43:03 74

原创 动态规划

//给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 public static int minPathSum(int[][] grid) { if (grid.length == 0) { return 0; } int row = grid.length; int col = grid[0].length; ...

2021-04-09 20:37:01 63

原创 类加载机制及类加载器

我们都知道java中类有很多,所有的类并不是一开始就放入了虚拟机中,只有当需要用到它的时候,系统才会去调用它,所以才用到了类加载器,这是一个动态的过程,除了动态加载类以外,还会动态初始化类,对类进行动态链接。一、类加载器java中有三种类加载器。每个类加载器在创建的时候已经指定他们对应的目录, 也就是说每个类加载器去哪里加载类是确定的,下面是三种类加载器和他们对应的路径:1.BootStrapClassLoader(根类加载器),用来加载JRE/lib/rt.jar中的类,java的核心类,用原生代

2021-03-12 11:23:43 220

原创 JVM内存管理

我们学了C语言,知道它的内存分为数据段和代码段,数据段里面存放了静态变量、全局变量,还包含了堆栈;那么java中,内存是怎么划分的呢?我们平时所说的java内存的划分其实就是指JVM的内存划分。我们先来看看类加载流程类加载的过程,这里就不再详述了,我们可以看到图中有一个运行时数据区,那么它就是java虚拟机的内存,这个区域又划分为运行时数据私有区域和运行时数据共有区域。私有区域又包含了程序计数器、java虚拟机栈、本地方法栈,公有区域包含堆、方法区,下面分别来看看这几个区域。一、运行...

2021-03-12 09:44:13 67

原创 堆—特殊二叉树

我们了解了树形结构之后,知道了二叉树,但是二叉树的具体用途我们还是不知道,今天就来看看一种特殊的二叉树–堆,它是一种完全二叉树,著名的topK问题就是用堆来求取的。可以求出一组数中的最大或者最小的元素。所使用的堆就是大根堆、小根堆,所谓大根堆就是根结点的值大于左右子树节点的值,反之就是小根堆了。先建个堆给大家看看,这里以建大堆为例,建堆呢,它有两个方法,向下调整和向上调整。输入一个数组进行测试:从结果可以看出我们的建堆操作成功,下面来看向上调整:同样输入数组进行测试:看完建堆之后,我们来看

2021-01-27 21:19:41 164 2

原创 数据结构之二叉树

1.二叉树的引入学习了链表结构之后,我们会发现链表中的数据始终是一对一的关系,今天我们来看看更深一层的数据结构–树型结构,它属于一对多的关系。下面是树形结构的示例:对于一棵树来说,它有以下这些概念:节点的度:一个节点含有的子树的个数称为该节点的度,如上图A的度为3;树的度:一棵树中,最大的节点的度称为树的度;叶子节点:度为0的节点,如上图E、F、G、H;双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点,如上图A是B的父节点;孩子节点或子节点:一个节点含有的子树的根结点称

2021-01-26 21:31:17 288 2

原创 数据结构之栈和队列

前面我们回顾了数据结构中的线性表(List),今天来看看栈和队列。在数据结构中,事物之间总是会满足某种关系,比如一对一,一对多,多对多,而栈和队列也跟List一样属于一对一的关系。两者基于list实现,比list更严格,操作也受到限制。1、栈的原理和基本实现栈是一种特殊的线性表,它只允许在固定的一端进行数据的插入或者删除,进行删除或者操作的一端叫栈顶,反之另一端叫栈底。栈中的数据元素遵循先进后出的规则,简称FILO。栈的实现方式也有很多种。(1)数组实现2、队列的原理和基本实现队列只允许在一端插

2021-01-24 21:52:58 170 2

空空如也

空空如也

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

TA关注的人

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