![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
bigbearxyz
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap核心方法分析(简略版)
ConcurrentHashMap原创 2022-07-06 18:00:20 · 278 阅读 · 0 评论 -
前k个高频元素
输入:arr={2, 2, 2, 2, 3, 3, 3, 1},k = 2;输出:[3,2];利用PrioriQueue的特性和Map的数据结构,返回前k个高频元素。原创 2022-06-29 21:55:07 · 88 阅读 · 0 评论 -
求滑动窗口最大值
Java求滑动窗口最大值原创 2022-06-26 11:38:59 · 83 阅读 · 0 评论 -
反转字符串,并去除前后多余空格
" hello world I am judy! " 反转为: "judy! am I world hello"步骤1:去除前后空格,中间多余空格去除步骤2:反转所有字符串步骤2:按单词反转public class StringTest { public static void main(String[] args) { char[] strArray = {' ',' ','h', 'e', 'l', 'l', 'o', ' ', ' ', 'w', 'o',原创 2022-05-23 14:29:12 · 396 阅读 · 0 评论 -
单链表删除倒数第n个链表节点
前置准备:public class NodeTest { static class MyNode { int val; MyNode preNode; MyNode nextNode; public MyNode(int val, MyNode preNode, MyNode nextNode) { this.val = val; this.preNode = preNode;原创 2022-05-13 20:47:26 · 378 阅读 · 0 评论 -
反转单向链表
前置:static class MyNode { int val; MyNode preNode; MyNode nextNode; public MyNode(int val, MyNode preNode, MyNode nextNode) { this.val = val; this.preNode = preNode; this.nextNode = nex原创 2022-05-13 20:44:45 · 134 阅读 · 0 评论 -
双向链表删除指定节点,JAVA实现
构造双向链表,删除指定节点:public class NodeTest { static class MyNode { int val; MyNode preNode; MyNode nextNode; public MyNode(int val, MyNode preNode, MyNode nextNode) { this.val = val; this.preNode =原创 2022-02-24 15:37:58 · 1787 阅读 · 0 评论 -
两个有序数组,合并后排序
以数组nums1={1, 3, 5, 9}和nums2={3, 4, 6, 8}为例,其求解思路如下:1、构造一个空数组,长度为8,名为ints={};2、比较nums1[0]和nums2[0],1<3,把1放在ints的第1位{1},由于nums1中的第一个 元素已经被使用,其当前索引后移一位,以后用下一位元素3和nums2的第1位元素3比较;3、比较nums1[1]和nums2[0],3不小于3,把nums2[0]放入ints第2位:{1,3};4、比较nums1[1]和...原创 2021-11-12 15:56:22 · 651 阅读 · 0 评论 -
快速排序实现
其思路主要是,取得数组的中位数(方式多种,本文采用中间索引为中位数),把数组中小于中位数的放左边,大于中位数的放右边。之后在分好的左右数组中,使用递归的方式,来执行上述的排序思路。代码及详细解释如下:// static int[] list = {9, 4, 0, 8, 5, 7, 6, 2, 3, 1}; static int[] list = new int[80]; static { for (int i = 0; i < list.l原创 2021-09-08 14:58:31 · 71 阅读 · 0 评论 -
希尔排序原理与实现
希尔排序,要从插入排序的劣势说起,如果插入的数据需要排到有序数组最前方,那插入排序的效率会非常低下。因为插入的数据要逐个和有序数组数据进行比较。为了解决这个问题,就有了希尔排序,其实就是在插入排序的基础上,做了一定的优化。以数组int arr = {9, 4, 7, 8, 5, 0, 6, 2, 3, 1}为例,在做排序之前,依据下标进行分组。第一次分为五组:{arr[0],arr[5]},{arr[1],arr[6]},{arr[2],arr[7]},{arr[3],arr[8]},{arr[原创 2021-08-25 16:36:40 · 141 阅读 · 0 评论 -
插入排序原理与实现
插入排序步骤: 以第1个数组元素为起点,构造有序数组,容量为1,后面无序数组元素依次加入前面有序数组,在插入中有序数组扩容,无序数组缩容。 以从小到达排列为例: 1.当后面无序数组第一个元素小于前面有序数组最大值,首先把需要插入的无序数组的值保存; 2.然后把前面有序数组的最大值复制到无序数组中需要插入的值中,相当于有序数组扩容一位; 3.之后有序数组倒数第二个值,循环和有序数组前面值比较,如果依旧小于前面的值,重复上个交换步骤; 4.否则,跳出...原创 2021-08-23 16:27:31 · 161 阅读 · 0 评论 -
冒泡排序与选择排序的区别(代码演示)
通常使用的排序算法以冒泡为主,但是在实际的应用过程中,选择排序的效果是远远好于冒泡的。但是两者的时间复杂度其实是没有区别的,都是O(n^2),那么其原因在于哪里呢?以如下主程序进行演示public class Test1 { static int[] list = new int[80000]; static { for (int i = 0; i < list.length; i++) { list[i] = (int) (Math原创 2021-07-12 19:42:41 · 825 阅读 · 1 评论