算法
文章平均质量分 52
晓强-
选择和努力一样重要。
展开
-
动态规划常见题型整理
一. 爬阶梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?public int climbStairs(int n) { if (n <= 3) { return n; } int f1 = 1, f2 = 2; for (int i = 3; i <= n; i++) { int f3 = f1 + f2; f1 = f2;原创 2022-05-02 14:09:16 · 401 阅读 · 0 评论 -
二分查找法的几种题型
目录一维数组二维数组旋转数组一维数组统计一个数字在排序数组中出现的次数。public int search(int[] nums, int target) { // 判断数组是否为空,target是否存在nums数组中 if (0== nums.length || nums[nums.length - 1] < target || nums[0] > target) { return 0; } // 先使用折半查找法,查找target原创 2021-12-05 15:50:53 · 603 阅读 · 0 评论 -
排序算法小结
public static void main(String[] args) { Q4 q = new Q4(); int[] nums = {3,4,2,5,1,5}; //选择排序 q.selectSort(nums); //冒泡排序 q.bubbleSort(nums); //插入排序 q.insetSort(nums); //快速排序 q.q原创 2020-10-02 15:55:14 · 89 阅读 · 0 评论 -
图解堆排序
目录堆排序基本介绍堆排序基本思想代码实现堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它是不稳定排序堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆,注意:没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆大顶堆举例说明堆排序基本思想将待排序序列构成一个大顶堆(数组)此时,整个序列的最大值就是顶堆的根节点将原创 2020-09-20 13:26:24 · 109 阅读 · 0 评论 -
求nextval数组值的简便方法
求nextval数组值的第二种方法模式串abaabcacnext值01122312nextval值010213021.第一位的nextval值必定为0,第二位如果于第一位相同则为0,如果不同则为1。2.第三位的next值为1,那么将第三位和第一位进行比较,均为a,相同,则,第三位的nextval值为0。3.第四位的next值为2,那么将第四位和第二位进行比较,不同,则第四位的nextval值为其next值,为2。4.第五位转载 2020-08-21 15:10:54 · 5688 阅读 · 2 评论 -
KMP算法图解
目录KMP算法介绍KMP最佳应用——字符串匹配问题思路分析图解代码实现KMP算法介绍KMP是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法Knuth-Morris-Pratt字符串查找算法,简称“KMP算法”,常用于在一个文本串str1查找一个模式串str2的出现位置KMP算法利用之前判断过的信息,通过一个next数组,保存模式串中前后最长公共子序列的长度,每次回溯时,通过next数组找到,前面匹配过的位置,省去了大量的计算时间KMP最佳应用——字符串匹配问题字符串原创 2020-08-05 23:13:11 · 697 阅读 · 1 评论 -
灯泡开关IV-----Java解法(LeetCode周赛)
题解链接原创 2020-07-26 15:24:36 · 137 阅读 · 0 评论 -
Java实现希尔排序图解
目录简单插入排序存在的问题希尔排序法介绍希尔排序法基本思想排序思想图解代码实现简单插入排序存在的问题假如数组arr={2,3,4,5,6,1},这时需要插入的数为1,这样的过程是{2,3,4,5,6,6}{2,3,4,5,5,6}{2,3,4,4,5,6}{2,3,3,4,5,6}{2,2,3,4,5,6}{1,2,3,4,5,6}结论:当需要排序的数为倒序,而我们需要正序排序的时候,效率很低。希尔排序法介绍希尔排序是希尔(DonaldShell)于1959年提出的一种排原创 2020-06-09 14:01:28 · 673 阅读 · 0 评论 -
Java实现普利姆算法(Prim)图解
普利姆算法引入问题最小生成树普利姆算法介绍代码实现引入问题修路问题图中有7个村庄(A,B,C,D,E,F,G),现在需要修路把7个村庄连通各个村庄的距离用边线表示(权),比如A - B相距5公里问:如何修路保证各个村庄都能连通,并且总的修建公路里程最短思路:尽可能选择少的路线,并且每条路线最小,保证总里程数最小最小生成树修路问题的本质就是最小生成树问题,先介绍一下最小生成树**(Minimum Cost Spanning Tree),简称MST**给定一个带权的无向连通图,原创 2020-06-05 16:00:19 · 951 阅读 · 0 评论 -
Java实现01背包--理解动态规划
动态规划动态规划算法介绍动态规划算法的最佳实践-背包问题动态规划算法介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法动态规划算法与分治算法类似,其基本思想都是将待求解问题分成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合用于动态规划求解的问题,经分解得到子问题往往不是相互独立的。(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)动态规划可以通过填表的原创 2020-06-05 12:00:46 · 196 阅读 · 0 评论 -
Java实现归并排序图解
归并排序归并排序介绍图解代码理解归并排序介绍归并排序(Meger-Sort)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分成一些小的问题,然后递归求解,而治的阶段则将分的阶段得到的各个答案“修补”在一起,即分而治之)。图解可以看到这种结构很像一颗完全二叉树,本文的归并排序,我们将采用递归去实现(也可以采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程。代码理解public class MergeSort {原创 2020-06-04 19:49:21 · 277 阅读 · 0 评论 -
Java实现快速排序图解
快速排序快速排序法介绍图解代码理解快速排序法介绍快速排序(QuickSort)是对冒泡排序的一种改进,基本思想是:通过一趟排序将 要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。图解代码理解public class QuickSort { //从小到大排序 public void quickSort(int left, int right,原创 2020-06-04 16:55:56 · 773 阅读 · 0 评论