- 博客(94)
- 收藏
- 关注
原创 Tomcat假死问题
加上自己的代码Thread.currentThread().getStackTrace(),使用Maven打包成class文件,替换到rt.jar包中,替换到jdk里面启动Tomcat。经过排查,得出如下结论,线上使用的Tomcat7版本,其中ws功能调用了底层方法AsyncChannelWrapperSecure()方法,其中该close方法中,没有shutdown方法。过一星期左右,又假死,监控发现内存利用率也就18G左右就假死,而且这次是远程连接服务器都连不上,只能重启Linux系统。
2024-05-19 17:18:24
639
原创 linux服务器安装JRebel实现远程热部署功能
系列文章目录文章目录系列文章目录前言一、安装和设置JRebel二、本地使用步骤1.前置工作2.工程配置3.测试使用总结前言 JRebel是一套JavaEE开发工具。Jrebel 可快速实现热部署,节省了大量重启时间,提高了个人开发效率。 JRebel是一款JAVA虚拟机插件,它使得JAVA程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。JRebel使你能即时分别看到代码、类和资源的变化,你可以一个个地上传而不是一次性全部部署。当程序员在开发环境中对任何一个类或者资源
2022-04-12 10:34:47
3016
1
原创 个人笔记之HTTP,HTTPS,TCP
目录1.http简介2.http工作原理3.http消息结构3.1请求报文3.1.1请求行3.1.2请求头部3.1.3空行3.1.4请求数据3.2响应报文3.2.1状态行3.2.2消息报头3.2.3空行3.2.4响应正文4.https的介绍5.https的工作原理6.TCP报文结构7.TCP的三次握手7.1为什么要三次握手8.TCP四次挥手8.1为什么要等待2MSL1.http简介 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传
2020-09-07 21:45:19
384
原创 1.Springboot之配置文件
目录标题1.配置文件2.YAML2.1基本语法:2.2数据类型:2.2.1字面量:普通的值2.2.2对象、Map(属性和值)(键值对):2.2.3数组(List、Set):3.配置文件值注入3.1松散绑定(松散语法)和@value值注入方式3.2@Value获取值和@ConfigurationProperties获取值比较4.加载指定的配置文件4.1@PropertySource加载指定的properties4.2@PropertySource加载指定的YAML1.配置文件 SpringBoot使用一
2020-08-16 22:50:36
470
原创 IDEA开发中实用的插件和技巧(持续更新中...)
目录标题1.热部署和热加载1.热部署和热加载 在搭建springboot项目中往controller类加入注解@RestController(@RestController + @RequestMapping)后,我们就可以通过http请求访问结果,可当我修改代码或增加文件后,我想要通过http请求访问最新结果就需要一遍又一遍地在IDEA中重新启动项目。这时使用devtools可以节省你的时间 <dependency> <groupId>
2020-08-15 22:45:46
605
原创 java中的equal()方法和==的区别
目录1.两者对比的原理2.扩展知识(值传递和引用传递)2.1搞清楚基本类型和引用类型的不同之处2.2搞清楚赋值运算符(=)的作用1.两者对比的原理 这里所说的“==”是指对比两个对象是否相同的操作,即比对的是两个变量或实例是不是指向相同的引用(指针比较); equal()方法对比的则是两个变量会实例所指向内存中存储的值是否一致,即对比的相对应实例或对象的值是否相同;下面使用例子来说明一下。 String s1 = new String("hehe"); Strin
2020-08-14 17:16:49
946
原创 手摸手教你Docker的入门
目录1.Docker的介绍1.1什么是docker1.2docker的应用场景1.3docker的优点1.4docker的核心概念2.Docker的下载2.1手摸手教你安装centos72.2在linux虚拟机上安装docker3.Docker常用命令&操作3.1镜像操作3.2容器操作4.Docker镜像原理4.1UnionFS4.2Docker镜像加载原理4.3为什么使用分层4.4docker-commit操作5.Docker容器数据卷5.1容器数据卷是什么和能干嘛?5.2数据卷操作5.2.1添加
2020-08-14 15:00:24
806
原创 浅谈HTTP报文,以及HTTP和TCP的区别
目录1.HTTP请求报文1.1请求行:1.2请求头:1.3请求体:2.HTTP响应报文2.1响应行:2.2响应头:2.3响应体:3.HTTP和TCP的区别:1.HTTP请求报文 HTTP有两种报文:请求报文和响应报文。HTTP请求报文主要包括请求行、请求头以及请求的数据(实体)三部分。1.1请求行: ①是请求方法,都是大写,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。 ②为请求对应的URL地址,它和报文头的Host属性组
2020-08-14 12:21:21
2298
原创 Java Scanner 类的next,nextLine,nextxxx
目录1.介绍2.next方法3.nextLine方法4.演示标题5.nextxxx1.介绍 java.util.Scanner是Java5的新特征,我们可以通过 Scanner 类来获取用户的输入。下面是创建 Scanner 对象的基本语法:Scanner in = new Scanner(System.in);2.next方法一定要读取到有效字符后才可以结束输入。对输入有效字符之前遇到的空白,next()方法会自动将其去掉。只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
2020-08-05 16:12:29
371
原创 52.剑指Offer之字符串的排列
目录1题目描述:2解题思路3.编程实现(Java):1题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。2解题思路 本题有以下三种解法: 第一种:先按照next复制,然后依次添加random指针,添加时需要定位random的位置,定位一次需要一次遍历,需要O(n^2)的复
2020-07-28 18:04:16
188
原创 51.剑指Offer之复杂链表的复制
目录1题目描述:2解题思路3.编程实现(Java):1题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。2解题思路 本题有以下三种解法: 第一种:先按照next复制,然后依次添加random指针,添加时需要定位random的位置,定位一次需要一次遍历,需要O(n^2)的复杂度。 第二种:先按照next复制,然后用
2020-07-27 14:43:08
210
原创 res.add(new ArrayList<>(path))和res.add(path)的区别
目录1问题描述:2.例子测试1问题描述: 在链表path里面添加值,然后把path链表添加进res链表中,在做算法题的时候,平时使用res.add(path),结果发现输出打印为空,查了资料如下: public static ArrayList<Integer> path = new ArrayList<>(); public static ArrayList<ArrayList<Integer>> res = new ArrayLis
2020-07-27 12:41:42
3787
7
原创 50.剑指Offer之二叉树中和为某一值的路径
目录1题目描述:2解题思路3.编程实现(Java):1题目描述: 输入一颗二叉树的根结点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)2解题思路 本题实质上就是深度优先搜索。使用前序遍历的方式对整棵树进行遍历,当访问到某一个结点时,将该结点添加到路径上,并且累加该结点的值。当访问到的结点是叶结点时,如果路径中的结点值之和正好等于输入的整数,则说明是一条符合要求的路
2020-07-27 12:30:25
318
原创 49.剑指Offer之二叉搜索树的后序遍历序列
目录1题目描述:2.1后序遍历2.2解题思路3.编程实现(Java):1题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。2.1后序遍历 后序遍历:左子树 —> 右子树 —> 根结点,上面二叉搜索树输出{5,7,6,9,11,10,8}。2.2解题思路 对于后续遍历序列,序列的最后一个值一定是树的根结点,而由二叉搜索树的性质:左小右大,我们可以从头开始遍历,当遍历到某个值比根结
2020-07-25 20:18:30
198
原创 48.剑指Offer之包含min函数的栈
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。2.解题思路 使用两个stack,一个为数据栈,另一个为辅助栈。数据栈用于存储所有数据,每次压栈的最小元素(之前的最小元素和新压入栈中的元素,二者的较小值)保存起来放入辅助栈。3.编程实现(Java):public class minFunction_48 { Stack<Integer> stack =
2020-07-25 19:58:07
248
原创 47.剑指Offer之顺时针打印矩阵
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.2.解题思路 由于是按照从外到内的顺序依次打印,所以可以把矩阵想象成若干个圈,用一个循环来打印矩阵,每次打印矩阵中的一圈。而对于每一圈的打印,很自然便可以想到遵循
2020-07-25 12:08:59
183
原创 46.剑指Offer之树的子结构
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)2.解题思路 要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步,在树A中找到和树B的根结点值一样的结点R;第二步,判断树A中以R为根结点的子树是不是包含和树B一样的结构。 对于这两步,第一步实际上就是树的遍历,第二步是判断是否有相同的结构,这两步都可以通过递归来实现。 以上面为例,先在A中找到值为8的节点,接着判
2020-07-24 20:51:31
219
原创 45.剑指Offer之链表中倒数第k个结点
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 输入一个链表,输出该链表中倒数第k个结点。2.解题思路 对于单链表来说,没有从后向前的指针,因此一个直观的解法是先进行一次遍历,统计出链表中结点的个数n,第二次再进行一次遍历,找到第n-k+1个结点就是我们要找的结点,但是这需要对链表进行两次遍历。 为了实现一次遍历,我们这里采用双指针解法。我们可以定义两个指针,第一个指针从链表的头指针开始先向前走k步,第二个指针保持不动,从第k+1步开始,第二个指针也从头开始前进,两个指针
2020-07-24 20:32:42
240
原创 44.剑指Offer之调整数组顺序使奇数位于偶数前面
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。2.解题思路 对数组进行遍历,设置两个指针even和odd,even指向当前第一个偶数,odd从这个偶数之后开始查找,找到第一个奇数,此时为了相对位置不变,不能直接交换even和odd,而是将从even到odd-1的元素都依次向后移一个位置,将odd指向的那个奇数
2020-07-24 20:24:36
257
原创 43.剑指Offer之从尾到头打印链表
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。2.解题思路 三种方法:借助栈、递归、列表的首位插入 从头到尾打印链表比较简单,从尾到头很自然的可以想到先将链表进行反转,然后再打印。但是,通常我们不希望改变原链表的结构,这是一个只读操作。因此,我们进一步分析,可以发现排在后面的先输出,这是一个典型的“后入先出”的思想,因此很自然的可以想到用栈来实现,每遍历一个结点,可以将其压入栈中,遍历结束后再逐个弹栈,将结点
2020-07-24 11:15:11
250
原创 42.剑指Offer之替换空格
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。2.解题思路 对于这个题目,我们首先想到原来的一个空格替换为三个字符,字符串长度会增加,因此,存在以下两种不同的情况:(1)允许创建新的字符串来完成替换。(2)不允许创建新的字符串,在原地完成替换。 第一种情况比较简单。对于第二种情况,有以下两种解法:时间复杂度为O
2020-07-23 14:51:13
179
原创 41.剑指Offer之二维数组中的查找
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。2.解题思路 很明显,由于该二维数组上到下递增,左到右递增的特殊性,遍历整个矩阵进行查找不是该题目的意图所在。总结规律我们可以发现:应该从矩阵的右上角或者左下角开始查找。 以右上角为例,首先选取右上角的数字,如果该数字等于要查找的数字,
2020-07-23 14:30:39
184
原创 40.剑指Offer之剪绳子
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述: 输入一个数n,意义见题面。(2 <= n <= 60)输出描述: 输出答案。示例: 输入8,输出182.解题思
2020-07-23 11:29:51
274
原创 39.剑指Offer之数据流中的中位数
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。2.解题思路 首先要正确理解此题的含义,数据是从一个数据流中读出来的,因此数据的数目随着时间的变化而增加。对于从数据流中读出来的数据,当然要用一个数据
2020-07-21 14:14:56
256
原创 38.剑指Offer之从上往下打印二叉树
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印。2.解题思路 本题可类比剑指offer第60题:把二叉树打印成多行,这两道题实际上是一回事,实际上大同小异,稍加修改即可。 本题实际上就是二叉树的层次遍历,深度遍历可以用递归或者栈,而层次遍历很明显应该使用队列。同样我们可以通过一个例子来分析得到规律:每次打印一个结点时,如果该结点有子结点,则将子结点放到队列的末尾,接下来取出队列的头重复前面的打印动作,直到队列中所有的结
2020-07-20 15:11:08
185
原创 37.剑指Offer之把二叉树打印成多行
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。2.解题思路 本题可类比剑指offer第22题:从上往下打印二叉树,这两道题实际上是一回事,只不过这里我们多了一个分行打印的要求,实际上大同小异,稍加修改即可。 在二叉树层次遍历上,我们使用的是队列,借助队列先进先出的性质实现,具体规律:每次打印一个结点时,如果该结点有子结点,则将子结点放到队列的末尾,接下来取出队列的头重复前面的打印动作,直到队列中所有的结点都
2020-07-20 15:00:07
219
原创 36.剑指Offer之二叉树的下一个结点
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。2.解题思路 中序遍历的知识补充看此博客,对于中序遍历序列来说,遵循“左->根->右”的顺序,在深刻理解中序遍历的基础上,结合一些具体的实例我们不难得出以下结论。如果一个结点有右子树,那么它的下一个结点就是它的右子树中最左边的那个结点,也就是说,从它的右子结点出发一直访问左指针,最
2020-07-20 14:13:14
177
原创 35.剑指Offer之链表中环的入口结点
目录1题目描述:2.解题思路2.1解法一 HashMap2.2解法二 快慢指针3.编程实现(Java):1题目描述: 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。2.解题思路2.1解法一 HashMap 本题是一个比较典型的链表题目,难度适中。遍历链表,并且把遍历过的节点用 HashSet 存起来,如果遍历过程中又遇到了之前的节点,说明这个节点就是我们要找到入口点。如果到达了 null 就说明没有环。public class EntryNodeOfLoop_35
2020-07-20 13:20:51
196
原创 深入理解JVM之类加载器
目录1.类加载器的作用2.双亲委派模型2.1启动类加载器(Bootstrap ClassLoader)2.2扩展类加载器(Extension Class Loader)2.3应用程序类加载器(Application Class Loader)2.4双亲委派模型2.5双亲委派模型的作用3.破坏双亲委派模型1.类加载器的作用 类加载器(class loader)是 Java中的一个很重要的概念。类加载阶段中“把一个类的全限定名来获取描述该类的二进制字节流”这个动作是属于java虚拟机外部的,而实现这个动作
2020-07-18 16:21:48
286
原创 34.剑指Offer之第一个只出现一次的字符
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)2.解题思路 本题有点类似于剑指offer的第54题:字符流中第一个不重复的字符。解题思路也比较类似。 对于本题,这里给出以下三种解法:(1)用 HashMap 建立每个字符与其出现次数的映射,然后再依次遍历字符串时,找到第一个出现次数为1的字符,返
2020-07-17 10:32:02
238
原创 33.剑指Offer之字符流中第一个不重复的字符
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。如果当前字符流不存在只出现一次的字符,返回“#”字符。2.解题思路 本题有点类似于剑指offer的第34题:第一个只出现一次的字符,只不过本题是字符流序列。解题思路也比较类似,将字节流保存起来,通过哈希表统计每个字符出现
2020-07-17 10:25:41
281
原创 32.剑指Offer之数组中重复的数字
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100", “5e2”, “-123”," 3.1416" 和 “-1E-16” 都表示数值。 但是 “12e”, “1a3.14”, “1.2.3”, “±5” 和 “12e+4.3” 都不是。2.解题思路 表示数值的字符串遵循共同的模式:A[.[B]][e|EC]或者.B[e|EC]。以上模式的含义是:A为数值的整数部分,B为跟在小数点之后的小数部分
2020-07-17 09:56:36
184
原创 31.剑指Offer之数组中重复的数字
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。2.解题思路 思路采用非暴力查找和不消耗额外空间的算法:数组重排。把原数组重新排列为一个元素和对应下标值相同的数组。该算法看起来是两层循环,但是每个数字最多进行两次交
2020-07-15 12:03:51
185
原创 30.剑指Offer之求1+2+3+4+···+n
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。2.解题思路 本题本身没有太多的实际意义,但是可以对程序员的发散思维能力进行考察,进而可以反映出对编程相关技术理解的深度。 可以通过递归来实现加法,但是由于无法使用if语句,因此对于递归的结束条件无法进行判断,这里用一个比较巧妙的思路:与运算的短路特性,所谓短路,比如 A &&am
2020-07-15 10:57:20
436
原创 1.深入理解JVM之自动内存管理
目录1.内存划分1.1GC 什么时候开始?对什么东西,做了什么事情?2.垃圾收集算法有哪些?3.内存泄漏和内存溢出1.内存划分注:上图黄色框属于线程私有的内存,绿色为共有的。程序计数器: 是一块较小的内存空间,可以看做当前线程所执行的字节码的行号指示器。虚拟机栈(栈内存): 虚拟机栈描述的是Java方法执行的内存模型(非native方法)。每个方法在执行的同时都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。本地方法栈 : 与虚拟机栈的作用非常相似,区别是:虚拟机栈为虚拟
2020-07-14 16:51:29
216
原创 29.剑指Offer之孩子们的游戏(圆圈中最后剩下的数)
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 每年六一儿童节,张东升都会准备一些小礼物去看望孤儿院的普普和严良,今年亦是如此。张朝阳作为张东升的资深摄影发烧友,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且获得
2020-07-13 16:36:14
196
原创 28.剑指Offer之扑克牌顺子
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看
2020-07-13 14:27:12
200
原创 27.剑指Offer之左旋转字符串
目录1题目描述:2.解题思路3.编程实现(Java):1题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!2.解题思路 对于本题,从最直观的角度我们首先可以想到暴力解法。还是那句话:最容易想到的解法往往不是最优的。 将字符串分为两部分,即前k个
2020-07-13 13:50:57
252
原创 26.剑指Offer之和为S的两个数字
目录1.1题目描述:1.2输出描述:2.解题思路3.编程实现(Java):1.1题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。1.2输出描述: 对应每个测试案例,输出两个数,小的先输出。2.解题思路 看到题目,我们的第一感觉是暴力解法,即先在数组中固定一个数字,然后依次判断数组中其他数字与它的和是不是等于S。这显然复杂度为O(n^2)。 进一步分析,类似于上一题的思路,我们可以使用双指针解法。
2020-07-12 16:59:22
287
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人