算法
败给你的黑色幽默丶
if i say you're the one would you believe me;
if i ask you to stay would you show me the way
展开
-
【滑动窗口】
滑动窗口应用场景满足一定条件最长、最短子序列/子串/子数组简单介绍滑动窗口核心思想找到最长连续红球子序列(1)初始化窗口:左右指针初始化为-1;(2)定义窗口的含义:如果right > left 只能容忍窗口中有红球(3)移动右指针:此时窗口有1个红球则继续移动右指针(4)窗口内出现白球,这是不容许的,因此移动left,使得left == right; 此时记下max = 1;(5)继续滑动right;(6)如此往复,知道right = arr.length代码原创 2022-03-08 17:19:14 · 282 阅读 · 0 评论 -
【动态规划】
Easy53. 最大子数组和https://leetcode-cn.com/problems/maximum-subarray/(1)题解1 效率较低class Solution { public int maxSubArray(int[] nums) { //1.定义dp[i] 为前i个元素中 连续子数组的最大和 int[] dp = new int[nums.length + 1]; //2.初始化 dp[1] =原创 2022-01-07 14:49:04 · 289 阅读 · 0 评论 -
【回溯算法】
全排列import java.util.ArrayList;import java.util.LinkedList;import java.util.List;public class Main { List<List<Integer>> res = new ArrayList<>(); List<List<Integer>> permute(int[] nums){ List<Integer>原创 2022-01-07 18:49:29 · 71 阅读 · 0 评论 -
【算法】【复杂度分析】
大O表示法(Big O)一般用大O表示法来描述复杂度,它表示的是数据规模 n 对应的复杂度。忽略常数、系数、低阶;举例说明:9 >> O(1)2n + 3 >> O(n)n2 + 2n + 6 >> O(n2)4n3 + 3n2 + 22n + 100 >> O(n3)注意:大O表示法仅仅是一种粗略的分析模型,是一种估算,能帮助我们短时间内了解一个算法的执行效率。对数阶的细节对数阶一般省略底数:由于 log29 ∗ log9n原创 2022-01-04 12:44:23 · 349 阅读 · 0 评论 -
【分治算法】
分治(Divide And Conquer)分治,也就是分而治之。它的一般步骤是:① 将原问题分解成若干个规模较小的子问题(子问题和原问题的结构一样,只是规模不一样)② 子问题又不断分解成规模更小的子问题,直到不能再分解(直到可以轻易计算出子问题的解)③ 利用子问题的解推导出原问题的解因此,分治策略非常适合用递归。需要注意的是:子问题之间是相互独立的分治的应用:快速排序归并排序Karatsuba 算法(大数乘法)主定理(Master Theorem)对n个数据排序:O(n2)原创 2021-10-26 23:41:01 · 73 阅读 · 0 评论 -
【贪心算法】
贪心(Greedy)贪心策略,也称为贪婪策略定义:每一步都采取当前状态下最优的选择(局部最优解),从而希望推导出全局最优解贪心的应用哈夫曼树最小生成树算法:Prim、Kruskal最短路径算法:Dijkstra...原创 2021-10-25 12:36:52 · 179 阅读 · 0 评论 -
【算法-图】图的遍历
图的遍历BFS 广度优先搜索从一个顶点出发,宽度优先遍历注意:对于有向图来说,选择第一个顶点很重要;因为不一定能够每个节点都能遍历到实现思路深度优先搜索(DFS)注:DFS结果不唯一如果当前节点的outVertex都是访问过的,就退回到上一个vertex...原创 2021-09-29 22:38:58 · 214 阅读 · 0 评论 -
二叉树的非递归遍历
1.前序遍历 public void preorder(Visitor<E> visitor) { if (visitor == null || visitor == null) return; Node<E> node = root; LinkedList<Node<E>> stack = new LinkedList<>(); while (true) {原创 2021-09-17 01:24:42 · 60 阅读 · 0 评论 -
【算法】【二分查找】
No35_搜索插入位置public int searchInsert(int[] nums, int target) { int start = 0; int end = nums.length -1; while(start <= end){ int mid = start + ((end - start) >> 1); // mid >= start if(原创 2022-01-10 18:39:56 · 242 阅读 · 0 评论 -
【算法】【排序算法】【05】希尔排序
图解:https://www.runoob.com/data-structures/shell-sort.html代码实现:package _01_sort.cmp;import java.util.Arrays;public class _10_Shell { public void sort(int[] array){ for( int gap = array.length >> 1;gap >= 1; gap = gap >> 1){原创 2021-09-22 13:47:15 · 73 阅读 · 0 评论 -
【算法】【排序算法】【04】快速排序
具体思想参考 https://blog.csdn.net/weixin_43734095/article/details/105156039我的代码:package _01_sort.cmp;import _01_sort.Sort;public class _09_QuickSort<T extends Comparable<T>> extends Sort<T> { @Override protected void sort() {原创 2021-09-22 10:55:11 · 76 阅读 · 0 评论 -
【算法】【排序算法】【03】归并排序
归并排序归并排序的核心思想:将无序数组分成两份,分别对左边和右边排序;将排好序的左边和排好序的右边合并在一起;public class _08_Merge1 { public static void mergeSort(int[] arr) { mergeSort(arr, 0, arr.length - 1); } private static void mergeSort(int[] arr, int low, int high) { .原创 2021-09-18 15:10:19 · 67 阅读 · 0 评论 -
【算法】【排序算法】【02】插入排序&二分搜索
插入排序核心思想:从无序区域的第一个插入到有序区域的属于自己的位置中1. 交换插排public class _04_Insert<T extends Comparable<T>> extends Sort<T> { @Override protected void sort() { for (int end = 1; end < array.length; end++) { for(int i = e原创 2021-09-17 18:06:56 · 159 阅读 · 0 评论 -
【算法】【排序算法】【01】冒泡、选择、堆
排序01冒泡经典冒泡冒泡优化1冒泡优化2冒泡排序的复杂度和稳定性选择选择排序的复杂度和稳定性(1)前期准备参考:代码环境准备(2)空间复杂度 & 原地算法空间复杂度: 算法执行所需要的临时空间原地算法 in-place: 不依赖额外的资源或者依赖少数的额外资源,仅依靠输出来覆盖输入 空间复杂度为O(1)的可以认为是原地算法非原地算法,称为 Not-in-place 或者 Out-of-place开局一张图冒泡经典冒泡public class _01_Bub原创 2021-08-24 16:55:38 · 99 阅读 · 0 评论