m明月Java3
现就职于字节,立志成为全栈选手,你早上从床上坐起,是因为你期待这一天。
展开
-
最全的2021蓝桥杯算法课《算法很美》的学习笔记总目录+真题详解
本系列是对最全的2021蓝桥杯算法课《算法很美》的笔记总结和归纳学习视频:算法很美第一章1.1课程介绍原创 2022-01-12 20:20:37 · 13785 阅读 · 5 评论 -
3.1分治法介绍及关键点解析
蓝桥云课《算法很美》第三章 3.1分治法介绍及关键点解析原创 2022-01-25 23:09:17 · 423 阅读 · 1 评论 -
蓝桥杯想拿奖?试试设计一个高效的求a的n次幂的算法
设计一个高效的求a的n次幂的算法思路题解思路首先呢,求a的n次幂实际上,java是有Math.pow()方法的,那如果我们自己手写来实现它,我们该如何写呢?思路1一个for循环,直接遍历,时间复杂度为O(n).思路2每次a=a*a,直到大于a的n次幂,剩余的递归,时间复杂度为O(log2 n)题解public class Main { public static void main(String[] args) { // TODO Auto-generated meth原创 2022-01-24 20:53:24 · 641 阅读 · 0 评论 -
2.19题目详解:找出最长连续递增子序列
找出最长连续递增子序列题目思路题目{1,9,2,5,7,3,4,6,8,0}中最长的递增子序列为{3,4,6,8}。思路左右指针,都在第0个元素,右指针往右走,走到2时停止,更新begin(子序列最开始的下标)和length。左右指针都在2,右指针再往右走,以此类推。...原创 2022-01-24 20:07:52 · 413 阅读 · 0 评论 -
蓝桥杯想拿奖?练习:在有空字符串中的有序字符串数组中查找
在有空字符串中的有序字符串数组中查找题目思路代码题目有个排序后的字符串数组,其中散布着一些空字符串,编写一个方法,找出给定字符串(肯定不是空字符串)的索引。思路a “” ac “” ad b “” ba在上面中,“”就是空字符串我们找b,实际上还是二分法的思想,先是找到最中间的“”,因为是空字符串,我们的索引加1(用while),就是ad,之后我们要比较字符串,用到compareto()方法compareTo()方法1.返回参与比较的前后两个字符串的AS原创 2022-01-24 19:44:23 · 2124 阅读 · 0 评论 -
蓝桥杯练习:旋转数组的最小数字(改造二分法)
旋转数组的最小数字(改造二分法)题目思路代码题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.思路第一个思路:最简单的是直接顺序查找,那么复杂度是O(n);第二个思路:看到题目“递增排序的数组”,那么我们利用这一特性,类似二分法,不断的减少,复杂度是O(log2 n)。分析旋转数组,发现,前面的元素旋转到后面,则最小值总是在最大值的原创 2022-01-24 16:16:27 · 368 阅读 · 0 评论 -
蓝桥杯练习 小明上楼梯(递归设计)
小白上楼梯(递归设计)题目思路源代码题目小白正在上楼梯,楼梯有n阶台阶,小白一次可以上1阶,2阶或者3阶,实现一个方法,计算小白有多少种走完楼梯的方法。思路可以发现,这道题就跟求斐波那契数列数列的第几个数一样,不过这道题是三路,f(n-3)+f(n-2)+f(n-1),而斐波那契数列是两路。源代码import java.util.Scanner;public class Main { public static void main(String[] args) { // TODO原创 2022-01-23 16:04:24 · 2811 阅读 · 3 评论 -
还不懂基础排序算法的性能对比?这篇文章带你涨姿势
我们在这篇文章的主要任务如下:冒泡排序发现时间复杂度为O(n2)插入排序:考虑最坏的情况,就是数组最开始是逆序上图中实际上是n*(n-1)/2,不过时间复杂度仍然是O(n2)选择排序:选择排序是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,继续放在起始位置知道未排序元素个数为0。时间复杂度为O(n2)在jdk中,我们可以直接调用Arrays.sort()来原创 2022-01-21 18:35:36 · 475 阅读 · 0 评论 -
时间复杂度的天差地别?这个实验带你直观感受
我们都说时间复杂度很重要,却无法直接感受到时间复杂度的重要性。那么这次实验就带你直观感受到不同算法之间时间复杂度的巨大差距实验原理:在这个实验中,我们需要用到System.currentTimeMillis()。System.currentTimeMillis()的作用是可以获得当前时间,那么在执行算法之前获取当前时间,在执行算法之后我们再获得当前时间,前后两次当前时间相减,就可以得到执行算法的时间。在这次实验中,我们比较两种算法:二分查找和顺序查找的时间复杂度。这两种查找都是在一个数组中找到原创 2022-01-21 17:48:55 · 675 阅读 · 0 评论 -
一眼望穿算法复杂度?“大O表示法”带你涨姿势
无论我们看别人的代码,还是自己写代码,都需要评估算法复杂度,以此达到对算法更好的理解那么如何评估一个算法的性能?我们用大O表示法来评估一个算法的复杂度。算法复杂度分为时间复杂度和空间复杂度。我们通常会牺牲空间复杂度来降低时间复杂度。所以这里我们只讨论时间复杂度。什么是大O表示法?时间复杂度是对一个算法运行时间长短量度,用大O表示,记作T(n)=O(f(n)).例如一个程序执行f(n)=n次,那么用大O表示,即为O(n)。一个程序执行f(n)=2n次,那么用大O表示,仍为O(n),忽略掉常数原创 2022-01-20 21:40:38 · 511 阅读 · 0 评论 -
手把手带你解析蓝桥云课《算法很美》--2.8思维更重要:希尔排序
冒泡,选择,插入,希尔排序等在工程领域用得不是特别多,但是在学习代码的基础,它的投入和产出是很高的public class 希尔排序 { public static void main(String[] args) { // TODO Auto-generated method stub int [] arr= {8,7,6,5,4,3,2,2}; shellSort(arr); for(int i=0;i<arr.length;i++) { System.ou.原创 2022-01-20 17:06:41 · 602 阅读 · 0 评论 -
手把手带你解析蓝桥云课《算法很美》--2.7二分查找的递归解法
public class 二分查找 { public static void main(String[] args) { // TODO Auto-generated method stub int [] arr= {24,56,68,70,77,94,98}; int n=select(arr,94,0,arr.length-1); System.out.println(n); } static int select(int []arr,int target,int ...原创 2022-01-19 23:57:49 · 678 阅读 · 0 评论 -
手把手带你解析蓝桥云课《算法很美》--2.6递归经典问题:汉诺塔游戏
在1下面切一刀,不可行在N上面切一刀,可行:代码:public class 汉诺塔游戏 { public static void main(String[] args) { // TODO Auto-generated method stub printHanoTower(5,"A","B","C"); } static void printHanoTower(int N,String from,String to,String help) { if(N==1)..原创 2022-01-19 22:51:45 · 2479 阅读 · 0 评论 -
手把手带你解析蓝桥云课《算法很美》--2.5别有洞天:递归形式进行插入排序
解析对0到倒数第一个数进行排序等价于:对数组的0到倒数第二个元素,这部分排序,然后把最后一个元素插入到这个有序的部分中import java.util.Scanner;public class 递归形式进行插入排序 { public static void main(String[] args) { // TODO Auto-generated method stub int []a=new int [5];//长度为5的数组 Scanner in=new Scanner(Syst原创 2022-01-16 18:00:06 · 456 阅读 · 0 评论 -
手把手带你解析蓝桥云课《算法很美》--巧用递推公式解最大公因数
实际上运用的就是辗转相除法。import java.util.Scanner;public class 递归公式解最大公约式 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in =new Scanner(System.in); int m=in.nextInt(); int n=in.nextInt(); System.out.println(gcd(原创 2022-01-16 15:09:21 · 1735 阅读 · 4 评论 -
手把手带你解析蓝桥云课《算法很美》--2.3多分支递归:斐波那契数列
前面的例题都是分解为:直接量+小规模问题接下来我们学习分解为:多个小规模问题之前的都是单分支路线:这道题的是多分支路线:import java.util.Scanner;public class 斐波那契数列 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); int n= in.nextInt();原创 2022-01-16 14:22:51 · 415 阅读 · 0 评论 -
手把手带你解析蓝桥云课《算法很美》--2.2切蛋糕思维:递归知识练习题
数组求和public class 数组求和 { public static void main(String[] args) { // TODO Auto-generated method stub int res=f3(new int[] {1,2,3,4,5},0); System.out.println(res); } /* * 对arr的所有元素求和 * 找重复 * 找变化:变化的量应该作为参数,这题很好的体现出来了 * 找边界:出口 */ stat原创 2022-01-14 22:39:42 · 393 阅读 · 1 评论 -
手把手带你解析蓝桥云课《算法很美》--2.1什么是递归
目录第2章的目标递归的学习方法递归求n的阶乘打印i-j第2章的目标递归的学习方法递归求n的阶乘import java.util.Scanner;public class 求n的阶乘 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in =new Scanner(System.in); int n=in.nextInt(); System.out.pr原创 2022-01-14 20:22:38 · 464 阅读 · 0 评论 -
蓝桥云课《算法很美》1.8 1.9出现k次与出现1次
目录题目思路代码题目数组中只有一个数出现了1次,其他的数都出现了k次,请输出只出现了1次的数。思路解析:把十进制的数转化为k进制,k个k进制的数进行不进位相加,结果是0;那么剩下的就是那个出现一次的数。eg:有10个11进行相加,原本1*10=10,原本应该进位的1舍去,就只能剩下0了。代码public class _07_出现k次 { public static void main(String[] args) { // TODO Auto-generated method st原创 2022-01-14 14:52:22 · 299 阅读 · 0 评论 -
1.7乘二挪整:二进制表示浮点实数
其实也用到了计算机组成原理的知识:小数从十进制转化为二进制public class _06_二进制小数 { public static void main(String[] args) { // TODO Auto-generated method stub double num=0.625; StringBuilder sb=new StringBuilder("0."); while(num>0) { //乘2:挪整 double r=num*2; //.原创 2022-01-13 23:48:19 · 251 阅读 · 0 评论 -
1.6位运算思维:将整数的奇偶位互换
这里的整数的奇偶位互换,实际上是二进制上奇偶位的互换。而不是十进制上的奇偶位互换,15,换成51。import java.util.Scanner;public class _05_交换奇偶位 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in =new Scanner(System.in); int b=in.nextInt(); System.out.原创 2022-01-13 23:12:28 · 328 阅读 · 0 评论 -
1.5一条语句判断整数是不是2的整数次方
题目:用一条语句判断一个整数是不是2的整数次方。解析:2的整数次方变成2进制,只能由一个1,其余位都是0那么一次((N-1)&N)==0,既是2的整数次方import java.util.Scanner;public class 一条语句判断2的整数次方 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc =new Scanner(System.in)原创 2022-01-13 21:07:21 · 215 阅读 · 0 评论 -
1.4一题三解:二进制中1的个数
题解1:int的数值是三十二位,则用x&1来参与计数,每次循环1向左移一位&的功能:按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0import java.util.Scanner;public class 一题三解二进制中1的个数 {//这里的名字必须跟你自己定义的名字一样 public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc .原创 2022-01-13 20:22:36 · 319 阅读 · 0 评论 -
1.3找出落单的数,这样变成就对了
题目思路1:连续异或,消去相同的数字,剩下的数字就是落单的数字A^A=0B^0=B思路2:桶排序,arr[i]==1,中的 i 就是落单的数字原创 2022-01-13 17:04:58 · 328 阅读 · 0 评论 -
1.2题解:如何找数组中唯一成对的那个树
目录位运算与进制基础题解位运算与进制基础x&1:变量x的最后一位(二进制的个位),其它二进制位都是0的一个整数。1<<35与1<<3是相同的,是因为,35太大了,参与运算实际上是35%32=3,所以相同,结果都是1000(二进制)题解核心:A^A=0 ,B^0=Bimport java.util.Random;public class 唯一成对的数 { public static void main(String[] args) { //原创 2022-01-13 16:54:32 · 724 阅读 · 0 评论 -
1.1课程介绍
目录课程信息课程结构与模式课程特点谈谈学习课程信息课程结构与模式课程特点谈谈学习原创 2022-01-12 20:19:01 · 566 阅读 · 0 评论