
算法
文章平均质量分 62
new一个对象777
Java是世界上最好的语言!
展开
-
历届蓝桥杯省赛Java B组真题思路总结
历届蓝桥杯Java B组思路总结写在前面蒟蒻一枚,写此篇博客作为我的赛前突击,基本每年后面的两个大题或者是很难的题我都没有做,我的目标是能混省二我就谢天谢地了~~13年省赛世纪末的星期此类题目主要是考察对时间的操作,主要用到的API是LocalDate,LocalTime,Calendar,关于对时间的操作很容易考,所以一定掌握这几个类。马虎的算式此题就是暴力破,五重for循环,注意一下限制条件就可以了振兴中华一看题目就可以知道这是一道搜索的题目,所以我们首先考虑深搜和广搜public原创 2021-04-17 16:21:22 · 913 阅读 · 0 评论 -
第十一届Java B组蓝桥杯真题
写在前面时光荏苒,岁月如梭,恍惚间蓝桥杯开赛的日子近在咫尺。。为什么这么官方。。。咳咳,明天就开赛了,俗话说得好临阵磨枪,不快也光!秉承着华夏民族优良专统,于是来刷一遍去年的真题,从去年的难度整体上来看我要是去年去比赛的话省三应该不成问题,但是不知道今年会不会变难,他要是上来就是高级数学公式,找各种规律,DP,贪心,背包那我干脆弃赛得了,高级算法不适合我,太难了~~,此篇我也只是解决了前八道题目,最后两道题目与我目前段位实在是不匹配,所以以后有缘再续 ~~真题链接真题看这里——>> ht原创 2021-04-17 12:27:33 · 528 阅读 · 0 评论 -
杨辉三角
杨辉三角是一个很有特点的三角形,它的左边和右边都是1,而且它的某一行的值等于上一行的y+y-1的值。如图:所以我们可以用递归得出规律,即当我们的y == 0或者是x == y的时候就作为递归的退出条件,否则一直递归调用函数,即fun(x-1,y-1)+fun(x-1,y)。接下来我们来实现一下。import java.util.Scanner;/** * 杨辉三角 */public class Main { public static void main(String[] args)原创 2021-04-15 11:41:16 · 241 阅读 · 0 评论 -
写一个全排列模板
看了历届的蓝桥杯真题发现有很多都是全排列的题目,全排列的题目是由固定的套路和模板的,现在我来分享一下复制过去改一改就可以用的全排列的模板。/** * 全排列模板 */public class Main { static int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; static int ans = 0; public static void main(String[] args) { fun(0);// 固定原创 2021-04-15 10:23:07 · 108 阅读 · 0 评论 -
高快省的排序--快排
引言这篇博客我们来复习一下效率极高的排序,快速排序,用分治的思想实现的一个优雅的排序算法,是一个真正的高速,快捷,省空间的排序。诸如Java的Arrays类中的sort方法的底层源码也是用快排实现的,接下来就让我们看一下快排的实现吧。快速排序为什么快?快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离原创 2021-04-14 20:05:27 · 163 阅读 · 0 评论 -
n皇后问题再探究--DFS求解
前一段时间写了篇n皇后的博客,近期有正在准备蓝桥杯,虽然已凉~~,但还是要挣扎一下嘛,所以再来优化一下上一篇博客的代码,顺便对递归和回溯有更充分的理解,接下来我们上代码,每条语句的意思都在注释里面了。参考视频: https://www.bilibili.com/video/BV1bK4y1n7iq?from=search&seid=17252516836113335016package cn.shi;import java.util.Scanner;/** * n皇后 深搜+回溯原创 2021-04-14 17:51:25 · 126 阅读 · 1 评论 -
递归+交换数字实现全排列
刚习得一种全排列的实现方法,特此来记录一下,此方法运用递归+交换数字实现,交换–》递归–》交换(回溯)。package cn.shi;import java.util.Arrays;public class Full_Permutation { public static void main(String[] args) { perm(new int[] {1,2,3},0,2); } //递归求全排列 public static void perm(int[] array,i原创 2021-04-13 20:26:06 · 183 阅读 · 0 评论 -
深度优先搜索之迷宫问题
深搜即DFS,顾名思义,往深处一直搜索,走过的点都被记录下来,直到找到目标或者是触发终止条件,最后回溯到走过的某一个点,在这个点上面继续进行深搜,最后一个图中所有的点都能被便利得到,再用深搜需要注意的点就是我们在回溯的时候我们记录的点要记得还原成没有记录过的状态。迷宫问题就是用深搜解决的最好的例子,接下来我们来看一下这个迷宫问题吧!迷宫问题就是给定一个起点,和终点,还有一张图,图中有很多的障碍物,然后让我们找到从起点到终点的最短路径,很显然这就是运用的深搜了,此题的解法就是我们每个点在进行试探的时候会有四原创 2021-04-03 10:36:11 · 790 阅读 · 0 评论 -
经典回溯算法--八皇后
今天上课的时候老师讲到了回溯的经典问题–n皇后,我们老师用的例子是3皇后,过于简单,课后我又总结了一下,加之我自己的理解,于是n皇后的算法就实现了,此算法如果是暴力求解的话是会超时的,所以我们用回溯加深搜来实现,下面上代码!!Duang ~ Duang ~ Duang ~package Test;import java.util.Scanner;public class Main { // n皇后之八皇后 static int sum = 0; static int原创 2021-03-17 15:30:54 · 184 阅读 · 0 评论 -
动态规划之背包问题
动态规划(Dynamic Programming,DP),在平时的应用非常广泛,几乎在所有的比赛和面试当中都可以看到DP的身影,所以我来说一下什么是DP动态规划,然后顺便讲解一个非常经典的DP问题–背包问题。DP基本思想是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。核心是将一个问题分解成为若干个子问题什么是动态规划?动态规划(Dyn原创 2021-03-13 23:49:56 · 133 阅读 · 0 评论 -
处理大数的Java API之BigInteger和BigDecimal
当我们遇到很大的一串数字的时候用long就放不开了,于是Java有一个API叫BigInteger和BigDecimal可以很方便的用来处理很长的数字。可以使用BigInteger操作大整数 整数可以使用BigDecimal指定小数的保留位数 小数BigInteger首先我们来看一下BigInteger的一些常用方法,如下面代码所示,代码中的注释详尽的介绍了它的用法package cn.shi;import java.math.BigInteger;public class Test原创 2021-03-13 12:52:04 · 184 阅读 · 0 评论 -
运用递归的几个简单例子
毫无疑问,递归是最好用的解题方案,像n的阶乘,斐波那契数列,跳格子,走梯子等经典问题,接下来让我来给大家看几个递归调用的经典李子坝!蓝桥杯真题–跳格子问题描述的大概意思就是让我们从第一个格子跳到最后一个格子,并且跳的过程中必须组成一段话,问有几种跳法,代码实现public class Test01 { public static void main(String[] args) { int count = f(0,0); System.out.println(count); }原创 2021-03-12 23:23:41 · 364 阅读 · 0 评论 -
Java API之LocalDate和LocalTime
今天刷题的时候突然发现一个宝藏API,我称它为“时间管理者”,当当当,他们就是LocalDate和LocalTime!!!这个自jdk 1.8才诞生的API不所谓是不强大,对于时间的很多操作他们都支持,加时间吗,减时间,生成时间,输出当前日期和时间,等等等…下面就让我们来测试一下他们的一些主要的方法吧!测试(用法见注释) public static void main(String[] args) { System.out.println("====LocalDate测试====");原创 2021-03-09 23:26:20 · 192 阅读 · 0 评论 -
汉诺塔问题--Java实现
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。后来,这个传说就演变为汉诺塔游戏,玩法如下:有三根杆子A,B,C。A杆上有若干碟子每次移动一块碟子,小的只能叠在大的上面把所有碟子从A杆全部移到C杆上我这边就用塔1,塔2,塔3来表示A,B,C了,这样的话更好理解原创 2021-03-03 18:23:56 · 464 阅读 · 1 评论 -
利用前缀和来求一个区间内的和
今天是三月二号,这个月力扣每日一题打卡第2天。两天来连续遇到前缀和解决一个区间内的和的问题,觉得还是比较高频的所以来记录一下这两道题目的思路和解法。来一段狂神经典语录激励一下自己:只要学不死,就往死里学!!力扣第303题: 区域和检索-数组不可变给定一个整数数组 nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。实现 NumArray 类:NumArray(int[] nums) 使用数组 nums 初始化对象int sumRange(int原创 2021-03-02 22:30:20 · 486 阅读 · 0 评论 -
分享关于位运算的一些题目
今天在刷力扣的时候一不小心就刷入了位运算的专场,好家伙,那可真是血雨腥风啊,不过总的来说,位运算确实是解决问题的一种不错的方法,简洁,方便,快捷,还好理解,一开始确实是不好理解,但是只要你绕开了那个弯就很好理解了,思路都是比较清晰的,下面我来讲几道我遇到的位运算的题目。第一道 位1的个数编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。输入:00000000000000000000000000001011输出:3解释:输原创 2021-03-01 22:49:27 · 199 阅读 · 0 评论 -
龟兔赛跑算法(快慢指针)解决链表问题案例汇总
这几日刷到了很多链表的算法题,发现链表的算法题真的很抽象,基本都不太会做。。。无奈只能看评论和大佬的题解,总算是有了点启发和思路,趁着记忆还未褪却赶紧来记录下来。我发现这些链表的题大佬们都很喜欢用快慢指针来做,所以我特地做了一个汇总,不得不说,快慢指针真的很好用!!判断链表是否有环?本题的思路也是用快慢指针来做的,空间复杂度可以是O(1),常量的空间复杂度真的很高效,如何用快慢指针来做呢?无非就是判断快慢两个指针最后是否会相遇,如果有环的话,快慢两个指针最后肯定会相遇,那么我们只需要在循环里面加一个原创 2021-02-22 12:35:45 · 423 阅读 · 0 评论 -
力扣算法题--删除链表中的节点
今天刷力扣的时候刷到一道解题思路非常妙的题目,大体题意就是删除一个链表中的节点,如题:题目注:力扣的简单算法题并不代表很简单,,吐血。。。解题思路要想理解这道题目其实很简单只要跳跃出平常的思路就可以了,**理解一句话“如果你想让自己在这个世界上消失,但不死,那么就把你自己变成另外一个人,再把那个人杀死!”**怎么样,是不是思极细恐!!!只要理解了这一句话我们就可以找到对应的思路了,**首先我们将本节点的值变成下一个节点的值,然后将本节点的下一个节点变成下一个节点的下一个节点。**这样一来就实现了删原创 2021-02-21 11:54:31 · 187 阅读 · 0 评论