算法练习
文章平均质量分 51
练习
梦nine
这个作者很懒,什么都没留下…
展开
-
数据库连接池,mkdir
Web系统通常会频繁地访问数据库,如果每次访问都创建新连接,性能会很差。为了提高性能,架构师决定复用已经创建的连接。当收到请求,并且连接池中没有剩余可用的连接时,系统会创建一个新连接,当请求处理完成时该连接会被放入连接池中,供后续请求使用。现在提供你处理请求的日志,请你分析一下连接池最多需要创建多少个连接。输入描述: 输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤1000),表示请求的数量。紧接着n行,每行包含一个请求编号id(A、B、C……、Z)和操作(connect或disconnect.原创 2021-07-06 15:08:04 · 102 阅读 · 0 评论 -
发邮件,最长上升子序列,解读密码
NowCoder每天要给很多人发邮件。有一天他发现发错了邮件,把发给A的邮件发给了B,把发给B的邮件发给了A。于是他就思考,要给n个人发邮件,在每个人仅收到1封邮件的情况下,有多少种情况是所有人都收到了错误的邮件?即没有人收到属于自己的邮件。输入描述: 输入包含多组数据,每组数据包含一个正整数n(2≤n≤20)。输出描述: 对应每一组数据,输出一个正整数,表示无人收到自己邮件的种数。import java.util.*;public class Main{ public static .原创 2021-07-06 15:07:20 · 102 阅读 · 0 评论 -
年会抽奖,抄送列表
年会抽奖题目描述:今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:首先,所有人员都将一张写有自己名字的字条放入抽奖箱中;待所有字条加入完毕,每人从箱中取一个字条;如果抽到的字条上写的就是自己的名字,那么“恭喜你,中奖了!” 现在告诉你参加晚会的人数,请你计算有多少概率会出现无人获奖?输入描述: 输入包含多组数据,每组数据包含一个正整数n(2≤n≤20)。输出描述: 对应每一组数据,以“xx.xx%”的格式输出发生无人获奖的概率。题解:import java.util.*;pub原创 2021-07-06 15:06:06 · 105 阅读 · 0 评论 -
收件人列表,养兔子
题目:收件人列表NowCoder每天要给许多客户写电子邮件。正如你所知,如果一封邮件中包含多个收件人,收件人姓名之间会用一个逗号和空格隔开;如果收件人姓名也包含空格或逗号,则姓名需要用双引号包含。现在给你一组收件人姓名,请你帮他生成相应的收件人列表。输入描述: 输入包含多组数据。 每组数据的第一行是一个整数n (1≤n≤128),表示后面有n个姓名。紧接着n行,每一行包含一个收件人的姓名。姓名长度不超过16个字符。输出描述: 对应每一组输入,输出一行收件人列表。【解题思路】:1.先接收到一个原创 2021-07-06 15:05:28 · 122 阅读 · 0 评论 -
客似云来, 剪花布条
题目:客似云来题目描述:NowCoder开了一家早餐店,这家店的客人都有个奇怪的癖好:他们只要来这家店吃过一次早餐,就会每天都过来;并且,所有人在这家店吃了两天早餐后,接下来每天都会带一位新朋友一起来品尝。于是,这家店的客人从最初一个人发展成浩浩荡荡成百上千人:1、1、2、3、5……现在,NowCoder想请你帮忙统计一下,某一段时间范围那他总共卖出多少份早餐(假设每位客人只吃一份早餐)。输入描述: 测试数据包括多组。 每组数据包含两个整数from和to(1≤from≤to≤80),分别代表开店原创 2021-06-13 10:50:06 · 146 阅读 · 0 评论 -
斐波那契凤尾,淘宝网站
斐波那契凤尾NowCoder号称自己已经记住了1-100000之间所有的斐波那契数。为了考验他,我们随便出一个数n,让他说出第n个斐波那契数。当然,斐波那契数会很大。因此,如果第n个斐波那契数不到6位,则说出该数;否则只说出最后6位。输入描述: 输入有多组数据。 每组数据一行,包含一个整数n (1≤n≤100000)。输出描述: 对应每一组输入,输出第n个斐波那契数的最后6位。import java.util.*;public class Main{ public static v原创 2021-06-08 12:51:52 · 227 阅读 · 0 评论 -
最难的问题,因子个数
*~最难的问题NowCoder生活在一个充满危险和阴谋的年代。为了生存,他发明了密码,用于军队的消息传递。假设你是军团中的一名军官,需要把发送来的消息破译出来、并提供给你的将军。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都 替换成字母F),其他字符不 变,并且消息原文的所有字母都是大写的。密码中的字母与原文中的字母对应关系如下。密码字母:A B C D E F G H I J K L M N O P Q原创 2021-06-03 11:51:35 · 101 阅读 · 0 评论 -
最难的问题,因子个数
最难的问题NowCoder生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是军团中的一名军官,需要把发送来的消息破译出来、并提供给你的将军。 消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F),其他字符不 变,并且消息原文的所有字母都是大写的。密码中的字母与原文中的字母对应关系如下。密码字母:A B C D E F G H I J K L M N O P Q原创 2021-06-03 11:48:52 · 142 阅读 · 0 评论 -
有假币,求正数数组的最小不可组成和
有假币题目描述:居然有假币!现在猪肉涨了,但是农民的工资却不见涨啊,没钱怎么买猪肉啊。nowcoder这就去买猪肉,结果找来的零钱中有假币!!!可惜nowcoder一不小心把它混进了一堆真币里面去了。只知道假币的重量比真币的质量要轻,给你一个天平(天平两端能容纳无限个硬币),请用最快的时间把那个可恶的假币找出来。输入描述: 1≤n≤2^30,输入0结束程序。输出描述: 最多要称几次一定能把那个假币找出来?题解:要找到一堆货币中的假币,最快的方式是分3堆,使用其中两堆称重即可:假币比真原创 2021-06-02 17:27:52 · 194 阅读 · 0 评论 -
奇数位上都是奇数或者偶数位上都是偶数,猴子分桃
题目:奇数位上都是奇数或者偶数位上都是偶数题目描述:给定一个长度不小于2的数组arr。 写一个函数调整arr,使arr中要么所有的偶数位上都是偶数,要么所有的奇数位上都是奇数上。要求:如果数组长度为N,时间复杂度请达到O(N),额外空间复杂度请达到O(1),下标0,2,4,6…算作偶数位,下标1,3,5,7…算作奇数位,例如[1,2,3,4]调整为[2,1,4,3]即可题解:(1)循环遍历arr数组:如果m及n没有到数组最后,遍历数组(2)偶数位m从0往后遍历数组,如果arr[m]是偶数,原创 2021-06-01 20:15:10 · 246 阅读 · 0 评论 -
不用加减乘除做加法,三角形
题目:不用加减乘除做加法题目描述:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。题解:1.二进制位相异或的结果就是两个数对应位相加的结果,不考虑进位2.二进制与后左移一位的结果,就是两个数相加进位后的结果两个数相加,如果不考虑进位,那么这两个数异或的值就是这两个数的和public class Solution { public int Add(int num1,int num2) { while(num2!=0){原创 2021-05-31 14:17:20 · 115 阅读 · 0 评论 -
变态跳台阶,快到碗里来
题目:变态跳台阶题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题解:每一个台阶只可能有两种情况:跳,不跳可以把台阶当成一个n位的二进制数,每一位代表一个台阶,1表示跳,0表示不跳因为最终要跳上最后一个台阶,所有最后一个台阶是必须要跳的,也就是1求总共有多少种跳法就是求0到n-1位二进制数的最大值也就是一共有2^(n-1)种跳法public class Solution { public int jump原创 2021-05-30 21:27:05 · 126 阅读 · 0 评论 -
树根,星际密码
题目:数根数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根;如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。比如,对于24 来说,把2 和4 相加得到6,由于6 是一位数,因此6 是24 的数根。 再比如39,把3 和9 加起来得到12,由于12不是一位数,因此还得把1 和2 加起来,最后得到3,这是一个一位数,因此3 是39 的数根。 现在给你一个正整数,输出它的数根。输入描述: 输入包含多组数据。每组数原创 2021-05-29 18:26:27 · 271 阅读 · 0 评论 -
年终奖,迷宫问题
题目:年终奖题目描述小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6*6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物。给定一个6*6的矩阵board,其中每个元素为对应格子的礼物价值,左上角为[0,0],请返回能获得的最大价值,保证每个礼物价值大于100小于1000。题解:问原创 2021-05-27 15:09:05 · 234 阅读 · 0 评论 -
微信红包,计算字符串的距离
题目描述春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。若没有金额超过总数的一半,返回0。题解:本题两种思路,第一种排序思路,如果一个数出现次数超过一半了,排序过后,必然排在中间则最后遍历整个数组查看是否符合即可。第二种思路可以用map统计每个数字出现的次数,最后判断有没有超过一半的数字。原创 2021-05-24 21:04:10 · 127 阅读 · 0 评论 -
牛客 找出字符串中第一个只出现一次的字符,小易的升级之路
html 基本知识css 基本知识javascript 基本知识HTTP 协议相关知识请求格式响应格式常见请求方法及含义常见响应状态及含义常见HTTP头静态资源 vs 动态资源什么是 JSP 技术(模板技术)Servlet 的生命周期...原创 2021-03-31 13:19:51 · 150 阅读 · 0 评论 -
牛客 找出字符串中第一个只出现一次的字符,小易的升级之路
找出字符串中第一个只出现一次的字符题目描述 找出字符串中第一个只出现一次的字符输入描述:输入几个非空字符串输出描述:输出第一个只出现一次的字符,如果不存在输出-1题解:可以用map统计每个数字出现的次数,如果出现一次输出即可 import java.util.*;public class Main{ public static void main(String[] args){ Scanner scan = new Scanner(System.in);原创 2021-05-22 16:24:29 · 194 阅读 · 0 评论 -
洗牌,MP3光标位置
洗牌题目描述 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌。接着把牌合并起来就可以了。例如有6张牌,最开始牌的序列是1,2,3,4,5,6。首先分成两组,左手拿着1原创 2021-05-20 20:23:11 · 91 阅读 · 0 评论 -
统计每个月兔子的总数,字符串通配符
题目:统计每个月兔子的总数题目描述有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?本题有多组数据。输入描述: 输入int型表示month输出描述: 输出兔子总数int型import java.util.*;public class Main{ public static void main(String[] args){ Scanner scan=new Scanner(Syste原创 2021-05-15 16:55:36 · 141 阅读 · 0 评论 -
公共子串的计算,字符串反转
题目:公共子串的计算题目描述 给定两个只包含小写字母的字符串,计算两个字符串的最大公共子串的长度。注:子串的定义指一个字符串删掉其部分前缀和后缀(也可以不删)后形成的字符串。输入描述: 输入两个只包含小写字母的字符串输出描述: 输出一个整数,代表最大公共子串的长度import java.util.*;public class Main{ public static int getMaxLen(String str1,String str2){ char[] arr1=原创 2021-05-18 20:12:06 · 231 阅读 · 0 评论 -
汽水瓶,查找两个字符串a,b中的最长公共子串
题目:汽水瓶题目描述有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?输入描述:输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=原创 2021-05-17 17:53:15 · 86 阅读 · 0 评论 -
整数加法,杨辉三角形的变形
题目:整数加法请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回error输入描述: 输入为一行,包含两个字符串,字符串的长度在[1,100]。输出描述: 输出为一行。合法情况输出相加结果,非法情况输出errorimport java.util.*;public class Main{ public static void main(String[] args){ Scanner scan=new Scanner(System.in);原创 2021-05-15 13:39:09 · 183 阅读 · 0 评论 -
扑克牌大小,完全数计算
引IT 行业更重要的是技术面. HR 面只是最后一道把关, 检查这个应聘者是否存在一些 “致命缺陷”.所以整体的面试过程, 大家要保持不卑不亢, 淡定从容, 条理清晰, 沉着稳健, 就不会有太大的问题的.有没有男/女朋友这是一道送命题不管是不是真的有男女朋友, 统一回答 “没有”.一旦回答有, 分分钟被 HR 问死.例如:我们工作地点在北京, 你女朋友不想去北京, 咋办.回答 “分手” , HR 认为你性情凉薄, 不适合公司; 回答 “不去北京” , 那 HR 给你发 offer 干啥 [原创 2021-05-13 13:40:45 · 593 阅读 · 1 评论 -
手套,查找整数二进制中1的个数
题目:手套题目描述:在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现在的问题是,他至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。给定颜色种数n(1≤n≤13),同时给定两个长度为n的数组left,right,分别代表每种颜色左右手手套的数量。数据保证左右的手套总数均不超过26,且一定存原创 2021-05-11 21:10:54 · 144 阅读 · 2 评论 -
参数解析,跳石板,计算日期到天数转换,幸运的袋子
题目描述在命令行输入如下命令: xcopy /s c:\ d:\, 各个参数如下:参数1:命令字xcopy参数2:字符串/s参数3:字符串c:参数4: 字符串d:请编写一个参数解析程序,实现将命令行各个参数解析出来。解析规则:1.参数分隔符为空格2.对于用""包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” "d:“时,参数仍然是4个,第3个参数应该是字符串C:\programfiles,而不是C:\prog原创 2021-05-10 21:03:01 · 146 阅读 · 2 评论 -
牛客 求最大连续bit数,二进制插入,查找组成一个偶数最接近的两个素数
题目一:求最大连续bit数题目:求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1import java.util.*;public class Main{ public static void main(String[] args){ Scanner scan=new Scanner(System.in); while(scan.hasNext()){ int n=scan.nex原创 2021-05-10 16:50:44 · 161 阅读 · 0 评论 -
另类加法,走方格的方案数,最近公共祖先
题目一:另类加法题目:给定两个int A和B。编写一个函数返回A+B的值,但不得使用+或其他算数运算符。题解:1.二进制位相异或的结果就是两个数对应位相加的结果,不考虑进位2.二进制与后左移一位的结果,就是两个数相加进位后的结果两个数相加,如果不考虑进位,那么这两个数异或的值就是这两个数的和import java.util.*;public class UnusualAdd { public int addAB(int A, int B) { if(B==0){原创 2021-05-08 19:01:30 · 147 阅读 · 0 评论 -
牛客连续最大和,统计回文,不要二
题目一:连续最大和题目:一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3import java.util.*;public class Main{ public static int getMax(int a,int b){ return a>b ? a:b; } public static void main(String[] args){ Scanner scan=new原创 2021-05-03 11:34:48 · 162 阅读 · 0 评论 -
字符串转整数, Fibonacci数列,合法括号序列判断
题目一:字符串转整数题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空返回值描述:如果是合法的数值表达则返回该数字,否则返回0public class Solution { public int StrToInt(String str) { char[] ch=str.toCharArray(); if(str==null||str.i原创 2021-05-04 15:17:05 · 135 阅读 · 0 评论 -
进制转换,计算糖果,求最小公倍数
计算糖果题目A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息: A - B, B -C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保证最多只有一组整数A,B,C满足所有题设条件。import java.util.*;public class Main{ public static void main(String[]原创 2021-05-03 17:03:41 · 247 阅读 · 0 评论 -
数组中超过一半的数字,排序子序列,倒置字符串
排序子序列题目:牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2import java.util.*;public class Main{ public static void main(String原创 2021-04-22 12:29:29 · 194 阅读 · 0 评论 -
牛客刷题组队竞速,删除公共字符,最长的数字串
组队竞速题目:牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。例如: 一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3 一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2 为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。 如样例所示:如果牛牛把6个队员划分原创 2021-04-22 09:59:56 · 140 阅读 · 0 评论 -
leetcode算法刷题4
只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。class Solution { public int singleNumber(int[] nums) { HashSet<Integer> set=new HashSet<>(); for(int i=0;i<nums.length;i++){ if(!set.contains(nums[i])){原创 2021-04-10 16:34:35 · 148 阅读 · 0 评论 -
算法刷题3
题目一:有多少个小于当前数字的数字,以数组形式返回答案。class Solution { public int[] smallerNumbersThanCurrent(int[] nums) { int length=nums.length; int[] res=new int[length]; for(int i=0;i<length;i++){ int number=0; for(int j=0;j<length;j原创 2021-04-08 14:01:33 · 119 阅读 · 0 评论 -
算法刷题2
题目二:反转字符串给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。也就是说每隔k个需要反转k个,末尾不够k个时需要全部反转;class Solution { public String reverseStr(String s, int k) { char[] a=s.toCharArray()原创 2021-04-07 18:37:04 · 141 阅读 · 0 评论 -
算法刷题1
题目一:最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。思路:以第一个字符串作为基本,去和剩下的字符串依次比较各个字符; 只要有一个字符不满足立刻返回。class Solution { public String longestCommonPrefix(String[] strs) { if(strs==null||strs.length==0) return ""; for(int i=0;i<strs[0].lengt原创 2021-04-05 20:27:20 · 150 阅读 · 0 评论
分享