数据结构与算法
lzdLoveJava
这个作者很懒,什么都没留下…
展开
-
Array.sort()排序核心思路
Array.sort()排序核心思路根据不同的情况,选择不同的排序算法。当需要排列的元素较少的时候,采用普通的插入排序当被排序的数组长度小于47但排序不是从数组起始位置开始的时候,那么就会选择哨兵插入排序的方式进行排序。这种情况主要是当sort被双基准快排递归调用的时候才会使用如果元素较多,大于插入排序的阈值,但是小于归并排序的阈值,这时采用快速排序在进行快排之前,首先会将这个不长不断的数组按照1/7的长度划分,然后根据这5个划分点进行排序:2.1. 如果这五个划分点的数据俩俩各原创 2021-09-06 19:28:37 · 261 阅读 · 0 评论 -
十大排序算法小结
十大排序算法小结1.堆排序2.快速排序3.归并排序4.冒泡排序5.选择排序6.插入排序7.希尔排序(插入排序的升级版)8.桶排序9.基数排序10.计数排序11.排序性能总结和使用场合一些基本的术语堆排序应用场景归并排序应用场景计数排序应用场景基数排序 vs 计数排序 vs 桶排序场景选择:1.堆排序解释:int[ ] nums数组的长度为length,则nums[ i ]的左子节点是nums[2 * i + 1],右子节点是nums[2 * i + 2]第一个非叶子结点是nums[ length原创 2021-09-06 17:06:17 · 405 阅读 · 0 评论 -
HashMap底层原理及常见问题解答
这里写目录标题一.HashMap几个重要参数二.HashMap数据结构三.相关问题:1.HashMap的工作原理(put和get操作过程)2.什么是Hash碰撞?3.当两个对象的 hashCode 相同会发生什么?4.JDK1.7和1.8中HashMap的区别在哪里?5.为什么链表长度大于8才用红黑树?6.为什么不用二叉查找树?7.hash 的实现?为什么要这样实现?8.为什么要用异或运算符?9.为什么HashMap是线程不安全的?10.Hashtable,ConcurrentHashMap和HashMap原创 2021-08-19 17:39:41 · 439 阅读 · 0 评论 -
树、二叉树、平衡二叉树、B树、B+树、红黑树各种常见树总结
树、二叉树、平衡二叉树、B树、B+树、红黑树各种常见树总结基本概念与定义一. 二叉搜索树/查找树(BST:Binary Search Tree)二. 平衡二叉树(AVL树)三. 多路查找树3.2 B树3.3 B+树四. 红黑树基本概念与定义树: 树是n个结点的有限集合,有且仅有一个根结点,其余结点可分为m个根结点的子树;结点的度: 一个结点拥有子树的个数称为度;树的深度: 树中结点的最大层次成为树的深度或高度;权(Weight):树中结点的一个有某种意义的实数;路径长度(Length):树的路径原创 2021-08-18 09:26:35 · 603 阅读 · 0 评论 -
<数据结构与算法刷题心得笔记>Java-数组加一
题目要求:给定一个由 整数组成的非空 数组所表示的非负整数,在该数的基础上加一。提供一个非空的整数数组,返回一个数组示例 1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例 2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]输出:[1]最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。,这个整数不会以零开头。解法:原创 2021-04-13 13:56:47 · 224 阅读 · 0 评论 -
<数据结构与算法刷题心得笔记>Java-找出只出现过一次的元素
题目要求:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。1.HashSetclass Solution { public int singleNumber(int[] nums) { Set<Integer> set = new HashSet<>(); for (int data : nums){ if(!set.add(data)){转载 2021-04-12 15:15:17 · 175 阅读 · 0 评论 -
<数据结构与算法刷题心得笔记>Java-找出只出现了一次的元素
题目要求:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。1.HashSetclass Solution { public int singleNumber(int[] nums) { Set<Integer> set = new HashSet<>(); for (int data : nums){ if(!set.add(data)){原创 2021-04-12 15:12:51 · 208 阅读 · 0 评论 -
<数据结构与算法刷题心得笔记>Java-翻转数组-给定一个整数数组,判断是否存在重复元素。
题目:给定一个整数数组,判断是否存在重复元素。要求:如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true1.暴力解法(效率低下的):(时间复杂度O(n2))class Solution { public boolean contai原创 2021-04-12 14:15:51 · 230 阅读 · 0 评论 -
<数据结构与算法>Java代码实现单向链表-代码实现
数据结构-Java代码实现单向链表-代码实现:应用情形:一个PersonNode为元素的单链表实现实现功能:单链表,增删改查插实现代码如下:public class SingleLinkedList { public PersonNode head = new PersonNode();//头结点 public int SIZE = 0;//记录链表中目前的长度 public boolean isEmpty() {//判断链表是否为空 return S原创 2021-04-09 23:40:38 · 356 阅读 · 4 评论 -
<数据结构与算法>Java代码实现循环队列(基于数组,留一空位)
数据结构-Java代码实现循环队列(基于数组,留一空位)-代码实现:应用情形:先进先出,可以通过数组和链表实现,这里用数组和链表分别实现队列数组实现队列思路:我们将这个数组留一个空位,让rearIndex索引指向的这个位置一直空出来,方便循环队列的运行判断队列是否为空:头索引frontIndex == rearIndex判断队列是否为满:尾指针rearIndex下一个是头索引frontIndex时为满:即(rearIndex + 1) % (MaxSize+1) == front满队列中数原创 2021-04-09 14:45:56 · 192 阅读 · 0 评论 -
<数据结构与算法>Java代码实现队列(基于数组,非循环队列)
数据结构-队列(基于数组,非循环队列)-代码实现:应用情形:先进先出,可以通过数组和链表实现,这里用数组和链表分别实现队列数组实现队列思路:1.队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 MaxSize是该队列的最大容量。2.因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front 及 rear 分别记录队列前后 端的下标,front会随着数据输出而改变,而rear则是随着数据输入而改变实现功能:1.入列2.出列实现效果几原创 2021-04-08 15:13:09 · 181 阅读 · 2 评论 -
<数据结构与算法>Java代码实现稀疏数组与其展开数组的相互转换
数据结构-稀疏数组-代码实现:应用情形:当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。处理方法:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模实现功能:实现数组和稀疏数组可以互相转换;(以数组类型为int为例子)实现效果实现代码如下:public class SparseArray { /** * * @param arr:原始数组原创 2021-04-07 22:38:31 · 271 阅读 · 0 评论