自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (1)
  • 收藏
  • 关注

原创 剑指offer 面试题27: 二叉树的镜像

面试题27: 二叉树的镜像操作给定的二叉树,将其变换为源二叉树的镜像。思路:先前序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。当交换完所有非叶节点的左、右子节点之后,就得到了树的镜像。/*1,非递归*/import java.util.*;public class Solution { public void Mirror(TreeNode root) { if(root == null) return; Stack<

2020-07-03 20:11:20 236 1

原创 剑指offer 25:合并两个排序的链表

面试题25:合并两个排序的链表题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:双指针,分别指向两个链表的头节点,如果链表2的头节点的值小于链表1的头节点的值,那么链表2的头节点的值就是合并链表的头节点,把这个节点和前面合并链表时得到的链表的尾节点连接起来。指针后移,继续之前的步骤。/*public class ListNode { int val; ListNode next = null; ListNode(in

2020-06-29 22:47:54 163

原创 剑指offer面试题24:反转链表

面试题24:反转链表题目描述定义一个函数,输入一个链表的头节点,反转链表后,输出新链表的表头。如上图,假设经过若干操作,我们已经把节点h之前的指针调整完,这些节点的next都指向前一个节点。接下来把i的next指向h。但是这时无法在链表中遍历到节点j。为了避免在节点i处断开,需要在调整节点i的next之前,把节点j保存下来。也就是说,我们在调整节点i的next指针时,除了知道节点i本身,还需要知道前一个指针,因此我们需要把节点i的next指向节点h。同时,我们还需要事先保存i的下一个节点j,以防止

2020-06-29 17:32:53 257

原创 剑指offer 23,链表中环的入口节点

双指针法1,确定一个链表中包含环定义两个指针,同时从链表的头节点出发,一个指针每次走一步,另一个指针每次走两步;如果快指针追上了慢指针,那么链表就包含环。2,得到环中节点数目两个指针相遇的节点一定在环中,从这个节点出发,一边继续向前移动一边计数,再次回到这个节点时,就可以得到环中结点的数目。3,找到环的入口先定义两个指针P1,P2指向头节点。如果链表环中有n个节点,则指针p1先向前移动n步,然后两个指针以相同的速度向前移动。当第二个指针指向环的入口节点时,第一个指针已经绕着环走了一圈回到了入

2020-06-29 11:46:14 6674

原创 剑指offer 21. 调整数组顺序使奇数位于偶数前面

剑指offer 21. 调整数组顺序使奇数位于偶数前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。1,如果不考虑时间复杂度,最简单的思路是从头扫描这个数组,每碰到一个偶数,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。挪完之后在数组的末尾有一个空位,这时把该偶数放入这个空位。由于每碰到一个偶数就需要移动O(n)个数字,因此总的时间复杂度是O(n^2).2,双指针:第一个指针初始化时指向数组的第一个数字,它只向后移动;

2020-06-28 23:00:00 184

原创 剑指Offer 22.链表中倒数第k个节点

剑指Offer 22.链表中倒数第k个节点输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。思路:双指针第一个指针从链表的头指针开始遍历向前走k-1布,第二个指针保持不动;第一个指针走到第k步,第二个指针从头节点开始遍历,由于两个指针的距离保持在k-1,第一个指针到达链表尾节点时,第二个指针正好走到倒数第k个节点。/

2020-06-28 22:46:27 141

原创 剑指offer 11,旋转数组的最小数字

旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。1.暴力法直接遍历一遍数组,即可找到最小值。时间复杂度O(n),但不是理想解法。2,二分法当进行一次比较时,一定能够确定答案在mid的某一侧。一次比较为 arr[mid]跟谁比的问题。一般的比较原则有:

2020-06-21 21:27:24 204

原创 leetcode 53,0~n-1缺失的数字

面试题53Ⅱ,0~n-1缺失的数字一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。1,思路排序数组中的搜索问题,首先想到 二分法 解决。根据题意,数组可以按照以下规则划分为两部分。左子数组: nums[i]=i ;右子数组: nums[i] ≠i ;缺失的数字等于 “右子数组的首位元素” 对应的索引;因此考虑使用二分法查找 “右子数组的首位元素” 。2,算法初始化: 左边

2020-06-04 16:50:44 220

原创 leetcode 1051数组,高度检查器

学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。请你返回能让所有学生以 非递减 高度排列的最小必要移动人数。注意,当一组学生被选中时,他们之间可以以任何可能的方式重新排序,而未被选中的学生应该保持不动。1,首先我们进行一轮桶排序,即查看一个桶里装了几个元素,例如 1 4 3 1 5,a[1]=2:数值是1的桶装了两个1;2,然后从小到大的位置开始检查对应位置是否对应正确的值。3,不对应的就sum+1;class Solution { public int height

2020-06-04 16:10:18 272

原创 leetcode 3,无重复字符的最长子串

3,无重复字符的最长子串3.1思路假设我们选择字符串中的第 k个字符作为起始位置,并且得到了不包含重复字符的最长子串的结束位置为r k。那么当我们选择第k+1个字符作为起始位置时,首先从k+1到 rk的字符显然是不重复的,并且由于少了原本的第 k个字符,我们可以尝试继续增大r k,直到右侧出现了重复字符为止。3.2滑动窗口①我们使用两个指针表示字符串中的某个子串(的左右边界)。其中左指针代表着上文中「枚举子串的起始位置」,而右指针即为上文中的 rk ;②在每一步的操作中,我们会将左指针向右移动一

2020-05-30 10:33:47 150

原创 leetcode,2,两数相加

2,两数相加2.1思路①标签:链表②将两个链表看成是相同长度的进行遍历,如果一个链表较短则在前面补0,比如987+23=987+023=1010③每一位计算的同时需要考虑上一位的进位问题,而当前位计算结束后同样需要更新进位值④如果两个链表全部遍历完毕后,进位值为1,则在新链表最前方添加节点1⑤小技巧:对于链表问题,返回结果为头结点时,通常需要先初始化一个预先指针 pre,该指针的下一个节点指向真正的头结点head。使用预先指针的目的在于链表初始化时无可用节点值,而且链表构造过程需要指针移动,进

2020-05-29 21:59:37 258

原创 leetcode 1,两数之和

1,两数之和1.1暴力法class Solution { public int[] twoSum(int[] nums, int target) { for(int i = 0; i <= nums.length-1; i++){ for(int j=i + 1; j <= nums.length-1; j++){ if(nums[j] == target - nums[i]){

2020-05-29 10:55:04 107

原创 leetcode 220,存在重复元素Ⅲ

1,思路如果窗口中维护的元素是有序的,只需要用二分搜索检查条件二是否是满足的就可以了。利用自平衡二叉搜索树,可以在对数时间内通过 插入 和 删除 来对滑动窗口内元素排序。2,算法如果窗口内的元素是有序的,那么用两次二分搜索就可以找到 x+t 和 x-t这两个边界值了。然而,窗口中的元素是无序的。虽然在有序数组中 搜索 只需要花费对数时间,但是为了让数组保持有序,我们不得不做插入和删除的操作,而这些操作是非常不高效的。如果你有一个k大小的有序数组,当你插入一个新元素x的时候。虽然可以在O(log .

2020-05-28 09:32:00 154

原创 java--马踏棋盘

1.马踏棋盘算法介绍8X8棋盘,马走日字,要求每个方格只进入一次,走遍棋盘上全部64个方格。public class HorseChessBoard { private static int X;//棋盘的列数 private static int Y;//棋盘的行数 //创建一个数组,标记棋盘的各个位置是否被访问过 private static boolea...

2019-12-24 22:59:29 302

原创 java--克鲁斯卡尔算法、弗洛伊德算法

迪杰斯特拉算法1,应用场景-最短路径问题2.算法过程1,设置出发顶点为v,顶点集合为V,v到V的个顶点的距离集合Dis2,从Dis中选择值最小的di并移出Dis集合,同时移出V集合中对应的顶点vi,此时的v到vi即为最短路径3,更新Dis,更新规则为:比较v到V集合中顶点的距离值,与v通过vi到V集合中顶点的距离值,保留值较小的一个4,重复执行,直到最短路径顶点为目标顶点即可结束p...

2019-12-24 22:50:44 346

原创 java--克鲁斯卡尔算法

1.应用场景-公交站问题2.算法介绍克鲁斯卡尔算法,是用来求加权连通图的最小生成树的算法;基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路;具体做法:首先构成一个只含n个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止public class KruskalCace { private in...

2019-12-24 22:20:52 619

原创 java--贪婪算法、普利姆算法

贪心算法贪心算法是指在对问题进行求解时,在每一步选择中都采取最好或者最优的选择,从而希望能够导致结果是最好或者最优的算法。1.应用场景–集合覆盖问题假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。如何选择最少的广播台,让所有的地区都可以接收到信号。2.思路遍历所有的广播电台,找到一个覆盖了最多未覆盖的地区的电台,将这个电台加入到一个集合中,并想办法把该电台覆盖的地区在下次比...

2019-12-24 20:40:11 175

原创 java--KMP算法

1.字符串匹配问题1.有一个字符串str1 = “硅硅古 尚硅谷你尚硅谷 尚硅谷你尚硅谷你尚硅你好”,和一个字符串str2 = “尚硅谷你尚硅你”2,现在要判断str1是否包含str2,如果存在,就返回第一次出现的位置,如果没有,返回-12.暴力匹配算法public class ViolenceMatch { public static void main(String[] ar...

2019-12-24 15:57:04 322

原创 Java--动态规划算法

1.将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。子问题往往不是相互独立,即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解,2.背包问题:有一个背包,容量为4磅,有如下物品,要求:(1)要求达到的目标为装入的背包的总价值最大,并且重量不超出(2)要求装入的物品不能重复(3)背包问题主要是指一个给定容量的背包、若干具有一定价值和重量...

2019-12-24 15:35:51 301

原创 java--二分查找算法、分治算法(汉诺塔)

1.二分查找算法(非递归)1.二分查找法只适用于从有序的数列中进行查找(比如数字和字母),将数列排序后再进行查找2,二分查找法的运行时间为对数时间O(log2 n),即找到查找位置最多只需要log2 n步,3,数组{1,3,8,10,11,67,100},编程实现二分查找,要求使用非递归的方式完成public class BinarySearchNoRecur { public s...

2019-12-24 11:55:04 345

原创 Java--约瑟夫问题、约瑟夫(环)问题,单向环形链表应用

1.Josephu问题Josephu问题为:设编号为1,2,…n的n个人围坐一圈,约定编号为k的人从1 开始报数,数到m的那个人出列,它的下一位又从1开始,数到m的那个人又出列,它的下一位又从1开始报数,数到m的那个人出列,以此类推,直到所有人出列为止,由此产生一个出列编号的序列。分析:用一个不带头节点的循环链表来处理Josephu问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始...

2019-12-24 11:40:04 264

原创 java--图(深度优先遍历、广度优先遍历)

这里写自定义目录标题1.图2.图的深度优先遍历3.图的广度优先遍历1.图思路分析:(1)存储顶点String 使用ArrayList(2)保存矩阵 Int[][] edges //插入节点 public void insertVertex(String vertex){ vertexList.add(vertex); } //添加边 /**...

2019-12-24 11:29:17 245

原创 java--平衡二叉树(AVL树)

1.二叉排序树可以解决的问题左边BST存在的问题1)左子树全部为空,从形式上看,更像一个单链表。2)插入速度没有影响。3)查询速度明显降低(因为需要依次比较),不能发挥BST的优势,因为每次还需要比较左子树,其查询速度比单链表还慢。2.平衡二叉树(AVL树)1)平衡二叉树也叫平衡二叉搜索树,又称为AVL树,可以保证查询效率较高。2)特点:它是一颗空树或它的左右两个子树的高度差的绝对值...

2019-12-02 17:34:21 271

原创 java--二叉排序树

1,二叉排序树:BST,对于二叉排序树的任何一个非叶子结点,要求左子结点的值比当前节点的值小,右子结点的值比当前节点的值大。如果有相同的值,可以将该节点放在左子节点或右子节点。2.二叉排序树创建和遍历3.二叉排序树的删除1)删除叶子节点(2,5,9,12)2)删除只有一棵树的节点(1)3)删除有两颗子树的节点(7,3,10)public class BinarySort...

2019-11-30 17:39:59 204

原创 Java--赫夫曼编码

1.原理2.变长编码3.赫夫曼编码1.数据压缩,创建赫夫曼树2,生成赫夫曼编码和赫夫曼编码后的数据3,数据解压,使用赫夫曼编码解码4,文件压缩‘思路:读取文件->得到赫夫曼编码表-》完成压缩5,文件解压(文件恢复)思路:读取压缩文件(数据和赫夫曼编码表)-》完成解压(文件恢复)import java.io.*;import java.util.*;pub...

2019-11-29 22:11:47 593

原创 java--赫夫曼树

1.基本介绍1)给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也成为哈夫曼树。2)赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近2.赫夫曼树创建思路一个数列{13, 7, 8, 3, 23, 6, 1},要求转写成一颗赫夫曼树。步骤:1)从小到大进行排序,将每一个数据都是一个节点,每个节点可以看成一颗最简单的...

2019-11-26 11:34:32 136

原创 Java--堆排序

1.堆排序1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏、最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。2)堆是具有一下性质的完全二叉树:每个结点的值都大于或等于其左右子节点的值,称为大顶锥,没有要求左子节点和右子节点的值的大小关系。3)每个结点的值都小于或等于其左右子节点的值4)一般升序采用大顶堆,降序采用小顶堆2.基本思想1)将待...

2019-11-25 11:33:52 184

原创 java--线索化二叉树

1)n个结点的二叉链表中含有n+1[2n-(n-1)=n+1]个空指针域。利用二叉链表中的空指针域,存放指向该节点在某种遍历次序下的前驱和后继结点的指针;2)加入了线索的二叉链表称为线索链表,相应的二叉树成为线索二叉树。3)一个节点的前一个结点称为前驱结点;后一个结点称为后继结点。4)遍历线索化二叉树分析:因为线索化后,各个节点指向有变化,因此原来的遍历方式不能使用,这时需要使用新的方...

2019-11-24 21:57:22 353

原创 java--二叉树结构

1.二叉树1)数组存储方式优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)整体移动,效率较低。2)链式存储方式优点:在一定程度上对数组存储方式有优化(比如:插入一个数值结点,只需要将插入节点链接到链表中即可,删除效率也很好)缺点:在进行检索时,效率仍然很低,比如(检索某个值,需要从头节点开始遍历)3)...

2019-11-24 21:41:11 215

原创 java-哈希表

1.题目要求有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址…),当输入该员工的id时,要求查找到该员工的所有信息。要求:不使用数据库,尽量节省内存,速度越快越好2.哈希表哈希表(也叫散列表),是根据关键码值而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。3,思...

2019-11-23 22:46:21 215

原创 Java--查找算法

1.二分查找2.插值查找算法1,和二分查找不同的是每次从自适应mid处开始查找2,对于数据量较大,关键字分布比较均匀的查找表来说,采用插值查找,速度较快。3,package com.atguigu.search;import java.util.Arrays;public class InsertValueSearch { public static void ma...

2019-11-12 21:07:38 104

原创 Java--归并排序和基数排序

1.归并排序归并排序分为两个阶段。第一阶段是把要排序的数组分成两个子序列进行排序。然后把两个已经有序的子序列合并成一个有序序列。import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Date;public class MergetSort { public static void...

2019-11-06 15:33:48 284

原创 排序算法(分类,时间复杂度)(快速排序,插入排序,希尔排序,选择排序,冒泡排序)

1.排序算法1.排序的分类分为内部排序和外部排序,其中内部排序分为插入排序、选择排序、交换排序、归并排序和基数排序。插入排序包括直接插入排序和希尔排序;选择排序包括简单选择排序和堆排序;交换排序包括冒泡排序和快速排序。2.算法的时间复杂度由小到大为:常数阶O(1)对数阶O(log2n)线性阶O(n)线性对数阶O(nlog2n)平方阶O(n^2)立方阶O(n^3)k次方阶O(n...

2019-10-31 16:25:51 2027 2

原创 八皇后问题-递归(回溯算法)

1.问题介绍国际西洋棋棋手马克斯贝瑟尔于1848年提出:在8x8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处在同一行、同一列或者同一斜线上,问有多少种摆法(92).2.算法思路1.第一个皇后先放在第一行第一列2.第二个皇后放在第二行第一列,然后判断是否ok,如果不ok,继续放在第二列、第三列,找合适的3.继续第三个皇后,继续第一列第二列。。。。直到第8个皇后也能...

2019-10-25 21:38:44 499

原创 递归-迷宫问题Java

1.递归1.概念:方法自己调用自己,每次调用时传入不同的变量。有助于解决复杂问题,让代码变的简洁。2.调用机制:打印问题,阶乘问题public class RecursionTest { public static void main(String[] args) { //通过打印问题,回顾递归调用机制 //test(4); int...

2019-10-25 18:50:03 602

原创 逆波兰计算器(中缀表达式转后缀表达式)

1.输入一个逆波兰表达式(后缀表达式),使用栈(Stack),计算其结果2.支持小括号和多位数整数。3.思路分析(3+4)5 -6对应的后缀表达式就是 3 4 + 5 * 6 -1)从左至右扫描,将3和4压入堆栈2)遇到+运算符,因此弹出4和3 ,计算出3+4的值,得到7,再将7入栈3)遇到5入栈;4)接下来是运算符,因此弹出5和7,计算出7* 5 = 35,将35入栈5)将6入栈...

2019-10-23 20:25:47 561

原创 栈实现综合计算器(中缀表达式)

1.思路1.通过一个index值(索引),来遍历我们的表达式2.如果发现是一个数字,直接入栈3.如果发现扫描到的是一个符号,就分下面情况1)如果发现当前的符号栈为空,就直接入栈2)如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,再从符号栈中pop一个符号,进行运算,将得到的结果,入数栈,然后将当前的操作符入符号符,如果当前的...

2019-10-22 21:34:24 373

原创 Java 双向链表总结

1.双向链表的操作分析和实现1.管理单向链表的缺点分析1)单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找2)单向链表不能自我删除,需要靠辅助节点,而双向链表,则可以自我删除,所以前面我们单链表删除节点,总是找到temp,temp是待删除节点的前一个节点。2.思路分析1)遍历和单链表不一样,不止可以向前,也可以向后查找2)添加(默认添加到双向链表的最后)① 先找到...

2019-10-18 18:28:11 455 1

原创 java 单链表总结

1.链表介绍1.链表是有序的列表。1)链表是以节点的方式来存储,是链式存储;2)每个节点包含data域,next域:指向下一个节点;3)链表的各个节点不一定是连续存储;4)链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定;2.单链表(带头节点)逻辑结构示意图如下2.单链表的应用使用带head头的单向链表实现对水浒英雄排行榜管理完成对英雄人物的增删改查操作。1)第一种...

2019-10-17 22:26:23 388

原创 IntelliJ IDEA添加注释的快捷键

1.单行注释:Ctrl+/按Ctrl+/,就可以往行首添加"//",将该行注释掉。再次按Ctrl+/,可以去掉该行注释。2.多行注释:Ctrl+Shift+/ /*加入 singleLinkedList.add(hero1); singleLinkedList.add(hero2); singleLinkedList.add(hero3)...

2019-10-17 16:15:47 1791

montecarlo.m

假设目标静止不动,飞机做匀速直线运动进行测距,对方位角和俯仰角加入均值为0的高斯噪声,得到测距曲线和误差变化曲线。

2020-01-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除