![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 75
星辰与晨曦
Java才是最好的语言
展开
-
力扣、752-打开转盘锁
比如,从“0000”开始,转一次,会出现“1000”、“9000”、“0100”、“0900”、“0010”、“0090”、“0001”、“0009”这样共8种情况。输入deadends=[“8887”,“8889”,“8878”,“8898”,“8788”,“8988”,“7888”,“9888”],target=“8888”可能的移动序列为“0000”->“1000”->“1100”->“1200”->“1201”->“1202”->“0202”。...原创 2022-07-31 13:54:11 · 303 阅读 · 0 评论 -
Java 通过回溯实现 全排列 和 N皇后问题
路径就是已经做出的选择选择列表当前还可以做的选择结束条件达到决策树的底层,也就是做完了所有的决策,没有条件了。下来就看具体的题目。原创 2022-07-30 10:52:49 · 404 阅读 · 1 评论 -
力扣 1385、两个数组间的距离值(Java二分法解决)
给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足 |arr1[i]-arr2[j]|原创 2022-06-13 12:49:36 · 309 阅读 · 2 评论 -
Java实现普通队列和环形队列
概念队列是一个有序的列表,可以用数组或是链表来实现。队列是遵循先入先出的原则,即:先存入队列的数据,要先取出,后存入的要后取出。就像水管一样,先流进去的水,就先流出来。队列本身是有序的列表,若使用数组的结构来存储队列的数据的话,声明一个队列为Queue,在给队列设置一个最大容量(maxSize)因为队列的输入输出分别是从前后端来处理的,因此也就需要两个变量(front、rear)来分别指出队列的前后端,front会随着数据的输出而改变,rear会随着数据的输入而改变。代码分析当我们要给数组当原创 2022-05-14 18:02:31 · 232 阅读 · 1 评论 -
数据结构——稀疏数组与二维数组的转换
概念当一个数组当中的大部分元素为0时,或者同为一个值的时候,就可以使用稀疏数组l来保存该数组。稀疏数组的方法:记录数组一共有几行几列,有多少个不同的值;把具有不同值的元素的行列及值记录在一个小规模的数组当中,从而达到缩小程序的规模。稀疏数组当中第一行分别表示(原始数组行,原始数组列,原始数组共有几个非0数据)下面的分别表示元素所在的行、列、元素值为什么产生稀疏数组:因为一个二维数组的很多值默认是0,从而造成大量的空间浪费,使用稀疏数组能优化一些结构。...原创 2022-05-13 18:46:21 · 302 阅读 · 2 评论 -
Java实现快速排序、以及双路,三路快排(图解)
在《算法》第四版这本书当中有提到:快速排序可能是现在应用最为广泛的排序算法基本设计思想快速排序先选择出一个元素作为标准来作为划分的依据:一般来说这个元素时随机的选择出这个区间里的某一个元素。快速排序与归并排序都采用的是分而治之的算法思想来完成排序的。只不过归并排序我们是不管怎么样,都是将数组一分为二,然后不停地合并两个有序的数据。而快速排序是在划分数组这件事上下足了文章,但是它没有合并的过程。快速排序这种特殊的分而治之的思想也可以称为减而治之的算法思想。就是将问题原创 2022-05-02 17:49:47 · 1296 阅读 · 2 评论 -
LeetCode315、计算右侧小于当前元素的个数(采用归并)
给你一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 示例 1: 输入:nums = [5,2,6,1] 输出:[2,1,1,0] 解释: 5 的右侧有 2 个更小的元素 (2 和 1) 2 的右侧仅有 1 个更小的元素 (1) 6 的右侧有 1 个更小的元素 (1) 1 的右侧有 0 个更小的元素原创 2022-04-30 15:12:46 · 975 阅读 · 0 评论 -
剑指offer 51. 数组中的逆序对(采用归并)
题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 输入: [7,5,6,4] 输出: 5限制:0 <= 数组长度 <= 50000原创 2022-04-30 10:55:30 · 260 阅读 · 0 评论 -
java实现归并排序(详解)
归并排序和快速排序都是基于分而治之的算法思想。归并排序先将待排序的数组不断拆分,直到拆分到区间里只剩下一个元素的时候。不能再拆分的时候。这个时候我们再想办法合并两个有序的数组,得到长度更长的有序数组。当前合并好的有序数组为下一轮得到更长的有序数组做好了准备。一层一层的合并回去,直到整个数组有序。原创 2022-04-28 21:52:55 · 21096 阅读 · 9 评论 -
Java实现基础排序算法(选择排序、冒泡排序、插入排序、希尔排序)
排序算法就是将一个数组排成有序的样子。排序算法可以分为基于比较的排序算法和非比较的排序算法。基于比较的排序算法:选择排序、冒泡排序、插入排序、希尔排序归并排序、快速排序、堆排序非比较的排序算法:计数排序、基数排序、桶排序(一般不了解,是因为这些算法的应用很有限的。)选择排序就是一个一个的选出来,先选出最小的元素。再选出第二小的元素。依次往下进行因为数组的长度是有限的,左移就这样通过有限定的次数一定能给数组排好序。原创 2022-04-27 12:21:09 · 1944 阅读 · 4 评论