![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
ProMan_XY
这个作者很懒,什么都没留下…
展开
-
剑指Offer-学习计划(四)双指针(下)
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。例如输入字符串"I am a student. ",则输出"student. a am I"。输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。输入:nums = [10,26,30,31,47,60], target = 40。输入:nums = [2,7,11,15], target = 9。原创 2023-07-28 10:51:36 · 370 阅读 · 0 评论 -
随手笔记(四十二)——关于Stack部分原理分析
栈原创 2022-11-23 10:32:26 · 737 阅读 · 0 评论 -
算法笔记(628. 三个数的最大乘积)
题目:628. 三个数的最大乘积给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:输入:nums = [1,2,3]输出:6示例 2:输入:nums = [1,2,3,4]输出:24示例 3:输入:nums = [-1,-2,-3]输出:-6https://leetcode-cn.com/problems/maximum-product-of-three-numbers/解法一:首先对数组进行排序 ,然后比较大小,这块儿主要思考的就是原创 2022-03-17 13:34:45 · 2972 阅读 · 0 评论 -
Java基数排序代码实现
public static void radixSort(int []a,int n){ if (n<=1)return; int max = a[0]; for (int i=0;i<n;i++){ if (max<a[i])max = a[i]; } for (int...原创 2020-02-14 18:03:09 · 9885 阅读 · 0 评论 -
Java桶排序代码实现
public static void bucketSort(int [] a,int bucketSize){ if (a.length<2)return; int minIndex = a[0]; int maxIndex = a[1]; for (int i=0;i<a.length;i++){ ...原创 2020-02-14 18:02:31 · 10038 阅读 · 0 评论 -
Java堆的实现和堆排序
public class Heap { private int[] a; // 数组,从下标1开始存储数据 private int n; // 堆可以存储的最大数据个数 private int count; // 堆中已经存储的数据个数 public Heap(int capacity) { a = new int[capacity + 1]...原创 2020-02-02 14:09:12 · 9962 阅读 · 0 评论 -
Java基于数组实现的LRU缓存
public class LRUBasedArray<T> { private static final int DEFAULT_CAPACITY = (1 << 3); private int capacity; private int count; private T[] value; private Map<T...原创 2020-01-18 17:53:29 · 10336 阅读 · 0 评论 -
Java基于散列表的LRU算法
import java.util.HashMap;/** * @Description:基于散列表的LRU算法 */public class LRUBaseHashTable<K, V> { /** * 默认链表容量 */ private final static Integer DEFAULT_CAPACITY = 10; ...原创 2020-01-11 15:31:06 · 9915 阅读 · 0 评论 -
Java 计数排序
概念:计数排序是一种不基于比较的排序算法,主要思想是先计算出待排序序列的最大值 maxValue 与 最小值 minValue,再开辟一个长度为 maxValue - minValue + 1 的额外空间,然后统计待排序序列中每个元素的数量,记录在额外空间中,最后遍历一遍额外空间,按照顺序把每个元素赋值到原始序列中。 图解 代码import java.util.Arrays;pu...原创 2019-12-19 18:31:33 · 10119 阅读 · 0 评论 -
数据结构与算法分析(十二)散列表
散列表的英文叫“Hash Table”,我们平时也叫它“哈希表”或者“Hash 表” 散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。 散列表的由来? 散列表来源于数组,它借助散列函数对数组这种数据结构进行扩展,利用的是数组支持按照下标随机访问元素的特性。 需要存储在散列表中的数据我们称为键,将键转化为...原创 2019-11-27 15:57:49 · 9799 阅读 · 0 评论 -
数据结构与算法分析(十一)跳表
跳表(Skip list): 它是一种各方面性能都比较优秀的动态数据结构,可以支持快速的插入、删除、查找操作,写起来也不复杂,甚至可以替代红黑树(Red-black tree) Redis 中的有序集合(Sorted Set)就是用跳表来实现的。 对于一个单链表来讲,即便链表中存储的数据是有序的,如果我们要想在其中查找某个数据,也只能从头到尾遍历链表。这样查找效率就会很低,时间复杂度会很高,...原创 2019-11-27 15:50:11 · 9912 阅读 · 1 评论 -
Java二分查找代码实现
二分查找(Binary Search)算法:又称折半查找法 二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。 上代码 二分查找除了用循环来实现,还可以用递归来实现,过程也非常简单。 // 二分查找的普通实现 public int bsearch(int[...原创 2019-11-20 16:59:10 · 10206 阅读 · 1 评论 -
Java 归并排序和快速排序代码练习
// 归并排序算法, a是数组,n表示数组大小 public static void mergeSort(int[] a, int n) { mergeSortInternally(a, 0, n-1); } // 递归调用函数 private static void mergeSortInternally(int[] a, int p, in...原创 2019-11-15 20:11:39 · 11728 阅读 · 1 评论 -
Java 选择排序&&冒泡变种
// 选择排序,a表示数组,n表示数组大小 public static void selectionSort(int[] a, int n) { if (n <= 1) return; for (int i = 0; i < n - 1; ++i) { // 查找最小值 int minInde...原创 2019-11-15 20:09:16 · 9942 阅读 · 0 评论 -
Java 冒泡和插入排序锻炼
// 冒泡排序,a 表示数组,n 表示数组大小 public void bubbleSort(int[] a, int n) { if (n <= 1) return; for (int i = 0; i < n; ++i) { // 提前退出冒泡循环的标志位 boolean flag =...原创 2019-11-11 17:31:33 · 9910 阅读 · 0 评论 -
随手笔记(十五)———前端模板引擎:Thymeleaf
之前不了解Thymeleaf的时候,前后端传值都感觉很费劲,现在了解了他,妈妈再也不用担心我的代码最近用到了循环展示,input,span标签等等详细了解的点击跳转这个链接:https://blog.csdn.net/sinat_30254575/article/details/79515222...原创 2019-09-30 10:55:21 · 8717 阅读 · 0 评论 -
数据结构与算法分析(一)基础
什么是数据结构?什么是算法?广义:数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。例子:图书馆存储图书,为了方便查找,图书管理员一般会将书籍分门别类进行存储。按照一定规律编号,就是书籍这种“数据”的存储结构。我想找一本书?可以有很多种方法,我可以一本一本的找,也可以根据书籍类别编号,是军事,还是政治、人文,来定位书架,然后再依次查找,这些查找的方法都是算法。狭义...原创 2019-07-19 18:32:45 · 7650 阅读 · 1 评论 -
数据结构与算法分析(二)复杂度分析
总结一、什么是复杂度分析?1.数据结构和算法解决是“如何让计算机更快时间、更省空间的解决问题”。2.因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能。3.分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度。4.复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。二、为什么要进行复杂度分析?1.和性能测试相比,复杂度分析有不依赖执行环境、成本低、...原创 2019-07-20 13:01:35 · 7997 阅读 · 0 评论 -
数据结构与算法分析(三)数组
为什么数组是从0开始不是从1开始呢 什么是数组?数组(Array)是一种线性表数据结构。他用一组连续的内存空间,来存储一组具有相同类型的数据 第一个是线性表(LinearList)线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。除了数组,链表、队列、栈等等也是线性表结构 与线性表对立的概念是非线性表,比如二叉树、堆、图等等。之所以叫非线性,是因为,在非线性表...原创 2019-07-20 22:50:13 · 7620 阅读 · 2 评论 -
数据结构与算法分析(七)递归
一、什么是递归?1.递归是一种非常高效、简洁的编码技巧,一种应用非常广泛的算法,比如DFS深度优先搜索、前中后序二叉树遍历等都是使用递归。2.方法或函数调用自身的方式称为递归调用,调用称为递,返回称为归。3.基本上,所有的递归问题都可以用递推公式来表示,比如f(n) = f(n-1) + 1;f(n) = f(n-1) + f(n-2);f(n)=n*f(n-1);二、为什么使用递...原创 2019-08-07 19:28:13 · 7875 阅读 · 0 评论 -
数据结构与算法分析(五)队列
一、什么是队列?1.先进者先出,这就是典型的“队列”结构。2.支持两个操作:入队enqueue(),放一个数据到队尾;出队dequeue(),从队头取一个元素。3.所以,和栈一样,队列也是一种操作受限的线性表。二、如何实现队列?1.队列APIpublic interface Queue<T> {public void enqueue(T item); //入队publi...原创 2019-08-20 14:43:00 · 8159 阅读 · 0 评论 -
数据结构与算法分析(八)排序(冒泡,插入,选择)
一、几种经典排序算法及其时间复杂度级别冒泡、插入、选择 O(n^2) 基于比较快排、归并 O(nlogn) 基于比较计数、基数、桶 O(n) 不基于比较二、如何分析一个排序算法?1.学习排序算法的思路?明确原理、掌握实现以及分析性能。2.如何分析排序算法性能?从执行效率、内存消耗以及稳定性3个方面分析排序算法的性能。3.执行效率:从以下3个方面来衡量1)最好情况、最坏情况、平均情况时...原创 2019-08-17 11:22:29 · 7917 阅读 · 0 评论 -
随手笔记(七)———如何写好链表代码
如何写好链表代码?1. 理解指针或引用的含义什么是指针?指针是一个变量,该变量中存的是其它变量的地址。将普通变量赋值给指针变量,其实是把它的地址赋值给指针变量。2. 警惕指针丢失和内存泄漏在插入和删除结点时,要注意先持有后面的结点再操作,否者一旦后面结点的前继指针被断开,就无法再访问,导致内存泄漏。3. 利用哨兵简化难度链表的插入、删除操作,需要对插入第一个结点和删除最后一个节点做特殊...原创 2019-08-17 11:25:40 · 7894 阅读 · 0 评论 -
数据结构与算法分析(四)链表
一、什么是链表?1.和数组一样,链表也是一种线性表。2.从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。3.链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next。二、为什么使用链表?即链表的特点1.插入、删除数据效率高O(1)级别(只需更改指针指向即可),随机访问效率低O(n...原创 2019-08-17 11:28:20 · 8088 阅读 · 0 评论 -
数据结构与算法分析(五)队列
队列实现一、数组实现public class ArrayQueue {//存储数据的数组private String[] items;//记录数组容量private int n;private int size;//head记录队头索引,tail记录队尾索引private int head = 0;private int tail = 0;//申请一个指定容量的队列pub...原创 2019-08-27 15:25:16 · 8427 阅读 · 0 评论 -
数据结构与算法分析(六)队列总结
一、什么是队列?1.先进者先出,这就是典型的“队列”结构。2.支持两个操作:入队enqueue(),放一个数据到队尾;出队dequeue(),从队头取一个元素。3.所以,和栈一样,队列也是一种操作受限的线性表。二、如何实现队列?队列APIpublic interface Queue<T> {public void enqueue(T item); //入队public T...原创 2019-08-27 15:27:35 · 8712 阅读 · 0 评论 -
数据结构与算法分析(十)线性排序
桶排序:1. 原理: 根据数据范围,分成若干个数据段的桶,通过遍历讲数据放到对应的桶中。每个桶里都进行快排或归并。2. 时间复杂度: 最好o(n), 最坏o(nlogn), 平均o(n),一般桶分的越细越多复杂度就会最好。3. 内存消耗: o(n)4. 稳定性: 取决于每个桶的排序方式,快排就不稳定,归并就稳定。5. 适用场景: 数据范围不大的。内存吃紧的,如磁盘的读写可以分成多个小文...原创 2019-09-24 17:47:53 · 8609 阅读 · 0 评论 -
数据结构与算法分析(三)数组练习代码
package com.example.demo.array;public class Brray { public int data[];//数组数据空间 private int n;//数组长度 private int count;//实际元素个数 //构造方法定义数组大小 public Brray(int capacity) { ...原创 2019-07-24 14:43:31 · 7669 阅读 · 0 评论