
算法与数据结构
lpq1201
这个作者很懒,什么都没留下…
展开
-
JAVA-TreeSet集合
代码实现:package cn.lpq.WhtchVedeo;import java.util.Collection;import java.util.Iterator;import java.util.TreeSet;public class TestTreeSet { public static void main(String[]args){ Collection原创 2017-05-30 12:53:08 · 259 阅读 · 0 评论 -
几个排序算法总结(高频)
(1)冒泡排序 最简单的冒泡排(有缺陷): //初始冒泡排序–有缺陷 public static void BubbleSort(int []arr){ for(int i=0;i原创 2018-08-16 11:35:17 · 236 阅读 · 0 评论 -
剑指Offer几个高频词总结
面试题2:单例模式: package recover; //单例模式–饿汉式 //1.构造器私有 2.在成员位置上创建一个对象(静态私有)3.提供一个静态的方法 public class Singleton { private Singleton(){} private static Singleton singleton=new Singleton(); p...原创 2018-08-16 11:33:39 · 296 阅读 · 0 评论 -
简单排序之插入排序
一、算法原理插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置。假设我们输入的是 “53,27,36,15,69, 42” 我们从第二个数字开始,这个数字是27,我们的任务只要看看27有没有正确的位置,我们的做法是和这个数字左边的数字来比,因此我们比较27和53,27比53小,所以我们就交换27和53,原来的排列就变成了“27, 53, 36, 15, 69, 42 ”接下来,...原创 2018-06-14 15:29:18 · 496 阅读 · 0 评论 -
几种经典的排序算法
1.冒泡排序 时间复杂度:O(n²) 冒泡排序算法的运作如下:(从后往前) 1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3)针对所有的元素重复以上的步骤,除了最后一个。 4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需...原创 2018-05-31 15:37:57 · 20662 阅读 · 1 评论 -
基于最大堆的堆排序算法
堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。 同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组...原创 2018-06-14 11:20:49 · 1901 阅读 · 5 评论 -
递归应用之快速排序
递归应用1斐波那契数列斐波那契数列满足:1,1,2,3,5,8,13…… 从第三个位置起每个元素的值是前面元素的和代码实现:public class FeiBo{ public static void main(){ int num1=1; int num2=1; int n=6; int numn=0; ...原创 2018-05-30 21:49:52 · 191 阅读 · 0 评论 -
二叉树代码实现
package cn.dataStructures.BinarySerachTree;import java.util.LinkedList;import java.util.Queue;import java.util.Stack;public class BST1 <E extends Comparable<E>>{ private class No...原创 2018-05-30 15:14:49 · 2712 阅读 · 1 评论 -
斐波那契数列--递归与非递归实现
初识斐波那契数列: 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0,1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n&...原创 2018-06-03 11:17:26 · 16000 阅读 · 1 评论 -
数据结构之数组队列
队列的特性: 1.队列是一种线性数据结构,与数组相比,队列的方法是数组的子集; 2.向队列中添加元素只能在队尾进行,在队首删除元素; 3.队列是一种先进先出的数据结构; 队列的方法: 1.void enqueue(E e);向队列中添加元素; 2.E dequeue();从队列中删除元素; 3.int getSize();获取队列的大小; 4.E setFront();获取队首元素...原创 2018-05-12 13:14:07 · 215 阅读 · 0 评论 -
数据结构之栈的数组实现
*栈的特点:* 1.栈是一种线性的数据结构,相比于数组,栈的操作是数组的子集; 2.栈只能从一端添加元素,也只能从一端删除元素,添加元素的操作叫做进栈(void push()),删除元素叫做出栈(E pop(),注意:此处E指的是泛型,可取任意数据类型)。 3.向栈中添加元素和删除元素的一端成为栈顶; 4.栈是一种后进先出的数据结构; 栈的图示: 栈的原理图如下所示: 栈的常用方...原创 2018-05-12 10:45:02 · 357 阅读 · 0 评论 -
数据结构-链表的增删改查底层实现
链表的底层代码实现–增删改查 代码实现如下:package cn.dataStructures.Stack;public class LinkedListDemo<E> { //创建内部类 private class Note{ public E e; public Note next; //构造方法 ...原创 2018-05-11 21:58:44 · 499 阅读 · 0 评论 -
初识链表
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺...原创 2018-05-11 16:50:59 · 229 阅读 · 0 评论 -
数据结构之栈在LeetCode的应用
临近找工作,在牛客网上看了很多面筋发现自己是在菜的不行,所以前期时间春招也没有参加(只是象征性的投了几个建立,却都石沉大海)深知自己的不足。“打铁还需自身硬”,所以在网上找了一个数据结构的视频,跟着学习(对的本人非科班出生),今天学到了栈在LeetCode上的一个具体应用,故自己总结一下发表在csdn博客上。 首先看一下这个题目: 代码实现:import java.util.Stack...原创 2018-05-10 11:32:40 · 152 阅读 · 0 评论 -
String StringBuffer StringBuilder之间的区别
最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便于大家观看,也便于加深自己学习过程中对这些知识点的记忆,如果哪里有误,恳请指正。 这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。首先说运行速度,或者说是执行速度,在这...转载 2018-04-19 09:21:49 · 114 阅读 · 0 评论 -
数据结构之动态数组
package cn.Arrays.lpq;public class Array1 { private int [] data; private int size; //有参构造,确定数组容量为capacity public Array1(int capacity){ data=new int[capacity]; s...原创 2018-04-18 21:46:52 · 296 阅读 · 0 评论 -
JAVA-二分法查找算法总结
二分查找算法: 二分查找算法也叫折半查找算法。 优点:1.比较次数少 2.查找速度快 3.平均性能好 缺点:1.待查表需要是有序的 2.插入、删除困难 算法原理: 假设对于一个按序排列的列表a,需要查找的键值为:key,数组列表中间那个元素对应的索引为:mid 初始化该列表起始元素的索引:low,最后一个元素的位置索引为:high=a.length原创 2017-05-22 13:12:01 · 597 阅读 · 0 评论 -
算法的时间复杂度和空间复杂度-总结
通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间复杂度分析方法是很有必要的。 算法执行时间需通转载 2017-05-19 17:48:49 · 521 阅读 · 0 评论 -
判断一棵二叉树是否为完全二叉树
判断一棵二叉树是否为完全二叉树–采用广度优先遍历–利用队列 * 1。定义标志位flag=false表示没有遇到空的节点,count=0 * 2.只要树中节点的左右子树都不为空,那么就把该节点的所有左右孩子压入队列(包括null节点) * 压入队列3种情况: * (1)节点都有左右子节点—都压入 * (2)节点有一个左子节点右子节点为空或者节点有一个...原创 2018-08-21 17:31:44 · 1748 阅读 · 0 评论