
算法
JQW_YNU
无
展开
-
7届蓝桥杯第6题方格填数
方格填数如下的10个格子 +--+--+--+ | | | |+--+--+--+--+| | | | |+--+--+--+--+| | | |+--+--+--+(如果显示有问题,也可以参看【图1.jpg】)填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的...原创 2018-12-02 13:35:27 · 418 阅读 · 0 评论 -
一 . 暴力破解与实用性优先
做题目时:能枚举就枚举,能逆向就逆向,先试探一个解。1. 猜年龄【问题描述】美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”...原创 2018-12-03 11:26:24 · 776 阅读 · 0 评论 -
2014年第五届蓝桥杯JAVA/JAVA++程序设计本科B组决赛 出栈次序(结果填空)
出栈次序X星球特别讲究秩序,所有道路都是单行线。一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行。路边有个死胡同,只能容一辆车通过,是临时的检查站,如图【p1.png】所示。X星球太死板,要求每辆路过的车必须进入检查站,也可能不检查就放行,也可能仔细检查。如果车辆进入检查站和离开的次序可以任意交错。那么,该车队再次上路后,可能的次序有多少种?为了方便起见,假设检查...原创 2018-12-02 22:35:21 · 310 阅读 · 0 评论 -
回溯法——八 / N 皇后问题
回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种方法适用于解一些组合数相当大的问题。回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。回溯法指导思想——走不通,就...原创 2018-11-27 18:01:55 · 421 阅读 · 0 评论 -
0-1背包问题—回溯算法—java实现
0-1背包问题【问题描述】有n种可选物品1,…,n ,放入容量为c的背包内,使装入的物品具有最大效益。表示n :物品个数c :背包容量p1,p2, …, pn:个体物品效益值w1,w2, …,wn:个体物品容量【问题解析】0-1背包问题的解指:物品1,…,n的一种放法(x1, ···,xn的0/1赋值),使得效益值最大。假定背包容量不足以装入所有物品:面临选择【优...转载 2018-11-27 18:06:50 · 1153 阅读 · 0 评论 -
回溯法总结+四个小例题(装载问题,01背包,n后,最大团,m着色)
目录 回溯法的基本策略 回溯法的基本策略 回溯法的解空间 回溯法基本思想 回溯法解题步骤 递归回溯和迭代回溯 子集树和排列树 装载问题 01背包问题回溯法求解 n后问题 图的最大团问题 图的m着色问题 回溯法的基本策略策略:回溯法在问题的解空间树中,按深度优先搜索,从根节点出发搜索解空间。算法搜索至某一结点时,先判断该结点是否包含问题的解,如果肯定不包含,...转载 2018-11-28 19:53:00 · 1705 阅读 · 0 评论 -
LeetCode 组合总和 Ⅳ
给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。示例:nums = [1, 2, 3]target = 4所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。因此输出为 7。进阶:如果给定的数组中含有负...原创 2018-12-07 16:52:38 · 406 阅读 · 1 评论 -
蓝桥杯-第七届省赛javaA组-搭积木
搭积木小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9。搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。最后搭成4层的金字塔形,必须用完所有的积木。下面是两种合格的搭法:01 23 4 56 7 8 903 17 5 29 8 6 4 请你计算这样的搭法一共有多少种?请填表示总数目的数字。注意:你提交...转载 2018-12-03 11:29:48 · 255 阅读 · 0 评论 -
【蓝桥杯】最小公倍数和最大公约数
最大公约数就是递归求的: 最小公倍数= a*b/gcd(a,b)原创 2018-12-03 12:21:03 · 377 阅读 · 0 评论 -
搭积木+寒假作业+方格填数 DFS解法
蓝桥杯比赛关于 DFS 算法总结方法以及套路分析首先我们来看几道java A组的题目,都是同一年的哦!!!搭积木小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9。搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。最后搭成4层的金字塔形,必须用完所有的积木。下面是两种合格的搭法: 0 1 2 3 4 56 ...原创 2018-12-04 21:36:21 · 582 阅读 · 0 评论 -
双向链表与循环链表
双向链表单链表的一个优点是结构简单,但是它也有一个缺点,即在单链表中只能通过一个结点的引用访问其后续结点,而无法直接访问其前驱结点,要在单链表中找到某个结点的前驱结点,必须从链表的首结点出发依次向后寻找,但是需要Ο(n)时间。为此我们可以扩展单链表的结点结构,使得通过一个结点的引用,不但能够访问其后续结点,也可以方便的访问其前驱结点。扩展单链表结点结构的方法是,在单链表结点结构中新增加一...转载 2018-11-26 21:51:53 · 435 阅读 · 0 评论 -
算法分析(时间复杂度和空间复杂度)
算法分析(时间复杂度和空间复杂度)对于一个给定的算法需要做两项分析,第一就是证明算法的正确性,第二就是计算算法的复杂度。算法的复杂度包括时间复杂度和空间复杂度。1 度量算法效率的方法共存在两种方法:事后统计法和事前分析估计算法。事后统计法:先将算法实现,然后输入适当的数据运行,计算算法的时间复杂度和空间复杂度。事前分析估算法(渐进复杂度):对算法所消耗资源的一种估算方法。比较常用...原创 2018-11-26 16:39:49 · 2410 阅读 · 0 评论 -
空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。 计算方法: ①忽略常数,用O(1)表示 ②递归算法的空间复杂度=递归深度N*每次递归所要的辅助空间 ③对于单线程来说,递归有运行时堆栈,求的是递归最深的那一次压栈所耗费的空间的个数,因为递归最深的那一次所耗费的空间足以容纳它所有递归过程。如:1 int a;2 int b;3 int c;4 printf("%...原创 2018-11-26 17:21:35 · 271 阅读 · 0 评论 -
单链表的讲解:单链表的原理,添加、删除元素
单链表及其节点链表是一系列的存储数据元素的单元通过指针串接起来形成的,因此每个单元至少有两个域,一个域用于数据元素的存储,另一个域是指向其他单元的指针。这里具有一个数据域和多个指针域的存储单元通常称为 结点(node)一种最简单的结点结构如图所示,它是构成单链表的基本结点结构。在结点中数据域用来存储数据元素,指针域用于指向下一个具有相同结构的结点。因为只有一个指针结点,称为单链表 ...转载 2018-11-26 17:31:25 · 1382 阅读 · 0 评论 -
7届蓝桥杯第8题 -四平方和
四平方和四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。如果把0包括进去,就正好可以表示为4个数的平方和。比如:5 = 0^2 + 0^2 + 1^2 + 2^27 = 1^2 + 1^2 + 1^2 + 2^2(^符号表示乘方的意思)对于一个给定的正整数,可能存在多种平方和的表示法。要求你对4个数排序:0 <= a <= b ...原创 2018-11-29 19:36:51 · 474 阅读 · 0 评论 -
7届蓝桥杯第10题 -压缩变换
压缩变换小明最近在研究压缩算法。他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比。然而,要使数值很小是一个挑战。最近,小明需要压缩一些正整数的序列,这些序列的特点是,后面出现的数字很大可能是刚出现过不久的数字。对于这种特殊的序列,小明准备对序列做一个变换来减小数字的值。变换的过程如下:从左到右枚举序列,每枚举到一个数字,如果这个数字没有出现过,刚将数字变换成...原创 2018-11-29 20:17:55 · 339 阅读 · 0 评论 -
java Connections使用研究
1.java list统计某个元素出现的次数 Collections.frequency(list,"1") (字符串也能使用) Collections.frequency(list,1)2.排序Collections.sort(list);字符串会根据前缀字母顺序排序,数字会根据从小到大排序但不能对数组进行排序,如果要对数组中的元素进行排序,需要使用Arrays,这主要...原创 2018-12-07 17:38:05 · 1372 阅读 · 0 评论 -
蓝桥杯历届试题——取球游戏(博弈论)
取球游戏今盒子里有n个小球,A、B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。 我们约定: 每个人从盒子中取出的球的数目必须是:1,3,7或者8个。 轮到某一方取球时不能弃权! A先取球,然后双方交替取球,直到取完。 被迫拿到最后一个球的一方为负方(输方) 请编程确定...转载 2018-12-03 13:51:59 · 543 阅读 · 0 评论 -
蓝桥-分酒问题
3. 分酒问题有4个红酒瓶子,它们的容量分别是:9升, 7升, 4升, 2升开始的状态是 [9,0,0,0],也就是说:第一个瓶子满着,其它的都空着。允许把酒从一个瓶子倒入另一个瓶子,但只能把一个瓶子倒满或把一个瓶子倒空,不能有中间状态。这样的一次倒酒动作称为1次操作。假设瓶子的容量和初始状态不变,对于给定的目标状态,至少需要多少次操作才能实现?本题就是要求你编程实现最小操作次数的...转载 2018-12-03 23:02:51 · 885 阅读 · 0 评论 -
博弈问题
http://weilog.lanqiao.org/2018/03/17/altraining_ep5/转载 2018-12-03 23:05:41 · 261 阅读 · 0 评论 -
蓝桥-天秤称重问题
经典算法之天秤称重问题问题描述:已知所有砝码重量均为3的倍数,且所有重量的砝码有且只有一个要求输出1到n的所有物品的称重方式解题思路:物品重量 砝码1 12 3 - 13 34 3 + 15 9 - 3 - 1... ...经过对比发现,若物品重量刚刚超过了较大砝码的一半,则需要减去后一位数,反之则加. import...转载 2018-12-03 22:20:28 · 389 阅读 · 0 评论 -
蓝桥杯-迷宫问题(图)
...1111111111111111111111111111111.111111........1111111111.111111.111111..111.11111111.....111111.11111111111.1111111111.11111111.111111.................11111111.111111.11111111111.11111.111111...转载 2018-12-03 21:18:09 · 2970 阅读 · 1 评论 -
第9章 动态规划基础
第9章 动态规划基础很多同学听到“动态规划”的名称可能会望而生畏,觉得动态规划的问题都很复杂。但其实,动态规划本质依然是递归算法,只不过是满足特定条件的递归算法。在这一章里,我们就来逐步解开动态规划的神秘面纱目录9-1 什么是动态规划9-2 第一个动态规划问题 Climbing Stairs9-3 发现重叠子问题 Integer Break9-4 状态的定义和状态转移 House R...原创 2018-12-06 12:23:08 · 695 阅读 · 0 评论 -
蓝桥杯第六届省赛JAVA真题----生命之树
生命之树在X森林里,上帝创建了生命之树。 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。 上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都存在一个点列 {a, v1, v2, …, vk, b} 使得这个点列中的每个点都是S里面的元素,且序列中相邻两个点间有一条边相连。 在这个前提下,上帝要使得S中的点所对应的整数的和尽量大。...原创 2018-12-05 18:11:17 · 494 阅读 · 0 评论 -
算法-动态规划 Dynamic Programming--从菜鸟到老鸟
前言最近在牛客网上做了几套公司的真题,发现有关动态规划(Dynamic Programming)算法的题目很多。相对于我来说,算法里面遇到的问题里面感觉最难的也就是动态规划(Dynamic Programming)算法了,于是花了好长时间,查找了相关的文献和资料准备彻底的理解动态规划(Dynamic Programming)算法。一是帮助自己总结知识点,二是也能够帮助他人更好的理解这个算法。后面...转载 2018-12-05 22:04:26 · 307 阅读 · 0 评论 -
leetcode-Climbing Stairs
本题的解法类似于斐波那契数列记忆化搜索解法:import java.util.Arrays;/** * Created by liuyubobobo. */public class Solution1 { private int[] memo; public int climbStairs(int n) { memo = new in...原创 2018-12-05 22:17:15 · 370 阅读 · 0 评论 -
leetcode Integer Break
动态规划问题解题思路: 1.递归解法(效率偏低)/// 343. Integer Break/// https://leetcode.com/problems/integer-break/description//// 暴力搜索/// 在Leetcode中提交这个版本的代码会超时! (Time Limit Exceeded)/// 时间复杂度: O...转载 2018-12-05 23:06:25 · 394 阅读 · 0 评论 -
第八届蓝桥杯国赛Java b组 填字母游戏
小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说:“我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了”。K大师在纸上画了一行n个格子,要小明和他交替往其中填入字母。并且:1. 轮到某人填的时候,只能在某个空格中填入L或O2. 谁先让字母组成了“LOL”的字样,谁获胜。3. 如果所有格子都填满了,仍无法组成LOL,则平局。小明试验了几次都输了,他很惭愧,希望...原创 2018-12-03 17:29:59 · 547 阅读 · 0 评论 -
蓝桥-深度优先求连通性
给定一个方阵,定义连通:上下左右相邻,并且值相同。可以想象成一张地图,不同的区域被涂以不同颜色。输入:整数N, (N<50)表示矩阵的行列数接下来N行,每行N个字符,代表方阵中的元素接下来一个整数M,(M<1000)表示询问数接下来M行,每行代表一个询问,格式为4个整数,y1,x1,y2,x2,表示(第y1行,第x1列) 与 (第y2行,第x2列) 是否连通。连通输出...原创 2018-12-03 19:12:45 · 340 阅读 · 0 评论 -
二分查找思想(使用递归和不适用递归的思想)
public class BinarySearch { public static void main(String[] args) { int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; System.out.println(searchLoop(array, 101)); } /** * 循环二分查找,返回第一次出...转载 2018-11-29 13:05:06 · 277 阅读 · 0 评论 -
算法中常见函数操作
1.Math 常见:abs() min()max()sqrt() //求平方根cbrt() //求立方根round() //四舍五入,返回int 值rint() //四舍五入,返回double值random() //随机数floor() //返回小于参数的最大整数ceil() //返回大于参数的最小整数 2.String ,String...原创 2018-10-21 13:49:04 · 238 阅读 · 0 评论 -
Java Map 按Key排序和按Value排序
Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value)。1、按键排序jdk内置的java.util包下的TreeMap<K,V>既可满足此类需求,向其构造方法 TreeMap(Comparator<? super K> comparator) 传入我们自定义的比较器即可实现按键...原创 2018-10-23 21:17:23 · 191 阅读 · 0 评论 -
java四舍五入
public class utils { public static void main(String[] args) { double a=1.2263; System.out.printf("%.2f",a); }}使用 System.out.printf对输出进行格式 控制,了解更多参看下面网址:https://blog.youkuaiyun.com...原创 2018-10-23 23:03:08 · 152 阅读 · 0 评论 -
Java--常用正则匹配符号
1、字母:匹配单个字母(1)A:表示匹配字母A;(2)\\:匹配转义字符“\”;(3)\t:匹配转义字符“\t”;(4)\n:匹配转义字符“\n”;2、一组字符:任意匹配里面的一个单个字符:(1)[abc]:表示可能是字母a,可能是字母b或者是字母c;(2)[^abc]:表示不是字母a,字母b,字母c的任意一个;(3)[a-zA-Z]:表示全部字母中的任意一个;...原创 2018-10-26 10:55:17 · 1886 阅读 · 0 评论 -
剑指offer算法题(一)二维数组中的查找
剑指offer算法题(一)题目1:二维数组中的查找在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路分析: 从左上往右下方来解决这个问题 例如在如下的矩阵中查找数字27:6 7 9 1010 13 19 2320 27...原创 2018-10-26 11:47:07 · 207 阅读 · 0 评论 -
快速排序原理理解
高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大...原创 2018-06-14 20:09:45 · 884 阅读 · 0 评论 -
动态规划——矩阵连乘积
实验目的:理解动态规划算法的基本思想 运用动态规划算法解决实际问题实验内容:编程矩阵A1A2A3A4A5的连乘积,并给出最优的计算次序,其中各矩阵维数分别为:A1(20*30),A2(30*20),A3(20*15),A4(15*20),A5(20*10)实验步骤:package com.shiyan.org; public class Matrix {void ...原创 2018-10-19 12:38:36 · 1387 阅读 · 0 评论 -
7-18 猴子选大王
7-18 猴子选大王 (20 分)一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?输入格式:输入在一行中给一个正整数N(≤1000)。输出格式:在一行中输出当选...原创 2018-10-22 09:39:22 · 500 阅读 · 0 评论 -
Java遍历Map对象的四种方式
关于java中遍历map具体哪四种方式,请看下文详解吧。方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。 1 2 3 4 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry&...原创 2018-10-22 09:52:55 · 151 阅读 · 0 评论 -
java Map常见使用方法
常用api:map.keyset注意:上面遍历存在三种:一种是只遍历key,使用keySet, 一种是只遍历value,使用vlaues , 还有一种是遍历key+value,并通过getKey和getValue获取指定的单元素 ...原创 2018-10-22 10:54:41 · 1304 阅读 · 0 评论