数据结构与算法
文章平均质量分 72
数据结构与算法的java实现
Hello3q3q
某大厂底层员工
展开
-
关于双路快速排序为什么从右侧开始判断
其实我一直不太理解双路快排,直到今天做了LeetCode上的一道题,看partition部分的代码public int partition(int[] nums, int left, int right){ // 选择基准 int stard = nums[left]; int i = left; int j = right; // 循环终止条件 while (i < j){ // 必须从右边开始原创 2021-05-20 10:52:47 · 198 阅读 · 0 评论 -
二分查找重难点总结(边界条件、循环条件、mid计算方法等)
1. 二分查找易错点总结二分查找中有三个点需要特别注意:搜索范围的左右边界,即left = 0还是left = -1,right = nums.lengh-1 还是right = nums.lengh;搜索停止(循环结束)的条件,即while(left < right)与while(left <= right)的选择问题;搜索时中间值能否加入左/右边界,即right = mid 还是right = mid-1,left = mid还是left = mid+1;mid怎么计算,即mid原创 2021-03-28 10:43:42 · 4894 阅读 · 6 评论 -
动态规划简单入门
目录0. 参考1. 常见动态规划题目类型2. 动态规划解题步骤3. 动态规划实例3.1 硬币问题3.1.1 问题3.1.2 问题分析3.1.3 代码3.2 机器人路径问题3.2.1 问题3.2.2 问题分析3.2.3 代码实现0. 参考本博客是看了视频后做的入门笔记,强烈建议去看一下,1个多小时就能入门。1. 常见动态规划题目类型计数:有多少种方式走到右下角有多少种方法选出k个数使得和为Sum求最大最小值:从左上角走到右下角路径的最大数字和最长上升子序列长度求存在性:原创 2021-01-31 19:42:12 · 541 阅读 · 0 评论 -
Java实现三路快速排序法
1、三路快速排序算法简单分析单路、双路排序算法在一定情况下(有序数组或数组元素全部相同时),复杂度会退化称O(n2)O(n^2)O(n2),所以需要改写成三路排序算法假设有数组arr,需要将arr[l,r]进行排序。三路快速排序算法的最终目标如图1所示,整个区间被分为3段。图1其过程可以描述为:首先,随机选取的一个待排序的元素v(避免遇到有序数组时,算法退化),将其放在最左边,如图2所示。索引i指向当前要判断的位置,假设指向的元素为e,如果e>v,就将元素e放到右边紫色的区间,具体方法原创 2020-12-15 09:09:00 · 471 阅读 · 1 评论 -
Java实现3种归并排序
1. 引言归并排序的具体内容不再细说,归并排序主要有3种实现:最普通的归并排序普通归并排序的优化自底向上归并排序2. 普通归并排序的实现代码如下import java.util.Arrays;public class MergeSort { private MergeSort() { } public static <E extends Comparable<E>> void sort(E[] arr) { sort(a原创 2020-12-06 11:09:49 · 119 阅读 · 0 评论 -
初级排序算法(选择排序与插入排序)
1.选择排序1.1 基本概念基本思想:先把最小的拿出来,再把剩下的最小的拿出来,再把剩下的最小的拿出来……,直到最后。每次都选择还没有处理的元素中最小的元素。算法描述:假设有如下整型数组,如图一所示,需要将其排序。设置两个索引,i表示当前要处理的位置,j用来再剩余元素中寻找最小元素的索引。图一当i的位置指向6的时候j从6后面一个元素开始搜索,直到搜索到5的位置,找到图一...原创 2020-11-29 09:49:38 · 142 阅读 · 0 评论 -
(JAVA)数据结构(四)链表
1.链表简介单向链表的数据结构如下图所示2. 代码实现链表package LinkedLidt01;public class LinkedList<E> { private class Node { public E e; public Node next; public Node(E e, Node next) { this.e = e; this.next = next;原创 2020-10-22 20:10:46 · 95 阅读 · 0 评论 -
(JAVA)数据结构(三)队列
1. 队列简介队列是一种先进先出的数据结构,类似于食堂打饭。第3节也用图简单说明了一下。队列接口如下所示:public interface Queue<E> { int getSize(); //队列中元素个数 boolean isEmpty();//判断是否为空 void enqueue(E e);//入队 E dequeue();//出队 E getFront();//获取队列第一个元素}2. 数组队列的实现数组队列的实现比较简单,代码原创 2020-10-19 21:58:36 · 98 阅读 · 0 评论 -
(JAVA)数据结构(二)栈
1. 动态数组这里用动态数组实现栈的基本操作package MyStack;public class Array<E> { private E[] data; private int size; //数组当前存放元素个数,注意当前的最大索引等于size-1 /** * 构造函数 * * @param:capacity传入数组的容量 */ public Array(int capacity) { da原创 2020-10-19 16:29:13 · 76 阅读 · 0 评论 -
(JAVA)数据结构(一)数组
数组是最基础的部分,首先利用java中的基本数组,构造一个具有特殊功能的Array类,实现了Collections集合中的一些简单功能。1. 整型数组import java.util.Arrays;public class Array{ private int[] data; private int size; //数组当前存放元素个数,注意当前的最大索引等于size-1 /** * 构造函数 * * @param:capacity传入数组.原创 2020-10-19 10:59:54 · 81 阅读 · 0 评论