算法基础
文章平均质量分 59
刷题基础
给自己加加油
这个作者很懒,什么都没留下…
展开
-
高频刷题一
题目1给定数组hard和money,长度都为N,hard[i]表示i号的难度, money[i]表示i号工作的收入。给定数组ability,长度都为M, ability[j]表示j号人的能力,每一号工作,都可以提供无数的岗位,难度和收入都一样,但是人的能力必须>=这份工作的难度,才能上班返回一个长度为M的数组ans,ans[j]表示j号人能获得的最好收入数组hard: [7, 1, 1, 3]数组money: [13, 5, 9, 6]将hard和money按...原创 2021-07-28 22:09:57 · 310 阅读 · 0 评论 -
算法基础之暴力递归到动态规划
一斐波那契数列:public class Fibonacci { public static int f(int n) { if (n == 1) { return 1; } if (n == 2) { return 1; } return f(n - 1) + f(n - 2); }}中间存在大量的重复过程:可以缓存起来 public原创 2021-07-18 22:28:53 · 188 阅读 · 0 评论 -
算法基础之线段数
对于数组arr,做如下操作1.对L到R区间的数都加Vadd(L, R, V, arr)2.对L到R区间的数都修改为Vupdate(L, R, V, arr)3.查询L到R区间的数字的和add(L, R, arr)方法一:暴力破解public class BruteForce { public int[] arr; public BruteForce(int[] origin) { arr = new int[origin.length原创 2021-06-30 23:01:23 · 418 阅读 · 2 评论 -
算法基础之递归
暴力递归暴力递归原创 2021-06-14 22:14:59 · 125 阅读 · 0 评论 -
算法基础三之链表、栈、队列、递归
链表单向链表单向链表节点结构(可以实现成泛型)public class Node<T> { public T value; public Node next; public Node(T value) { this.value = value; }}双向链表public class DoubleNode { public int value; public DoubleNode pre; publ原创 2021-05-23 23:34:13 · 145 阅读 · 0 评论 -
算法基础二之二分法与异或运算
时间复杂度待补充原创 2021-02-24 22:48:36 · 225 阅读 · 0 评论 -
刷题篇一:单调栈和窗口及其更新结构
滑动窗口是什么?滑动窗口是一种想象出来的数据结构:滑动窗口有左边界L和右边界R在数组或者字符串或者一个序列上,记为S,窗口就是S[L..R]这一部分L往右滑意味着一个样本从左侧出了窗口,R往右滑意味一个样本进了窗口L和R都只能往右滑并且L<=R...原创 2021-02-06 22:28:42 · 106 阅读 · 0 评论 -
前缀树
1)单个字符串中,字符从前到后的加到一颗多叉树上2)字符放在路上,节点上有专属的数据项(常见的是pass和end值)3)所有样本都这样添加,如果没有路就新建,如有路就复用4)沿途节点的pass值增加1,每个字符串结束时来到的节点end值增加1可以完成前缀相关的查询...原创 2020-12-27 22:35:59 · 91 阅读 · 0 评论 -
堆
堆堆结构就是用数组实现的完全二叉树结构完全二叉树中如果每棵子树的最大值都在顶部就是大跟堆完全二叉树中如果每棵子树的最小值都在顶部就是小根堆以0开始左孩子:2 * i + 1右孩子:2 * i + 2父 (i - 1) / 2另外一种表示:下标为0弃掉 方便使用位运算左孩子2 * i 》》》》》对应的位运算 i<<1右孩子2 * i + 1 》》》》》对应的位运算 i<<1 | 1父 i/2 ...原创 2020-12-16 22:29:55 · 115 阅读 · 0 评论 -
快速排序
快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。算法描述快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:从数列中挑出一个元素,称为 “基准”(pivot); 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(par原创 2020-12-13 15:06:17 · 142 阅读 · 0 评论 -
leetcode刷题前置知识总结
认识二分法:1)在一个有序数组中,找某个数是否存在2)在一个有序数组中,找>=某个数最左侧的位置3)在一个有序数组中,找<=某个数最右侧的位置4)局部最小值问题查找一个数是否存在:package com.zy.class001;public class Code04_BSExist { public static void main(String[] args) { int[] arr = {1, 2, 4, 6, 10, 20, 21, 3原创 2020-09-19 22:43:53 · 461 阅读 · 0 评论 -
数据结构与算法-树与二叉树
树的基本概念二叉树是一种能够将链表插入的灵活性和有序数组查找的高效性结合起来的一种数据结构。基本术语Edge、Root、LeafPathHeight需要注意的是叶子节点的高度为0,如果树只有一个节点,那么这个节点的高也是0Depth需要注意的是根节点的深度(Depth)是0.从Height和Depth的对比,它们的方向刚好是相反的。Level...原创 2020-03-01 17:04:54 · 247 阅读 · 0 评论 -
算法基础一之排序算法
一、排序算法概述1、定义将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。2、分类十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。 线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,...转载 2019-12-08 16:37:23 · 393 阅读 · 0 评论