![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
1while(true){learn}
日常笔记
展开
-
DFS,BFS应用
DFS遍历public static void dfs(TreeNode root) { if (root == null) { return; } dfs(root.left); dfs(root.right);BFS遍历public static void bfs(TreeNode root) { Queue<TreeNode> queue = new ArrayDeque<>(); queue.ad原创 2021-12-07 15:22:07 · 547 阅读 · 0 评论 -
广度优先遍历(BFS)
广度优先遍历基本思想图的广度优先搜索(Broad First Search) 。类似于一个分层搜索的过程,广度优先遍历需要使用一个队列以保持访问过的结点的顺序,以便按这个顺序来访问这些结点的邻接结点广度优先遍历算法步骤1)访问初始结点v并标记结点v为已访问。2)结点v入队列3)当队列非空时,继续执行,否则算法结束。4)出队列,取得队头结点u。5)查找结点u的第一个邻接结点w。6)若结点u的邻接结点w不存在,则转到步骤3;否则循环执行以下三个步骤:6.1 若结点w尚未被原创 2021-11-30 17:51:08 · 545 阅读 · 0 评论 -
深度优先遍历(DFS)
图的深度优先搜索(Depth First Search) 。1)深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点, 可以这样理解:每次都在访问完当前结点后首先访问当前结点的第一个邻接结点。2)我们可以看到,这样的访问策略是优先往纵向挖掘深入,而不是对一个结点的所有邻接结点进行横向访问。显然,深度优先搜索是一个递归的过程深度优先遍历算法步骤1)访问初始结点v...原创 2021-11-30 16:28:34 · 3174 阅读 · 0 评论 -
堆排序
1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。2)堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。3)每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆小顶堆:arr[i] <= arr[2*i+1] && arr[i] <= arr[2*i+2] // i...原创 2021-11-22 21:06:54 · 87 阅读 · 0 评论 -
插值查找
插值查找原理介绍:1)插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找。2)将折半查找中的求mid 索引的公式 , low 表示左边索引left, high表示右边索引right.key 就是前面我们讲的 findVal3)intmid = low + (high - low) * (key - arr[low]) / (arr[high] - arr[low]) ;/*插值索引*/对应前面的代码公式:int mid = left + (right...原创 2021-11-13 18:33:45 · 577 阅读 · 0 评论 -
基数排序.
基数排序(Radix Sort)是桶排序的扩展基本思想:1)将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。将数组 {53, 3, 542, 748, 14, 214} 使用基数排序, 进行升序排序。第1轮排序后:542 53 3 14 214 748第2轮排序后: 3 14 214 542 748 53第3轮排序后:3 14 53 214...原创 2021-11-11 19:18:41 · 198 阅读 · 0 评论 -
归并排序.
该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。归并排序采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程。它的运算次数是线性增长的,n-1次package com.wang;import java.util.Arrays;public class Test { public stati.原创 2021-11-11 16:33:27 · 513 阅读 · 0 评论 -
常用排序算法对比
相关术语解释:1)稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;2)不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;3)内排序:所有排序操作都在内存中完成;4)外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;5)时间复杂度:一个算法执行所耗费的时间。6)空间复杂度:运行完一个程序所需内存的大小。7)n: 数据规模8)k: “桶”的个数9)In-place: 不占用额外内存10...原创 2021-11-11 16:30:07 · 357 阅读 · 0 评论 -
快速 排序
快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列package com.wang;import java.util.Arrays;public class Test { public static void main(String[] args){ .原创 2021-11-10 21:01:46 · 491 阅读 · 0 评论 -
希尔 排序
交换法import java.util.Arrays;public class Test { public static void main(String[] args){ int[] arr= {8,9,1,7,2,3,5,4,6,0}; int count=0; for(int gap=arr.length/2; gap >= 0; gap/=2) { for(int i=gap; i < arr.lengt原创 2021-11-10 20:07:42 · 372 阅读 · 0 评论 -
八皇后(一维数组实现)
package com.wang;public class Test { int max=8; int[] arr=new int[max]; int count=0; public static void main(String[] args) { Test test = new Test(); test.cheek(0); System.out.println("有"+test.count+"种解法"); } private void cheek(int n) .原创 2021-11-09 17:44:27 · 246 阅读 · 0 评论 -
求出所有的的四位回文数
public class Main { public static void main(String[] args) { String a; for (int i = 1000; i <=9999; i++) { //返回返回 int 参数的字符串表示形式存入a a=String.valueOf(i); StringBuilder sb = new StringBuilder(a); //利用反转 sb.reverse(); //转换回字符串 .原创 2021-11-02 18:12:40 · 468 阅读 · 0 评论 -
创建一个NxN的布尔数组,当i和j互质时,a[i][j]为true
package day21;import java.util.Scanner;public class Show { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n1 = scanner.nextInt(); boolean[][] a = new boolean[n1][n1]; Oj oj = .原创 2021-09-23 20:39:24 · 125 阅读 · 0 评论 -
吸血鬼数字(java)
String[] ar1,ar2;int sum=0,iv,count=0;//双重循环穷举for(int i=10;i<100;i++){ for(int j=i+1;j<100;j++){//j=i+1避免重复 iv=i*j; if(iv%100==0||(iv-i-j)%9!=0){//吸血鬼数字不能被100整除,但减去i和j能被9整除 continue;//如果它能被100整除或者不能被9整除,那么他就不是吸血鬼数字.原创 2021-09-22 09:50:20 · 162 阅读 · 0 评论 -
幻方阵(java)
package day21;import java.util.Scanner;//调用Scanner一个简单的文本扫描器import static net.mindview.util.Print.*;import java.util.Random;public class Show { public static void main(String[] args){ /*奇数幻方阵 0 1 2 1 1 2 2 .原创 2021-09-22 09:51:03 · 439 阅读 · 0 评论 -
对原来的数组插入数字并排序输出(尾插法)
package day21;import java.util.Scanner;//调用Scanner一个简单的文本扫描器import static net.mindview.util.Print.*;import java.util.Random;public class Show { public static void main(String[] args){ Scanner scanner=new Scanner(System.in); int.原创 2021-09-22 09:51:11 · 175 阅读 · 0 评论 -
二分查找(java)
package day21;import java.util.Scanner;//调用Scanner一个简单的文本扫描器import static net.mindview.util.Print.*;import java.util.Random;public class Show { public static void main(String[] args){ int [] a={1,2,3,4,5,6,7,8,9}; for(int i:a).原创 2021-09-22 09:51:31 · 143 阅读 · 0 评论 -
杨辉三角(java)
package Four;import java.util.Scanner;public class YangHui { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入杨辉三角的行数"); int n = input.nextInt();//定义一个二维数组 int[][.原创 2021-09-21 10:00:50 · 67 阅读 · 0 评论 -
斐波那契数列(java)
package day21;class Fei{//斐波那契求和 int sum=0; public int Bo(int a){ if(a==1||a==2) return 1; else return Bo(a-1)+Bo(a-2); }}public class Show { public static void main(String[] args){ Fei.原创 2021-09-21 10:00:29 · 63 阅读 · 0 评论 -
猴子吃桃(java)
package day21;class Houzi{ public int tao(int a) { if (a == 10) return 1; else return (tao(a+1)+1)*2; }}public class Show { public static void main(String[] args){ Houzi houzi=new Houzi();.原创 2021-09-21 10:00:22 · 62 阅读 · 0 评论 -
老鼠走迷宫(java)
package day21;//1为障碍物,0为路class migong{ public boolean zhaolu(int [][]a1,int i,int j){ if(a1[6][5]==2)//如果到达终点就结束 return true; else { if(a1[i][j]==0){//如果当前位置可走,就置为2 a1[i][j]=2; .原创 2021-09-21 10:00:15 · 304 阅读 · 1 评论 -
汉诺塔(java)
package day21;class hannuota{//无论有多少盘子,都把它看成2个,底下最大的一个和上面的许多个 public void move(int a1,char a,char b,char c){ if(a1==1)//基本思路:把上面的许多个从a移动到b借助c,然后把最大一个移动到c,最后把b上的许多个移动到c借助a System.out.println(a+"->"+c); else{ .原创 2021-09-21 10:00:07 · 64 阅读 · 0 评论 -
八皇后(二维数组实现)
package Four;public class Bahuanghou { //私人的,静态的,不可变的 //private static final说明该变量只能在当前的类中被使用,并且是带有static修饰符的静态函数中被调用,加了final则该属性的值将不能被改变 private static int H = 10;//定义皇后的个数 private static final int[][] Checkerboard = new int[H][H];//创建一.原创 2021-09-20 18:32:25 · 371 阅读 · 0 评论 -
冒泡,选择,插入排序
package day21;public class Show { public static void main(String[] args){ int[] a=new int []{1,4,7,8,5,2}; int b=0; for(int i=0;i<a.length-1;i++){ for(int j=0;j<a.length-1-i;j++){ if(a[j]>.原创 2021-09-20 18:18:16 · 74 阅读 · 0 评论