
数据结构与算法
文章平均质量分 76
qmys
这个作者很懒,什么都没留下…
展开
-
Acwing算法基础1——快排 归并 二分 前缀和 差分 双指针 位运算 离散化 区间和
文章目录1、快排----分治2、归并——分治3、二分法4、高精度(C++)5、前缀和(一维、二维)6、差分(一维、二维)背过+题目+重复3~52021.9.111、快排----分治主要思想:1.确定分界点:q[l] q[(l+r)/2] q[r] 随机2.调整范围:<x放左边,>x放右边3.递归:处理左右两端难点:划分快排不稳定,如何变得稳定?将一维数值变成二维的,这样每个数值都不一样,就是稳定的。–><a,i>边界问题:模板代码思想:两指针同时原创 2021-09-15 17:08:44 · 431 阅读 · 0 评论 -
Acwing单调栈
1 题目描述2 思路1.用一个栈保存当前元素以前的序列,栈用一个数组来表示2.栈中序列是单调递增的 当i<=j a[i]>=a[j]时,delete(a[i]) 保证剩余的序列一定是单调的3 代码package chapter02;import java.io.IOException;import java.util.Scanner;/** * @author mys * @date 2022/3/21 17:44 */public class p830 {原创 2022-03-21 21:53:37 · 904 阅读 · 0 评论 -
Acwing动态规划1——背包问题
文章目录1.0 1背包——每件物品最都只能用一次2.完全背包——每件物品可以用无限次3.多重背包——优化问题4.分组背包常用模型:背包背包模型区别状态方程01背包每件物品最多只能用一次f[i][j] = max(f[i-1, j], f[i-1, j-v] + w)完全背包每件物品可以用无限次f[i][j] = max(f[i-1, j], f[i, j-v] + w)多重背包优化问题分组背包n组物品,每组m种类型,只能从每组中选一个1.0原创 2022-02-18 19:04:02 · 558 阅读 · 0 评论 -
Acwing动态规划3——其他DP类
文章目录1、区间DP2、计数类DP3、数位统计DP4、状态压缩DP5、树形DP6、记忆化搜索1、区间DP石子合并1.题目描述2.思路注意:每次合并的是相邻的两堆3.代码package chapter05.src;import java.util.Scanner;/** * @author mys * @date 2022/3/25 15:54 */public class p282 { static int N = 310; public static v原创 2022-03-25 17:01:57 · 557 阅读 · 0 评论 -
Acwing动态规划2——线性DP
1、数字三角形题目链接1.题目描述2.思路分析方法:闫氏DP分析时间复杂度:遍历二维O(n^2),求最大值O(1) => O(n^2)3.代码package chapter05.src;import java.util.Scanner;/** * @author mys * @date 2022/3/22 18:23 */public class p898 { static int N = 510; public static void main原创 2022-03-22 21:34:19 · 463 阅读 · 0 评论 -
算法初级(三)—— 二叉树
文章目录1、二叉树的遍历(递归/非递归)1、二叉树的遍历(递归/非递归)递归public static void preOrderRecur(Node head) { if (head == null) { return; } System.out.print(head.value + " "); pre...原创 2019-11-18 21:28:18 · 385 阅读 · 0 评论 -
算法初级(二)—— 数组、栈、队列、链表相关题目
文章目录1、数组与栈和队列之间的转换2、栈与队列的转换3、猫狗队列4、打印旋转90°后的数组5、转圈打印6、单链表和双链表转置7、之字形打印8、在一个行列排好序的数组中找数9、打印两链表公共部分1、数组与栈和队列之间的转换将数组转换成栈及其一些基本操作public static class ArrayStack { private Integer[] arr; ...原创 2019-11-13 20:01:43 · 398 阅读 · 0 评论 -
两个单链表相交的一系列问题
两个单链表相交的一系列问题【题目】 单链表可能有环,也可能无环。给定两个单链表的头节点 head1和head2,这两个链表可能相交,也可能不相交。请实现一个函数, 如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null 即可。要求:如果链表1的长度为N,链表2的长度为M,时间复杂度请达到 O(N+M),额外空间复杂度请达到O(1)。解题步骤1、判断链表是否有环2、判断链表是否...原创 2019-11-10 20:05:42 · 141 阅读 · 0 评论 -
算法初级(一)—— 排序详解
文章目录对数器对数器一个想要测试的方法a实现一个绝对正确但复杂度不好的方法b实现一个随机样本产生器实现比对方法a b 比对多次,验证a是否正确如果有样本出错,打印样本分析哪个方法出错当样本数量很多时比对测试依然正确,确定方法a正确...原创 2019-11-03 13:08:59 · 249 阅读 · 0 评论 -
二分法查找
二分查找:思路很简单,细节是魔鬼!“传统的”二分查找法模板的问题(1)取中位数索引的代码有问题int mid = (left + right) / 2 在 left 和 right 都比较大的时候,left + right 很有可能超过 int 类型能表示的最大值,即整型溢出,为了避免这个问题,应该写成:int mid = left + (right - left) / 2 ;or...原创 2019-08-10 18:17:18 · 3381 阅读 · 1 评论 -
数据结构与算法之美笔记梳理四 —— 链表(下)
技巧⼀:理解指针或引⽤的含义p->next=q p结点中的next指针存储了q结点的内存地址技巧⼆:警惕指针丢失和内存泄漏技巧三:利⽤哨兵简化实现难度head指针会⼀直指向这个哨兵结点。我们也把这种有哨兵结点的链表叫带头链表。相反,没有哨兵结点的链表就叫作不带头链表哨兵结点是不存储数据的,因为哨兵结点⼀直存在,所以插⼊第⼀个结点和插⼊其他结点,删除最后⼀个结点和删除其他结点...原创 2019-07-06 13:14:15 · 185 阅读 · 0 评论 -
数据结构与算法之美笔记梳理二 —— 数组
文章目录一、提出问题二、数组概述三、数组操作四、注意问题五、代码实现一、提出问题为什么数组要从0开始编号,而不是从1开始呢?从1开始不是更符合人类的思维习惯吗?如何实现随机访问?二、数组概述数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据关键词理解线性表线性表就是数据排成像一条线一样的结构,每个线性表上的数据最多只有前和后两个方向,其实...原创 2019-05-15 21:22:54 · 194 阅读 · 0 评论 -
数据结构与算法之美笔记梳理一 ——复杂度分析
文章目录一、什么是数据结构?什么是算法?二、复杂度分析三、涵盖内容四、学习方法五、时间、空间复杂度分析六、最好、最坏、平均、均摊时间复杂度一、什么是数据结构?什么是算法?从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法从狭义上讲,指某些著名的数据结构和算法,比如队列、栈、堆、二分查找、动态规划等数据结构是为算法服务的,算法要作用在特定的数据结构之上二、复杂度分...原创 2019-05-14 21:43:25 · 349 阅读 · 0 评论 -
数据结构之链表
数据结构之链表不在头节点的链表操作public class LinkedList<E> {//内部类,结点private class Node{ //定义成员变量 public E e; public Node next; /** * 构造函数 */ public Node(E e,Node next){ ...原创 2018-11-02 22:04:02 · 213 阅读 · 0 评论 -
数据结构之数组java
数据结构之数组Array一些操作函数://自定义一个E型的泛型数组public class Array<E> {private E data[];private int size;/** * 构造函数 * @param capacity 传入数组容量 */public Array(int capacity){ data=(E[])new Object[c...原创 2018-11-02 21:43:58 · 125 阅读 · 0 评论 -
数据结构(二)-----顺序表操作
数据结构(二)—–顺序表操作/*作者:mys功能:顺序表的操作:初始化、显示、插入、删除、取元素日期:2018/7/25*/#include&amp;amp;lt;stdio.h&amp;amp;gt;#include&amp;amp;lt;malloc.h&amp;amp;gt;//结构体struct seqList{ int data[100]; int length;};//初始化顺序表st原创 2018-07-25 10:35:43 · 366 阅读 · 0 评论 -
数据结构(一)-----4种方法求最大子列和
数据结构(一)—–4种方法求最大子列和1、暴力算法/*作者:mys功能:求最大子列和日期:2018/7/23*/#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#define N 1000int maxSubseSum(int a[], int n);void main(){ int a[N] = { 0 },i...原创 2018-07-23 11:08:39 · 1596 阅读 · 1 评论