Java算法题
kokouya
♥
展开
-
和为S的连续正数序列
题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数序列...原创 2019-12-25 23:40:25 · 148 阅读 · 0 评论 -
n 个数里最小的 k 个
题目描述:找出n个数里最小的k个输入描述:每个测试输入包含空格分割的n+1个整数,最后一个整数为k值,n 不超过100。输出描述:输出n个整数里最小的k个数。升序输出示例输入3 9 6 8 -10 7 -11 19 30 12 23 5输出-11 -10 3 6 7一般思路:每次通过比较在数组中找出最小的数与前面的数交换并输出。import java.u...原创 2019-11-26 12:24:15 · 179 阅读 · 0 评论 -
删数
题目描述:有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。输入描述:每组数据为一行一个整数n(小于等于...原创 2019-11-26 10:28:22 · 177 阅读 · 0 评论 -
不要二
题目描述:二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根,小易想知道最多可以放多少块蛋糕在网格盒子里。输入描述:每组数组包含网格长宽...原创 2019-11-21 23:12:22 · 106 阅读 · 0 评论 -
神奇的口袋
神奇的口袋:有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。输入描述:输入的第一行是正整数n (1 <=...原创 2019-11-21 17:44:46 · 346 阅读 · 0 评论 -
买苹果
题目链接:小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。输入描述:输入一个整数n,表示小易想购买n(1 ≤ n ≤ 100)个苹果输出描述:输出一个整数表示最少需要购买的袋数,如果不能买恰好n个苹果则输出 -1示例1:输入20...原创 2019-11-21 17:11:39 · 178 阅读 · 0 评论 -
寻找第K大
寻找第K大【解题思路】:这题应该是用快排的思想:例如找49个元素里面第24大的元素,那么按如下步骤:1.进行一次快排(将大的元素放在前段,小的元素放在后半段),假设得到的中轴为p2.判断 p - low + 1 == k ,如果成立,直接输出a[p],(因为前半段有k - 1个大于a[p]的元素,故a[p]为第K大的元素)3.如果 p - low + 1 > k, 则第k大的元...原创 2019-11-21 15:55:47 · 798 阅读 · 0 评论 -
统计回文
统计回文题目描述:“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。例如:...原创 2019-11-12 16:26:24 · 97 阅读 · 0 评论 -
旧键盘
问题描述:旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。输入描述:输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括大、小写)、数字0-9、 以及下划线“_”(代表空格)组成。题目保证2个字符串均非空。输出描述:按照发现顺序,在一...原创 2019-10-11 20:01:28 · 199 阅读 · 0 评论 -
删除字符串首尾空格,中间的连续空格只留一个。
题目描述:编写代码完成如下功能:删除字符串首尾空格,中间的连续空格只留一个,原来字符串的顺序不变。如:"********as****adadp***"(*表示空格)变成"as*adadp"。思路:先删除首尾空格,若删除后字符串为空,则代表该字符串全为空格,那么返回 null,不用继续进行操作。若不为空,然后遍历字符串,为了避免访问溢出,从第一个遍历到倒数第二个字符。若该字符不...原创 2019-08-24 13:59:36 · 2614 阅读 · 0 评论 -
X^Y,X和Y均为整数
题目描述:模拟实现pow(x,y),x 和 y 均为整数(0不是整数)。思路:x,y有可能为正整数,负整数,当指数 y 为负数时,先对指数求绝对值,然后算出次方的结果再求倒数。方法1:一步一步求解,利用循环让 x 乘 x方法2:递归求解,简化运算。以平方为单位求解。Java实现import java.util.Scanner;public class MyPow {...原创 2019-08-20 19:08:21 · 1341 阅读 · 0 评论 -
从第一个字符串中删除第二个字符串中所有的字符
题目描述:输入两个字符串,从第一个字符串中删除第二个字符串中所有的字符。例如:输入"They are students.",输入"aeiou",则删除之后的第一个字符串变为"Thy r stdnts."思路:建立数组,将字符串 2 的字符在数组中标记为 1,定义两个指针指向字符串 1,遍历字符串 1,若当前字符所代表的 ASIIC码在数组中对应的值不为 1,表示该字符不是字符串 2 中出现...原创 2019-08-20 17:58:25 · 2672 阅读 · 0 评论 -
替换字符串的空格
题目描述:实现一个函数,把字符串的每个空格替换成%20。如"abc defgx yz",替换成"abc%20defgx%20yz"。思路:用数组来实现替换遍历找出原字符串中空格的个数 新数组的长度就是原数组长度与空格个数2倍的和 从头遍历原数组,若元素不是空格直接拷贝,如果是空格,则将新数组的元素置为 '%', '2', '0'。public class ReplaceString...原创 2019-08-05 14:00:40 · 175 阅读 · 0 评论 -
杨氏矩阵(二维数组的查找)
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。时间复杂度小于O(n)。public class YangMatrix { public static int findNum(int[][] a,int row,int col,int num){ int ...原创 2019-08-05 13:31:34 · 106 阅读 · 0 评论 -
链表分割
题目描述:编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode*pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。示例:2->4->1->5->9->3->6->null, x = 5 输出:2->4->1->3->5-...原创 2019-07-26 23:27:07 · 207 阅读 · 0 评论 -
链表的回文结构
题目描述:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。测试样例:1->2->2->1 返回:true思路:找到中间结点 mid ,将 mid 开始的结点反转,生成新链表,比较两个链表元素是否完全相同。public...原创 2019-07-26 23:19:54 · 77 阅读 · 0 评论 -
输出链表中倒数第k个结点
链表中倒数第k个结点:题目描述:输入一个链表,输出该链表中倒数第k个结点。示例:输入:1->4->7->2->5->6, k = 3; 输出: 7->2->5思路:定义新结点从头开始遍历链表,移动 k 次后停止,再定义新的结点指向链表头结点,两个结点同时后移,直至前一个为 null。注意:链表可能一开始就是空的。 如果 k 等于链表长度,如...原创 2019-07-26 23:47:51 · 188 阅读 · 0 评论 -
最大最小公倍数(蓝桥杯)
问题描述:已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。输入格式:输入一个正整数N。输出格式:输出一个整数,表示你找到的最小公倍数。样例输入:9样例输出:504数据规模与约定:1 <= N <= 106。解析:要求最小公倍数中的最大数,其实就是当三个数的最大公约数为 1 ,即三个数互为质数时,三个数的乘积最大。例如对于 9 来说,9...原创 2019-12-15 18:52:12 · 369 阅读 · 0 评论 -
第十届蓝桥杯JavaB组省赛真题数的分解
第四题:数的分解题目描述:把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法?注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写...原创 2019-11-04 20:38:19 · 446 阅读 · 0 评论 -
【算法】动态规划与那些绕不清的题目们
DP定义:动态规划是分治思想的延伸,通俗一点来说就是大事化小,小事化无的艺术。在将大问题化解为小问题的分支过程中,保存对这些小问题已经处理好的结果,并供后面处理更大规模的问题时直接使用这些结果。动态规划的特点:把原来的问题分解成了几个相似的子问题 所有的子问题都只需要解决一次 储存子问题的解动态规划的本质,是对问题状态的定义和状态转移方程的定义(状态与状态之间的递推关系),动规一般都需要和数组搭配使用来保存中间结果。动态规划问题一般从以下四个角度考虑:状态定义(子问题) 状态间...原创 2020-09-03 08:51:14 · 251 阅读 · 0 评论 -
字符串压缩
题目描述:输入字符串只包含 a-z 字母以及结束标志,请编写函数实现对连续出现的相同字符进行压缩。例如:"xxxyyyyz" 压缩后字符串为 "3x4yz","yyyyyyy" 压缩后为 "7y"。StringBuilder 用来构造一个没有字符的字符串。通过 append()方法写入数据。思路:遍历字符串,定义计数器 count ,当字符相同时计数,直到出现不同字符写入相应数据。一...原创 2019-08-22 21:13:43 · 215 阅读 · 0 评论 -
如何判断一个数n是否是2的k次方?
问题描述:如何判断一个数 n 是否是 2 的 k 次方?注意:不用求 k 是多少,只需要判断,请编写函数实现。首先研究一下 2 的 k 次方的数据的特征:(0001)B = 2^0 = 1,(0010)B = 2^1 = 2,(0100)B = 2^2 = 4。以此得出:2^k 的数据在二进制表示中只有一位为 1 。其实这道题与求一个数在二进制中 1 的个数 的题相似。思路1...原创 2019-08-22 20:08:16 · 1058 阅读 · 0 评论 -
求一个有序数组中两个元素值相加为k的数组,返回这两个元素的下标。
题目描述:求一个有序数组(假设升序)中两个元素值相加为k的数组,返回这两个元素的下标。没找到返回 -1。Java实现:查看完整测试代码方法1:设置两个循环遍历数组,依次相加比较。时间复杂度O(n^2),空间复杂度O(n)。public static int[] sumK(int[] a,int k){ int[] index = {-1,-1}; in...原创 2019-08-21 21:54:31 · 683 阅读 · 0 评论 -
求变量x在二进制中1的个数
import java.util.Scanner;public class CountOneBits { //化为二进制求1的个数 public static int count1(int n){ int count = 0; while(n != 0){ if(n%2 == 1){ cou...原创 2019-08-08 23:01:12 · 283 阅读 · 0 评论 -
求第 n 个斐波那契数(非递归)
import java.util.Scanner;public class Fibonacci { public static int Fib(int n){ int c = 0; int a = 1; int b = 1; if(n < 3){ return 1; } ...原创 2019-08-07 19:51:46 · 296 阅读 · 0 评论 -
计算年月日/时分秒
1.计算年-月-日功能:1.传入初识日期 2.计算多少天之后的日期 3.计算多少天之前的日期 4.计算两个日期的天数差思路:首先要清楚年,月,日的范围,不同月份天数不同;其次,计算之后的日期时要注意月份大于12时,就代表增加了一年,此时记得将月份置为1;计算之前日期时也是如此,当月份小于1,则代表年数减1,此时月份置为12https://github.com/C...原创 2019-07-20 16:33:07 · 1479 阅读 · 0 评论 -
练习day02
1. 给定两个整形变量的值,将两个值的内容进行交换。2. 不允许创建临时变量,交换两个数的内容(附加题)3.求10 个整数中最大值。4.将三个数按从大到小输出。5.求两个数的最大公约数。6.编写程序数一下 1到 100 的所有整数中出现多少次数字9https://github.com/Consini/JavaSE/blob/master/C%E4%BD%9C%E4%B8%9...原创 2019-07-18 16:01:09 · 131 阅读 · 0 评论 -
练习day01
使用for循环打印乘法口诀表public class MulTable{ public static void main(String[] args){ int i=0; int j=0; for(i=1;i<=9;i++){ for(j=1;j<=i;j++){ System.out.print(j+"*"+i+"="+i*j+"\t"); }...原创 2019-07-17 15:58:33 · 144 阅读 · 0 评论 -
递归实现快速排序
快速排序思路(挖坑法):选取数组最左边或最右边值作为key值,指定数组第一个元素为left,倒数第二个为right。 比较 array[left] 与key,若是array[left] > key,则left指向该元素,若array[left] < key,则使left++,直至找出比left大的值。 比较 array[right] 与key,若是 array[right] ...原创 2019-07-17 09:27:09 · 453 阅读 · 0 评论