java算法学习
文章平均质量分 62
昆昆欧粑粑
这个作者很懒,什么都没留下…
展开
-
蓝桥杯基础练习——回形取数
问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。输出格式 输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。样例输入3 31 2 34 5 67 8 9样例输出1 ...原创 2018-03-28 00:03:07 · 1625 阅读 · 0 评论 -
4个基本算法思想:穷举、递推、递归、概率
4个基本算法思想:穷举、递推、递归、概率内容:这4个基本算法思想是解决基础问题的很实用的方法。这里开始其实就已经是把所有需要的知识准备好了,之后就要开始解题了。此文为初级算法总结的子篇第六章——4个基本算法思想。一、穷举暴力破解,n层for循环。列举每一种可能。例题:鸡兔同笼:一个笼子有35个头,94只脚,问鸡和兔各有多少?解题:鸡兔同笼二、递推:简单的动态规划,根...原创 2018-07-29 17:17:09 · 2063 阅读 · 0 评论 -
括号匹配
输入一串括号(大括号中括号小括号),判断这些括号能不能对应上,注意(只能和)匹配,{}【】同理。import java.util.Scanner;import java.util.Stack;public class 括号匹配 { public static void main(String[] args) { Scanner input = new Scanner(System...原创 2018-07-29 18:09:05 · 631 阅读 · 0 评论 -
初级算法学习步骤
前言零散整理一个多月终于整理完了。。。。这是一篇初级算法学习的步骤总结,或许可以帮助你怎么去接触算法阅读本文需要一定java语法基础和api文档查看基础,但算法其实看重的是思想而不是语言,所以都可以借鉴。本人大二,参加过蓝桥杯。一直没时间吧之前的总结整理出来,现在准备整理一下用java做算法的一些东西……学习了两个月左右算法,从啥都不会到小白再到算是初级……做一个总结,请高手多多指...原创 2018-07-29 18:51:51 · 10697 阅读 · 1 评论 -
罗马数字转化阿拉伯数字
罗马数字包含以下七种字符:I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。...原创 2018-07-27 14:13:50 · 1428 阅读 · 0 评论 -
把一个用数组表示的整数加一(十进制进位模拟)
题目:给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示...原创 2018-08-15 11:37:33 · 994 阅读 · 0 评论 -
java泛型冒泡排序
java使用泛型进行冒泡排序,使得一个算法通用于所有的一维数组public class Bubble { public static void main(String[] args) { Integer[] arr = {5,6,4,3,2,1}; System.out.print("排序前:"); display(arr); ...原创 2018-12-18 20:58:38 · 1087 阅读 · 1 评论 -
java泛型快速排序
java使用泛型进行快速排序,使得一个算法通用于所有的一维数组//快速排序//划分成两个数组,通过递归给每一个子数组快速排序//1.设定关键字,比关键字小的放在一边,大的放在另一边//2.设置数组最右端为关键字//3.递归实现快速排序public class Quick { public static void main(String[] args) { I...原创 2018-12-18 21:00:16 · 312 阅读 · 0 评论 -
约数倍数选卡片——博弈java实现
记录一下代码:import java.util.ArrayList;import java.util.Scanner;public class 约数倍数选卡片 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s1 = scanner.n...原创 2019-03-23 23:27:49 · 339 阅读 · 2 评论 -
贪心算法——宝藏放背包问题(附java代码)
贪心算法:在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。 首先给出一个问题(背包问题),可以描述为:给定一组物品,每种物品都有自己的重量和价格...原创 2018-04-29 21:35:31 · 3756 阅读 · 0 评论 -
0-1背包问题(动态规划)附例题详解——java实现
0-1 背包问题(java实现)代码在最后 给定 n 种物品,每种物品有对应的重量weight和价值value,一个容量为 maxWeight 的背包,问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?面对每个物品,我们只有选择拿取或者不拿两种选择,不能选择装入某物品的一部分,也不能装入同一物品多次。使用动态规划思想,很容易想到,我们需要一个空间来储存:从0号物品开始,对于每...原创 2018-05-07 11:25:56 · 20087 阅读 · 4 评论 -
LeetCode——电话号码的字母组合(java)——回溯算法
问题描述:电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽原创 2018-05-19 11:34:15 · 3707 阅读 · 1 评论 -
分治算法——附棋盘覆盖问题的java代码实现
分治算法基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其规模...原创 2018-04-30 15:51:34 · 8672 阅读 · 3 评论 -
蓝桥杯基础练习——FJ的字符串(java)
问题描述 FJ在沙盘上写了这样一些字符串: A1 = “A” A2 = “ABA” A3 = “ABACABA” A4 = “ABACABADABACABA” … … 你能找出其中的规律并写所有的数列AN吗?输入格式 仅有一个数:N ≤ 26。输出格式 请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。样例输入3样例输出ABACABA下面是代码:p...原创 2018-05-09 15:05:37 · 1250 阅读 · 0 评论 -
蓝桥杯 历届试题——核桃的数量(最小公倍数与最大公约数)(java)
问题描述小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:1. 各组的核桃数量必须相同2. 各组内必须能平分核桃(当然是不能打碎的)3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛)输入格式输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c<30)输出格式输出一个正整数,表示每...原创 2018-05-09 15:10:15 · 338 阅读 · 0 评论 -
蓝桥杯基础练习——Huffuman树
问题描述 Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。 给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下: 1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。 2. 重复步骤1,直到{pi}中只剩下一个数。...原创 2018-05-09 15:21:14 · 302 阅读 · 0 评论 -
java实现数组的快速排序
快速排序 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。基本步骤为:1.设定关键字,划分成两个数组,比关键字小的放在一边,大的放在另一边2.我们选择设置数组最右端为关键字3.递归实现快速排序,通过递归给每一个...原创 2018-04-24 22:52:51 · 731 阅读 · 0 评论 -
haffman哈夫曼树——贪心算法(java)
接下来学习了哈夫曼树,总结一下哈夫曼树:了解Huffman算法之前,我们先介绍一下一颗树的构造价值:构造价值指的是,在一个树当中,如果有n层,那么每层的系数为1、2、3……n,然后吧每个叶子节点的构造价值乘以系数,总和就是这棵树的构造总价值,这也就叫做哈夫曼树的构造价值,我们看一个例子:对于这一棵树,我们计算一下他的哈夫曼构造价值:这里叶子节点一共有3个:6和13和17所以价值等于6*2 + 13...原创 2018-05-09 19:58:01 · 10809 阅读 · 4 评论 -
数据结构(java)——二叉树的插入、遍历、删除、高度、叶子节点个数、判完全二叉树等操作
树树是一个神奇的数据结构……树的每个节点,都存在着多个指针,指向他的下一层,最后一层层下去通向叶子节点。树是一个由有限个节点组成的一个具有层次关系的集合。他看起来像一棵倒着的树。树里面的每个节点,会有一个父节点(上一层)和多个孩子节点(下一层)。当然还会有数据域。。。数据域可以是多个。。二叉树其实重点就是二叉树,二叉树指的是,每个节点最多有2个分支,称为左孩子和右孩子。所以,我们来看一下树的节点类...原创 2018-05-03 18:28:44 · 719 阅读 · 0 评论 -
非常简洁明了的基数排序——java实现
基数排序: 它的基本思想是:类似于创建一个二维的链表(第一层链表为0-9号),首先看每个数的个位,如果为0放入0号链表,为1放入1号链表……再对十位,百位排……。每躺排序后吧链表遍历一遍放入传入的arr中,经过几轮之后就排序完成。简单来说就是先对个位排序,在对十位排序,再对百位排序,以此类推。排序方法:比如我们要排序 arr{135,242,192,93,345,11,24,19}第一步:收...原创 2018-04-26 16:25:06 · 344 阅读 · 0 评论 -
高僧斗法——博弈游戏java实现
时间限制:1.0s 内存限制:256.0MB问题描述 古时丧葬活动中经常请高僧做法事。仪式结束后,有时会有“高僧斗法”的趣味节目,以舒缓压抑的气氛。 节目大略步骤为:先用粮食(一般是稻米)在地上“画”出若干级台阶(表示N级浮屠)。又有若干小和尚随机地“站”在某个台阶上。最高一级台阶必须站人,其它任意。(如图1所示) 两位参加游戏的法师分别指挥某个小和尚向上走任意多级的台阶,...原创 2019-03-23 23:29:38 · 310 阅读 · 0 评论