练习
心事付流年
这个作者很懒,什么都没留下…
展开
-
链表倒数第k个节点
文章目录题目描述解题思路代码如下题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路方法1遍历两边链表标记序号即可方法2遍历一遍链表先让fast指针走k-1步,确定两指针所指节点距离为k,让两指针联动跑,当fast指针的下一个节点为null时,那么另一个指针所指节点就是倒数第k个节点,这种方法利用了固定距离为k,两指针来完成代码如下public class ListNode { int val; ListNode next = null; ..原创 2021-08-30 19:49:40 · 155 阅读 · 0 评论 -
判断回文链表
文章目录题目描述解题思路代码如下题目描述对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。解题思路回文链表就是从中间看,链表是对称的,那么我们只需将后半段链表反转,逐个判断相等即可代码如下import java.util.*;public class ListNode { int val; ListNode next..原创 2021-08-30 18:52:21 · 150 阅读 · 0 评论 -
构建乘积数组[Java]
文章目录题目描述解题思路代码如下题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0]= A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];) 对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。输入[1,2,3,4,5]输出[120,60,40,..原创 2021-08-25 23:21:14 · 87 阅读 · 0 评论 -
数组中只出现一次的两位数[Java]
文章目录题目描述解题思路代码如下题目描述牛客链接一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。输入描述[1,4,1,6]输出描述[4,6]解题思路利用Map记录数组中的数据出现了对少次,利用Map.Entry < , >来遍历Map,输出只出现一次的数即可代码如下import java.util.*;public class Solution { /** * 代码中的类..原创 2021-08-24 22:53:14 · 135 阅读 · 0 评论 -
扑克牌顺子[Java]
文章目录题目描述解题思路代码如下题目描述现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。 有如下规则:A为1,J为11,Q为12,K为13,A不能视为14大、小王为 0,0可以看作任意牌如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。 例如:给出数据[6,0,2,0,4] 中间的两个0一个看作3,一个看作5 。即:[6,3,2,5,4] 这样这五张牌在[2,6]区间连续,输出true数据保证每组5个数字,每组最多含有4个零..原创 2021-08-24 22:42:09 · 301 阅读 · 0 评论 -
二叉树搜索第k个节点
文章目录题目描述解题思路代码如下题目描述给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。输入{5,3,7,2,4,6,8},3输出4解题思路将这个二叉搜索树输出到数组,排序,得到结果代码如下import java.util.*;public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public Tr..原创 2021-08-23 22:34:46 · 99 阅读 · 0 评论 -
矩阵的最小路径和[Java]
文章目录题目描述解题思路代码如下题目描述给定一个 n * m 的矩阵a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。例如输入[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]输出12解题思路当你做一个题没有思路时,不防往动归这方面想一想,目前有一个二维数组,我们来找中间状态,当我们目前的位置是F(i,j)时,因为他要求只能往下或者往右走(先去除特殊状态,也就..原创 2021-08-23 20:25:59 · 429 阅读 · 0 评论 -
数值的整数次方[Java]
文章目录题目描述解题思路代码如下题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。不得使用库函数,同时不需要考虑大数问题,也不用考虑小数点后面0的位数。解题思路纯数学问题,注意变量类型即可代码如下public class Solution { public double Power(double base, int exponent) { if(b..原创 2021-08-23 14:55:34 · 86 阅读 · 0 评论 -
矩形覆盖[Java]
文章目录题目描述解题思路代码如下题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,从同一个方向看总共有多少种不同的方法?比如n=3时,23的矩形块有3种不同的覆盖方法(从同一个方向看):输入描述2*1的小矩形的总个数n输出描述覆盖一个2*n的大矩形总共有多少种不同的方法(从同一个方向看)解题思路列举前几项会发现满足斐波那契数代码如下public class Solution { public ..原创 2021-08-23 14:55:42 · 124 阅读 · 0 评论 -
设计LRU缓存结构[Java]
文章目录题目描述解题思路代码如下题目描述设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能set(key, value):将记录(key, value)插入该结构get(key):返回key对应的value值提示:1.某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的,然后都会刷新缓存。2.当缓存的大小超过K时,移除最不经常使用的记录。3.输入一个二维数组与K,二维数组每一维有2个或者3个数字,第1个数字为opt,第..原创 2021-08-22 00:46:56 · 199 阅读 · 0 评论 -
二分查找算法
文章目录一、题目描述解题思路代码如下一、题目描述请实现有重复数字的升序数组的二分查找给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1博客链接输入描述[1,2,4,4,5],4输出描述2解题思路二分查找也叫折半查找,顾名思义,每次范围缩小一半,前提是这个数组有序,每次判断数组中间值mid和目标值target,如果mid>target,就说明目..原创 2021-08-21 21:13:22 · 71 阅读 · 0 评论 -
二叉树层序遍历
文章目录题目描述解题思路代码如下题目描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)解题思路二叉树的层序遍历,顾名思义,按层遍历二叉树,我们利用到了队列,要求入队一次,将此节点左右孩子不为空的节点入队,出一个进两个(前提:左右孩子都不为空),知道最后队列为空代码如下/** * Definition for a binary tree node. * public class TreeNode { * int val; * ..原创 2021-08-07 18:58:27 · 172 阅读 · 0 评论 -
平衡二叉树
文章目录题目描述解题思路代码如下题目描述给定一个二叉树,判断它是否是高度平衡的二叉树示例输入:root = [3,9,20,null,null,15,7]输出:false解题思路所谓平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1,每棵树的子树都要平衡,利用递归。平衡二叉树要求是左右子树高度差的绝对值不超过1,那就先求每棵二叉树的高度,阿紫判断代码如下import java.util.*;/** * Definition for a b..原创 2021-08-07 18:26:45 · 120 阅读 · 0 评论 -
左右最值最大差[Java]
文章目录题目描述解题思路代码如下题目描述给定一个长度为N(N>1)的整型数组A,可以将A划分成左右两个部分,左部分A[0…K],右部分A[K+1…N-1],K可以取值的范围是[0,N-2]。求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值,最大是多少?给定整数数组A和数组的大小n,请返回题目所求的答案。示例输入[2,7,3,1,1],5输出返回:6解题思路将这个数组按要求一分为二,相当于穷举每一种情况,找最大值返回即可代码如下import java..原创 2021-08-07 14:19:28 · 82 阅读 · 0 评论 -
数组中出现次数超过一半的数字[Java]
文章目录题目描述解题思路代码如下题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000,0<=数组元素<=10000示例输入[1,2,3,2,2,2,5,4,2]输出2解题思路此题牵扯到了计数问题,我们利用map来计数,最..原创 2021-08-05 11:43:27 · 147 阅读 · 0 评论 -
简单错误记录[Java]
文章目录题目描述解题思路代码如下题目描述开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。处理:1、 记录最多8条错误记录,循环记录,最后只用输出最后出现的八条错误记录。对相同的错误记录只记录一条,但是错误计数增加。最后一个斜杠后面的带后缀名的部分(保留最后16位)和行号完全匹配的记录才做算是”相同“的错误记录。2、 超过16个字符的文件名称,只记录文件的最后有效16个字符; 3、 输入的文件可能带路径,记录文件名称不能带路径。4、循环记录时,只以第一次出现的顺序为..原创 2021-08-05 11:39:28 · 264 阅读 · 0 评论 -
乒乓球筐[Java]
文章目录题目描述解题思路代码如下题目描述nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类,并且每种球的数量不少于B盒中的数量,该怎么办呢?输入描述输入有多组数据。每组数据包含两个字符串A、B,代表A盒与B盒中的乒乓球,每个乒乓球用一个大写字母表示,即相同类型的乒乓球为相同的大写字母。字符串长度不大于10000。输出描述每一组输入对应一行输出:如果B盒中所有球的类型在A中都有,并且每种球的数量都不大于A,则输出“Ye..原创 2021-08-04 08:44:11 · 118 阅读 · 0 评论 -
查找兄弟单词[Java]
文章目录题目描述解题思路代码如下题目描述定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。兄弟单词要求和原来的单词不同。例如:ab和ba是兄弟单词。ab和ab则不是兄弟单词。现在给定你n个单词,另外再给你一个单词str,让你寻找str的兄弟单词里,按字典序排列后的第k个单词是什么?注意:字典中可能有重复单词。本题含有多组输入数据。输入描述先输入单词的个数n,再输入n个单词。 再输入一个单词,为待查找的单词x 最后输..原创 2021-08-04 08:38:45 · 324 阅读 · 0 评论 -
单词倒排[Java]
文章目录题目描述解题思路代码如下题目描述对字符串中的所有单词进行倒排。说明:1、构成单词的字符只有26个大写或小写英文字母;2、非构成单词的字符均视为单词间隔符;3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;4、每个单词最长20个字母输入描述输入一行以空格来分隔的句子输出描述输出句子的逆序解题思路需要倒排,肯定会用到先入后出的栈,在遍历字符串过程中,遇到符号直接转换成“ ”,在最后消除多余空格原创 2021-08-03 09:14:05 · 321 阅读 · 0 评论 -
骆驼命名法[Java]
文章目录题目描述解题思路代码如下题目描述从C/C++转到Java的程序员,一开始最不习惯的就是 变量命名方式的改 变。C语言风格使用下划线分隔多个单词,例如"hello_world"; 而Java则采 用一种叫骆驼命名法的规则:除首个单词以外,所有单词的首字母大写, 例如"helloWorld"。请你帮可怜的程序员们自动转换变名。输入描述输入包含多组数据。每组数据- -行,包含一个c语言风格的变量名。每个变量名长度不超过100。输出描述对应每一组数据,输出变量名相应的..原创 2021-08-03 09:08:41 · 236 阅读 · 0 评论 -
求和[Java]
文章目录题目描述解题思路代码如下题目描述输入两个整数 n 和 m,从数列1,2,3…n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来输入描述每个测试输入包含2个整数,n和m输出描述按每个组合的字典序排列输出,每行输出一种组合解题思路利用递归思想,假如加到第i个数(sum<m),确定下一个数加还是不加,如果加,如此继续下去,如果不加,回到上一个状态,类似于二叉树递归左右子树代码如下import java.util.*;public cla..原创 2021-08-02 09:56:14 · 98 阅读 · 0 评论 -
电话号码[Java]
文章目录题目描述解题思路代码如下题目描述上图是一个电话的九宫格,如你所见一个数字对应一些字母,因此在国外企业喜欢把电话号码设计成与自己公司名字相对应。例如公司的HelpDesk号码是4357,因为4对应H、3对应E、5对应L、7对应P,因此4357就是HELP。同理,TUT-GLOP就代表888-4567、310-GINO代表310-4466。NowCoder刚进入外企,并不习惯这样的命名方式,现在给你一串电话号码列表,请你帮他转换成数字形式的号码,并去除重复的部分。输入描述输入包..原创 2021-08-02 09:50:51 · 547 阅读 · 0 评论 -
解析IP地址[Java]
原理: ip地址的每段可以看成是- -个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个长整数。举例:一个ip地址为10.0.3.193每段数字相对应的二进制数10 000010100 000000003 00000011193 11000001组合起来即为: 00001010 00000000 00000011 11000001 ,转换为10进制数就是: 167773121,即该IP地址转换后的数字就是它了。本题含有多组输原创 2021-07-14 10:20:37 · 612 阅读 · 0 评论 -
反转字符串[Java]
题解:将子串从后往前逐个存入StringBuilder,最后逐个输出即可package Practice706;import java.util.*;public class one { public static void main(String[] args){ StringBuilder sb = new StringBuilder(); Scanner scan = new Scanner(System.in); while(scan.原创 2021-07-06 10:24:57 · 106 阅读 · 0 评论 -
最大公共子串的长度[Java]
题解:将字符串1作为基准,在字符串1的基础上判断每一个字母开头最长子串长度,将其存入list中,即字符串1长度是多少,list长度就有多长,最后求出list中最大值即可import java.util.*;public class two { public static int num(String str1,String str2){ List<Integer> list = new ArrayList<>(); int i = 0;原创 2021-07-06 10:28:12 · 256 阅读 · 0 评论 -
青蛙跳台阶[Java]
青蛙跳台阶算法,每次可以跳1级或两级,请问有n级台阶,有多少种算法,递归和非递归如何写public class Solution { public int jumpFloor(int target) { if(target == 1)return 1; if(target == 2)return 2; return jumpFloor(target - 1) + jumpFloor(target - 2); }}变态跳台阶一只青蛙一次原创 2021-07-13 08:20:29 · 42 阅读 · 0 评论 -
Java快到碗里来[Java]
小喵们很喜欢把自己装进容器里的(例如碗), 但是要是碗的周长比喵的长还短,它们就进不去了。现在告诉你它们的身长,和碗的半径,请判断- -下能否到碗里去。import java.util.*;public class two { public static String IsOk(double n,double r){ double c = 2 * 3.14 * r; return n > c?"No":"Yes"; } public sta原创 2021-07-14 10:29:01 · 144 阅读 · 0 评论 -
Java星际密码[Java]
星际战争开展了100年之后,终于破译了外星人的密码!他们的密码是一串整数,通过一张表里的信息映射成最终4位密码。表的规则是:n对应的值是矩阵X的n次方的左上角,如果这个数不足4位则用0填充,如果大于4位的则只输出最后4位。|1 1|^n => |Xn …||1 0| |… …|例如n=2时,|1 1|^2 => |1 1| * |1 1| => |2 1||1 0| |1 0| |1 0| |1 1|即2对应的数是“0002”。impor原创 2021-07-14 10:36:00 · 186 阅读 · 0 评论 -
收件人列表[Java]
题目描述:NowCoder每天要给许多客户写电子邮件。正如你所知,如果一封邮件中包含多个收件人,收件人姓名之间会用一个逗号和空格隔开;如果收件人姓名也包含空格或逗号,则姓名需要用双引号包含。现在给你一组收件人姓名,请你帮他生成相应的收件人列表。import java.util.Scanner;/** * NowCoder每天要给许多客户写电子邮件。正如你所知,如果一封邮件中包 * 含多个收件人,收件人姓名之间会用一个逗号和空格隔开;如果收件人姓 * 名也包含空格或逗号,则姓名需要用双引号包含。原创 2021-07-23 09:45:47 · 190 阅读 · 0 评论 -
数据库连接池[Java]
Web系统通常会频繁地访问数据库,如果每次访问都创建新连接,性能会很差。为了提高性能,架构师决定复用已经创建的连接。当收到请求,并且连接池中没有剩余可用的连接时,系统会创建一个新连接,当请求处理完成时该连接会被放入连接池中,供后续请求使用。现在提供你处理请求的日志,请你分析一下连接池最多需要创建多少个连接。输入描述:输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤1000),表示请求的数量。紧接着n行,每行包含一个请求编号id(A、B、C……、Z)和操作(connect或disconne原创 2021-07-26 11:09:33 · 84 阅读 · 0 评论 -
mkdir快捷创建文件[Java]
文章目录题目描述解题思路代码如下题目描述工作中,每当要部署一台新机器的时候,就意味着有一堆目录需要创建。例如要创建目录“/usr/local/bin”,就需要此次创建“/usr”、“/usr/local”以及“/usr/local/bin”。好在,Linux下mkdir提供了强大的“-p”选项,只要一条命令“mkdir -p /usr/local/bin”就能自动创建需要的上级目录。现在给你一些需要创建的文件夹目录,请你帮忙生成相应的“mkdir -p”命令。输入描述:输入包含多组数据。..原创 2021-07-26 11:21:39 · 506 阅读 · 0 评论 -
组队竞技[Java]
牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。例如:一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。解题思路:输入描述:输入的第一行为一个正整数n(1原创 2021-07-26 11:26:30 · 68 阅读 · 0 评论 -
狗猫收容所[Java]
文章目录题目描述代码如下题目描述有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,* 第一种为直接收养所有动物中最早进入收容所的,* 第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。* 给定一个操作序列int[][2] ope(C++中为vector)代表所有事件。* 若第一个元素为1,则代表有动物进入收容所,第二个元素为动物的编号,正数代表狗,负数代表猫;* 若第一个元素为2,则代表有人收养动物,第二个元素若为0,则采取第一种收养方式(最早)..原创 2021-07-28 22:31:07 · 94 阅读 · 0 评论 -
发邮件(动归)
文章目录题目描述解题思路代码如下题目描述NowCoder每天要给很多人发邮件。有一天他发现发错了邮件,把发给A的邮件发给了B,把发给B的邮件发给了A。于是他就思考,要给n个人发邮件,在每个人仅收到1封邮件的情况下,有多少种情况是所有人都收到了错误的邮件?即没有人收到属于自己的邮件。输入描述输入包含多组数据,每组数据包含一个正整数n(2≤n≤20)。输出描述对应每一组数据,输出一个正整数,表示无人收到自己邮件的种数。解题思路在写编程题的时候,没有思路,可以往动态规划方面想想,..原创 2021-07-30 11:12:23 · 67 阅读 · 0 评论 -
最长上升子序列(动归)
文章目录题目描述解题思路代码如下题目描述广场上站着一支队伍,她们是来自全国各地的扭秧歌代表队,现在有她们的身高数据,请你帮忙找出身高依次递增的子序列。 例如队伍的身高数据是(1、7、3、5、9、4、8),其中依次递增的子序列有(1、7),(1、3、5、9),(1、3、4、8)等,其中最长的长度为4。输入描述输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤1000)。紧接着第二行包含n个正整数m(1≤n≤10000),代表队伍中每位队员的身高。输出描述紧接着第二行包含n个正..原创 2021-07-30 11:25:20 · 123 阅读 · 0 评论 -
Emacs计算器[Java]
文章目录题目描述解题思路代码如下题目描述Emacs号称神的编辑器,它自带了一个计算器。与其他计算器不同,它是基于后缀表达式的,即运算符在操作数的后面。例如“2 3 +”等价于中缀表达式的“2 + 3”。 请你实现一个后缀表达式的计算器。输入描述输入包含多组数据。每组数据包括两行:第一行是一个正整数n (3≤n≤50);紧接着第二行包含n个由数值和运算符组成的列表。“±*/”分别为加减乘除四则运算,其中除法为整除,即“5/3=1”。输出描述对应每一组数据,输出它们的运算结果。解..原创 2021-07-31 13:52:50 · 91 阅读 · 0 评论 -
删除公共字符[Java]
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.输入描述每个测试输入包含2个字符串输出描述输出删除后的字符串解题思路:分别遍历两个字符串,逐个删除代码:import java.util.*;public class Main { //删除公共字符 public static List<Character> remo原创 2021-07-25 15:13:30 · 209 阅读 · 0 评论