![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java数据结构与算法
1天真无邪1
这个作者很懒,什么都没留下…
展开
-
tc_LeetCode
tc_LeetCode1.两数相加2.寻找两个有序数组的中位数4.整数反转5.字符串转换整数 (atoi)6.回文数7.盛最多水的容器8.最长公共前缀9.三数之和10.最接近的三数之和11.有效的括号12.合并两个有序链表13.合并K个排序链表14.删除排序数组中的重复项15.搜索旋转排序数组16.字符串相乘17.全排列18.最大子序和19.螺旋矩阵20.螺旋矩阵II21.旋转链表22.不同路径23.爬楼梯24.子集25.合并两个有序数组26.格雷编码27.二叉树的最大深度28.买卖股票的最佳时机29.买卖原创 2020-07-13 13:15:35 · 517 阅读 · 0 评论 -
平衡二叉排序树、AVL树、红黑树、B树、B+树
1、平衡二叉排序树 二叉查找树定义:又称为是二叉排序树(Binary Sort Tree)或二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: 1) 若左子树不空,则左子树上所有结点的值均小于它的根结点的值; 2) 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值; 3) 左、右子树也分别为二叉排序树; 4) 没有键值相等的节点。...原创 2020-03-08 16:29:55 · 685 阅读 · 0 评论 -
LinkedHashMap原理
先来一张LinkedHashMap的结构图,不要虚,看完文章再来看这个图,就秒懂了,先混个面熟:LinkedHashMap结构.png2.1 应用场景HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。 Map<String, String> hashMap = new HashM...原创 2020-03-08 09:43:31 · 340 阅读 · 0 评论 -
在java中String类为什么要设计成final?
String很多实用的特性,比如说“不可变性”,是工程师精心设计的艺术品!艺术品易碎!用final就是拒绝继承,防止世界被熊孩子破坏,维护世界和平!1. 什么是不可变?String不可变很简单,如下图,给一个已有字符串"abcd"第二次赋值成"abcedl",不是在原内存地址上修改数据,而是重新指向一个新对象,新地址。2. String为什么不可变?翻开JDK源...原创 2020-03-01 13:36:49 · 133 阅读 · 0 评论 -
String相关问题
String 对象可谓再熟悉不过了,与此相关的面试题经常会引出内存性能优化的问题,本篇主要以new String("123")创建了几个对象为例记录。一、你能回答正确吗Stringa="123";如上定义的为常量;Stringb=a+"456";如上 b 为变量,为啥? 难道常量拼接常量得到的是变量吗?不是,常量拼接常量得到的依旧是常量。但是此...原创 2020-02-28 13:46:13 · 517 阅读 · 0 评论 -
Java中的锁分类
Java中的锁分类在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。公平锁/...原创 2019-10-30 09:41:56 · 139 阅读 · 0 评论 -
希尔排序
希尔排序(Shell Sort) 前言: 数据序列1: 13-17-20-42-28 利用插入排序,13-17-20-28-42. Number of swap:1; 数据序列2: 13-17-20-42-14 利用插入排序,13-14-17-20-42. Number of swap:3; 如果数据序列基本有序,使用插入排序会更加高效。 基本思想: 在要排序的一组数中,...原创 2019-10-06 14:15:31 · 77 阅读 · 0 评论 -
插入排序
在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。public static void insert_sort(int array[],int lenth){ int temp; for(int i=0;i<lenth-1;i++){ for(int j=i+1...原创 2019-10-06 13:20:57 · 71 阅读 · 0 评论 -
选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。public static void select_sort(int array[]...原创 2019-10-06 13:14:24 · 65 阅读 · 0 评论 -
补齐左括号
问题:编写一道程序,从标准输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式。例如,给定输入:1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) )你的程序应该输出:((1 + 2) * ((3 - 4) * (5 - 6)))解: 1 + 2)应该变成(1+2),这里的操作数是1和2,运算符是+,这里的逻辑是 "操作数1+运算符+操作数2+)" 应...原创 2019-09-14 18:30:22 · 218 阅读 · 0 评论 -
基数排序
基数排序:算法思想先将所有关键字统一为相同位数,位数较少的数前边补0.然后从最低位开始依次向高位进行排序,直到按最高位排序完成,关键字序列就成为有序序列。基数排序基于分别排序,分别收集,所以是稳定的。适用于很长的数的排序。算法实现步骤确定排序趟次,即确定最大的数的位数从最低位按照分配和收集进行排序,直至最高位。在每一趟,分配按照相应关键字的曲子将记录加入到r个不同的队...原创 2019-04-19 08:26:42 · 136 阅读 · 0 评论 -
归并排序
.归并排序算法思想分治法。归并排序将待排序列一分为二,并对每个子数组递归排序,然后再把这两个排好序的子数组合并为一个有序的数组。算法实现步骤把长度为n的输入序列分为两个长度为n/2的子序列对这两个子序列分别采用归并排序将两个排序好的子序列合并成一个最终的排序序列算法流程图Java代码实现:/*** 归并排序* 稳定的排序算法** @param nums ...原创 2019-04-19 08:15:50 · 120 阅读 · 0 评论 -
快速排序
快速排序分类编程技术快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望...原创 2019-04-18 16:01:15 · 178 阅读 · 0 评论 -
堆排序
package DataStructures.sort.HeapSort;import java.util.Scanner;/** * 堆排序 * @author wang handsome * */public class HeapSort { public static void main(String[] args) { Scanner sc...原创 2019-04-14 11:27:21 · 131 阅读 · 0 评论 -
冒泡排序及其优化的三种方式
冒泡排序(BubbleSort)一般冒泡排序的写法//假设排序arr[] = { 1, 3, 4, 2, 6, 7, 8, 0 };void BubbleSort(int arr[],int len){ int i = 0; int tmp = 0; for (i = 0; i < len - 1; i++)//确定排序趟数 { i...原创 2019-04-16 20:56:58 · 462 阅读 · 0 评论