
Java编程题
主要为平常练习遇到的习题
长不大的大灰狼
这个作者很懒,什么都没留下…
展开
-
滑动窗口——汇总
1 最小覆盖子串给你一个字符串 S、一个字符串 T 。请你设计一种算法,可以在 O(n) 的时间复杂度内,从字符串 S 里面找出:包含 T 所有字符的最小子串。输入:S = “ADOBECODEBANC”, T = “ABC”输出:“BANC”提示:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。来源:力扣(LeetCode)暴力解法,代码大概是这样的:for (int i = 0; i < s.size(); i++)原创 2020-08-20 14:56:26 · 257 阅读 · 0 评论 -
字符串中找出连续最长的数字串
字符串中找出连续最长的数字串读入一个字符串str,输出字符串str中的连续最长的数字串输入描述:个测试输入包含1个测试用例,一个字符串str,长度不超过255。输出描述:在一行内输出str中里连续最长的数字串。输入abcd12345ed125ss123456789输出123456789解析: 用end记录最长数字串的下标,用max记录最长数字个数;用max表示经过的数字长度最大值,count表示数字计数器,当为字母时重置为0 end表示数字尾部,每次满足数字时,对max进行判断,当ma原创 2020-08-08 11:19:29 · 408 阅读 · 0 评论 -
Java——贪心算法
贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多的条件(贪心选择性质),但是效率比动态规划要高。比如说一个算法问题使用暴力解法需要指数级时间,如果能使用动态规划消除重叠子问题,就可以降到多项式级别的时间,如果满足贪心选择性质,那么可以进一步降低时间复杂度,达到线性级别的。什么是贪心选择性质呢,简单说就是:每一步都做出一个局部最优的选择,最终的结果就是全局最优。 注意哦,这是一种特殊性质,其实只有一部分问题拥有这个性质。比如你面前放着 100 张人民币,你只能拿十张,怎么转载 2020-07-24 21:33:36 · 703 阅读 · 0 评论 -
Java编程题:回溯(汇总)
回溯回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。(1)电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。原创 2020-06-29 18:33:44 · 880 阅读 · 0 评论 -
Java编程题:搜索算法(汇总)
搜索算法(汇总)搜索算法就是去搜索每一个解的可能。搜索算法的分类:枚举法:暴力搜索深度优先搜索广度优先搜索回溯目录搜索算法(汇总)Ⅰ 深度优先搜索(1)放牌(2)员工的重要性(3)图像渲染(4)被围绕的区域(5)岛屿数量Ⅱ 广度优先搜索(1)员工的重要性(2)N叉树的层序遍历(3)腐烂的橘子(4)单词接龙(5)打开转盘锁Ⅰ 深度优先搜索Dfs(当前这一步的处理逻辑){1.判断边界,是否已经到头了:向上回退2.尝试当下的每一种可能3.确定一种可能之后,继续下一步Dfs}(1原创 2020-06-29 18:17:26 · 713 阅读 · 0 评论 -
Java编程题:动态规划(汇总)
动态规划(Dynamic Programming)动态规划是分治思想的延伸,通俗一点来说就是一种大事化小,小事化无的艺术。在将大问题化解为小问题的分治过程中,保存对这些小问题已经处理好的结果,并供后面处理大问题时直接使用这些结果。动态规划具备了以下三个特点把原来的问题分解成了几个相似的子问题。所有的子问题都只需要解决一次。储存子问题的解。动态规划的本质是对问题状态的定义和状态转移方程的定义(状态以及状态之间的递推关系)。动态规划问题的求解步骤:状态定义状态间的转移方程定义状态的初始原创 2020-06-29 10:32:41 · 1188 阅读 · 1 评论 -
Java编程题:木棒拼图(集合应用List)
木棒拼图有一个由很多木棒构成的集合,每个木棒有对应的长度,请问能否用集合中的这些木棒以某个顺序首尾相连构成一个面积大于 0 的简单多边形且所有木棒都要用上,简单多边形即不会自交的多边形。 初始集合是空的,有两种操作,要么给集合添加一个长度为 L 的木棒,要么删去集合中已经有的某个木棒。每次操作结束后你都需要告知是否能用集合中的这些木棒构成一个简单多边形。输入描述:每组测试用例仅包含一组数据,每组数据第一行为一个正整数 n 表示操作的数量(1 ≤ n ≤ 50000) , 接下来有n行,每行第一个整数为原创 2020-05-17 08:05:11 · 373 阅读 · 0 评论 -
Java编程题:洗牌(找规律)
洗牌洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌。接着把牌合并起来就可以了。 例如有6张牌,最开始牌的序列是1,2,3,4,5,6。首先分成两组,左手拿着1,2,3;右原创 2020-05-17 07:42:29 · 865 阅读 · 0 评论 -
Java编程题:人民币转换(字符串拼接)
人民币转换1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如¥ 532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如¥6007.14,应写成“人民币陆仟零柒元壹角肆分“。输入描述:输入一个do原创 2020-05-16 11:10:21 · 1020 阅读 · 0 评论 -
Java编程题:2的个数
2的个数请编写一个方法,输出0到n(包括n)中数字2出现了几次。给定一个正整数n,请返回0到n的数字中2出现了几次。测试样例:10返回:1解析:可以推出规律:为了计算每个位w上出现多少个2,可以将数字分成三段,w位的值,高于w位的hig和低于w位的low。例如计算1231的十位上出现多少个2时,w十=3,hig=12,low=1。为什么这样分呢,主要是因为每个位上出现2的次数不仅和当前位的数字有关,也和hig和low有关。理由如下:仍然讨论十位上出现多少个2的情况,如果w十<2原创 2020-05-09 11:53:29 · 934 阅读 · 0 评论 -
Java编程题:奇偶校验
奇偶校验输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如’3’,输出:10110011)。输入描述:输入包括一个字符串,字符串长度不超过100。输出描述:可能有多组测试数据,对于每组数据,对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。输入33a输出101100111011001101100001解析:这里将数字和字母统一看成是char类型(字符)的,所以数字3实际存储时为ASCII码中的‘3’,其十进制表示是51,转化为二原创 2020-05-09 10:03:32 · 1722 阅读 · 0 评论 -
Java编程题:进制转换(十六进制转十进制)
进制转换写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )输入描述:输入一个十六进制的数值字符串。输出描述:输出该数值的十进制字符串。输入0xA输出10要了解进制转换的公式,其实就是每位* 16,依次相加即可import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(原创 2020-05-08 17:54:28 · 2616 阅读 · 0 评论 -
Java编程题:字母统计(哈希表直接定址法)
字母统计输入一行字符串,计算其中A-Z大写字母出现的次数。输入描述:案例可能有多组,每个案例输入为一行字符串。输出描述:对每个案例按A-Z的顺序输出其中大写字母出现的次数。输入DFJEIWFNQLEF0395823048+_+JDLSFJDLSJFKK输出A:0B:0C:0D:3E:2F:5G:0H:0I:1J:4K:2L:3M:0N:1O:0P:0Q:1R:0S:2T:0U:0V:0W:1X:0Y:0Z:0import java.uti原创 2020-05-08 17:41:07 · 585 阅读 · 0 评论 -
Java编程题:百万富翁问题
百万富翁问题一个百万富翁遇到一个陌生人,陌生人找他谈了一个换钱的计划。该计划如下:我每天给你10 万元,你第一天给我1 分钱,第二天2 分钱,第三天4 分钱……这样交换 30 天后,百万富翁交出了多少钱?陌生人交出了多少钱?(注意一个是万元,一个是分)输入描述:该题没有输入输出描述:输出两个整数,分别代表百万富翁交出的钱和陌生人交出的钱,富翁交出的钱以万元作单位,陌生人交出的钱以分作单...原创 2020-05-08 17:24:01 · 2086 阅读 · 0 评论 -
Java编程题:找x(Arrays.asList())
找x输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。输入描述:测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。输出描述:对于每组输入,请输出结果。输入21 30输出-1import java.util.Arrays;import java.util.Scanne...原创 2020-05-08 17:10:10 · 191 阅读 · 0 评论 -
Java编程题:DNA序列
DNA序列一个DNA序列由A/C/G/T四个字母的排列组合组成。G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度)。在基因工程中,这个比例非常重要。因为高的GC-Ratio可能是基因的起始点。给定一个很长的DNA序列,以及要求的最小子序列长度,研究人员经常会需要在其中找出GC-Ratio最高的子序列。输入描述:输入一个string型基...原创 2020-05-08 16:44:54 · 1242 阅读 · 0 评论 -
Java编程题:顺时针打印矩阵
顺时针打印矩阵对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。给定int矩阵mat,以及它的维数nxm,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。测试样例:[[1,2],[3,4]],2,2返回:[1,2,4,3]解析:先记录左上角和右下角坐标(这两个坐标就描述了一个矩形)然后先按照顺时针打印这个矩形边上的元素缩小矩形(也就是调整左...原创 2020-05-03 18:34:39 · 455 阅读 · 0 评论 -
Java编程题:简单错误记录(LinkedHashMap)
简单错误记录开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。处理:1、 记录最多8条错误记录,循环记录(或者说最后只输出最后出现的八条错误记录),对相同的错误记录(净文件名(保留最后16位)称和行号完全匹配)只记录一条,错误计数增加;2、 超过16个字符的文件名称,只记录文件的最后有效16个字符;3、 输入的文件可能带路径,记录文件名称不能带路径。输入描述:一...原创 2020-05-03 18:21:50 · 408 阅读 · 1 评论 -
Java编程题: 数组中出现次数超过一半的数字
数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。一种方法是,用HashMap记录数组中每个元素出现的次数,然后进行遍历,不过感觉下面的思路比较简单巧妙一些。方法一: 数组中有一个数字出现的次数超过数组长度...原创 2020-05-03 17:51:40 · 918 阅读 · 1 评论 -
Java编程题:查找兄弟单词(Collections.sort)
查找兄弟单词注意:字典中可能有重复单词输入描述:先输入字典中单词的个数,再输入n个单词作为字典单词。输入一个单词,查找其在字典中兄弟单词的个数再输入数字n输出描述:根据输入,输出查找到的兄弟单词的个数输入3 abc bca cab abc 1输出2bca解析:(1)将字典中的单词先放到List 中(2)将List进行排序(3)check函数依次判定每个输入的单...原创 2020-05-03 17:41:35 · 544 阅读 · 0 评论 -
Java编程题:电话号码(用hash表的形式存储映射关系)
电话号码上图是一个电话的九宫格,如你所见一个数字对应一些字母,因此在国外企业喜欢把电话号码设计成与自己公司名字相对应。例如公司的Help Desk号码是4357,因为4对应H、3对应E、5对应L、7对应P,因此4357就是HELP。同理,TUT-GLOP就代表888-4567、310-GINO代表310-4466。NowCoder刚进入外企,并不习惯这样的命名方式,现在给你一串电话号码列表,...原创 2020-04-29 17:05:15 · 1090 阅读 · 0 评论 -
Java编程题:字符串的加解密
字符串的加解密1、对输入的字符串进行加解密,并输出。2、加密方法为:当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;其他字符不做变化。3、解密方法为加密的逆过程。接口描述:实现接口,每个接口实现1个基本操作:void Encrypt (char aucPas...原创 2020-04-29 16:54:52 · 1254 阅读 · 0 评论 -
Java编程题:日期到天数的转换(简单映射)
输出日期到天数的转换根据输入的日期,计算是这一年的第几天。详细描述:输入某年某月某日,判断这一天是这一年的第几天?。接口设计及说明:/*****************************************************************************Description : 数据转换Input Param : year 输入年份Mon...原创 2020-04-29 16:51:20 · 2746 阅读 · 0 评论 -
Java编程题:坐标移动(正则表达式)
坐标移动开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。输入:合法坐标为A(或者D或者W或者S) + 数字(两位以内)坐标之间以;分隔。 非法坐标点需要进行丢弃。如AA10; A1A; %; YAD; 等。下面是一个简单的例子 如:A10;S20;W1...原创 2020-04-29 16:45:16 · 973 阅读 · 0 评论 -
Java编程题:连续最大和(动态规划)
连续最大和一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3输入描述:输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。输出描述:所有连续子数组中和最大的值。输入3 -1 2 1输出3将每一次的...原创 2020-04-29 16:33:28 · 659 阅读 · 2 评论 -
Java编程题:句子逆序(单词倒排——分隔符为非字母)
句子逆序将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”,所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符。接口说明/**反转句子@param sentence 原句子@return 反转后的句子*/public String reverse(String sentence);输入描述:将一个英文语句...原创 2020-04-29 09:54:28 · 1692 阅读 · 0 评论 -
Java编程题:删除公共字符
删除公共字符输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”输入描述:每个测试输入包含2个字符串输出描述:输出删除后的字符串输入They are students.aeiou输出Thy r stdnts.方法1:import java.u...原创 2020-04-29 09:36:53 · 251 阅读 · 0 评论 -
Java编程题:增加一个字符,判断其是否为回文串
回文串给定一个字符串,问是否能通过添加一个字母将其变为回文串。输入描述:一行一个由小写字母构成的字符串,字符串长度小于等于10。输出描述:输出答案(YES\NO).输入coco输出YES如果长度为n的字符串添加一个字符能成为回文串,那么删除一个字符也能成为回文,因为这个两个字符是对称的位置。import java.util.*;public class Main { ...原创 2020-04-29 08:50:47 · 906 阅读 · 1 评论 -
Java编程题:二维数组打印
二维数组打印:有一个二维数组(n*n),写程序实现从右上角到左下角沿主对角线方向打印。给定一个二位数组arr及题目中的参数n,请返回结果数组。测试样例:[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]],4返回:[4,3,8,2,7,12,1,6,11,16,5,10,15,9,14,13]二维数组沿主对角线方向打印;import ja...原创 2020-04-29 08:42:35 · 639 阅读 · 0 评论 -
Java编程题:空格替换(熟悉一下解题过程)
空格替换请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。测试样例:"Mr John Smith”,13返回:“Mr%20John%20Smith”...原创 2020-04-18 18:12:11 · 606 阅读 · 0 评论 -
Java编程题:最近公共祖先(用简便方法求解)
最近公共祖先有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b。请设计一个算法,求出a和b点的最近公共祖先的编号。给定两个int a,b。为给定结点的编号。请返回a和b的最近公共祖先的编号。注意这里结点本身也可认为是其祖先。测试样例:2,3返回:1解析:满二叉树的子节点与父节点之间的关系为root = child / 2,利用这个关...原创 2020-04-18 17:55:08 · 819 阅读 · 0 评论 -
Java编程题:数字和为sum的方法数(动态规划——背包问题)
数字和为sum的方法数给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。输入描述:输入为两行:第一行为两个正整数n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000)第二行为n个正整数Ai,以空格隔开。输出描述:输出所求的方案数示例1输入5 15 5 5 10...原创 2020-04-07 18:25:16 · 1010 阅读 · 0 评论 -
Java编程题:年会抽奖(错排问题)
年会抽奖今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:首先,所有人员都将一张写有自己名字的字条放入抽奖箱中;待所有字条加入完毕,每人从箱中取一个字条;如果抽到的字条上写的就是自己的名字,那么“恭喜你,中奖了!”现在告诉你参加晚会的人数,请你计算有多少概率会出现无人获奖?输入描述:输入包含多组数据,每组数据包含一个正整数n(2≤n≤20)。输出描述:对应每一组数据,以“xx...原创 2020-04-07 18:15:09 · 935 阅读 · 0 评论 -
Java编程题:整数与IP地址间的转换
整数与IP地址间的转换原理: ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个长整数。举例: 一个ip地址为10.0.3.193每段数字 相对应的二进制数10 000010100 000000003 ...原创 2020-04-07 15:06:00 · 900 阅读 · 0 评论 -
Java编程题:HashMap应用——到底买不买
到底买不买小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如,YrR8RrY是小红想做的珠串;那么ppRYYGrrYBR2258可...原创 2020-03-30 12:13:03 · 316 阅读 · 0 评论 -
Java编程题:斐波那契数列应用——统计每个月兔子的总数
统计每个月兔子的总数有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后/*** 统计出兔子总数。** @param monthCount 第几个月* @return 兔子总数*/public static int getTotalCount(int monthCount){return 0;}输入描述:输入int型表示month输出描述:输出兔子总...原创 2020-03-28 17:06:59 · 653 阅读 · 0 评论 -
Java编程题:查找和排序(用到Comparator)
查找和排序题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。示例:jack 70peter 96Tom 70smith 67从高到低 成绩peter 96jack 70Tom 70smith 67从低到高smith 67ja...原创 2020-03-26 16:48:36 · 305 阅读 · 0 评论 -
Java编程题:镜像二叉树
二叉树的镜像操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:通过递归交换每个节点的位置,构建镜像二叉树:public class Solution {public void Mirror(TreeNode root) { //节点为null 不处理 if(root == null) return; //节点的左右子节点为null(即就是节点为叶子节点)同样...原创 2020-03-24 11:56:06 · 152 阅读 · 0 评论 -
Java编程题:用位运算实现加法
位运算加法:请编写一个函数,将两个数字相加。不得使用+或其他算数运算符。给定两个int A和B。请返回A+B的值异或和求和的结果一致,与运算与进位结果一致。import java.util.*;public class UnusualAdd { public int addAB(int A, int B) { int m=A^B; int n=(...原创 2020-03-21 21:23:25 · 1091 阅读 · 3 评论 -
Java编程题:两个超长正整数相加(BigInteger)
链接:https://www.nowcoder.com/questionTerminal/5821836e0ec140c1aa29510fd05f45fc来源:牛客网请设计一个算法完成两个超长正整数的加法。接口说明/*请设计一个算法完成两个超长正整数的加法。输入参数:String addend:加数String augend:被加数返回值:加法结果*/public Strin...原创 2020-03-21 16:28:08 · 1610 阅读 · 0 评论