
数据结构与算法
数据结构与算法
HackerLZH
Big Data,AI,WEB development,which can I make more money by? I will grasp the lifeblood of the time!
展开
-
百度之星2023——公园
回到这题本身,提供2个起始点+1个终点(假设分别为A,B,C),那么就是要再找一个结点D,使得A, B先单独到D,然后再一起到C(CD重合是一种特例),这个过程总消耗最少。那么就分别以A, B, C为起点进行三次dijkstra,得到三个最短路径数组。然后穷举图中每一个点作为D,如果D能够与A, B, C都连通,就计算一次总消耗。首先抓题目关键字,要求“最少”,那大概率就是最短路径问题。虽然这题是一个无权图,用bfs也能求最短路径,但是我们知道使用dijkstra是能够利用dist数组。原创 2025-03-10 16:43:07 · 214 阅读 · 0 评论 -
PAT甲级 1167 Cartesian Tree(30)
思路:碰到层序遍历就想到队列,也就是在区间中,先找到最小值(根结点)下标,入队。然后分别找左右子树中的根节点入队,以此类推。另外需要维护一个visited数组,作为遍历找根节点时的结束位置。原创 2025-03-04 15:01:53 · 200 阅读 · 0 评论 -
PAT甲级 1165 Block Reversing(25)
很容易想到反转链表这个经典链表题,但是本着能用数组就用数组的解题原则,就没建链表。1、通过哈希表确定结点顺序,存入数组。2、按照规则遍历数组。原创 2025-03-03 16:54:59 · 202 阅读 · 0 评论 -
PAT甲级 1175 Professional Ability Test(30)
有点复杂,考了两个知识点,拓扑排序+dijkstra,但是后三个测试点错误,目前不知道哪里错了><原创 2025-02-25 16:49:47 · 206 阅读 · 0 评论 -
PAT甲级 1173 How Many Ways to Buy a Piece of Land(25)
方法:前缀和+二分查找。原创 2025-02-20 14:48:22 · 131 阅读 · 0 评论 -
PAT甲级 1154 Vertex Coloring(25)
这道25分题闹麻了,大水题,根本不用建图+dfs,直接存边比较就行了。但是java会超时,c++可以过。原创 2025-02-19 13:08:14 · 185 阅读 · 0 评论 -
PAT甲级 1174 Left-View of Binary Tree
写的很棒,如何通过先序序列的根结点下标来计算对应左子树根结点和右子树根节点下标,从而实现递归,非常的巧妙。这道25分的题应该比很多30分的题还要难吧,不过不久前刷。,刚好做了一道中等题。原创 2025-02-17 16:35:34 · 273 阅读 · 0 评论 -
基数排序(Java实现)
基数排序是一种高级排序算法。基数排序需要进行d趟分配和收集,一趟分配需要O(n),一趟收集需要O( r ),所以基数排序的时间复杂度为O(d(n + r))原创 2022-01-13 12:22:34 · 559 阅读 · 0 评论 -
快速排序(Java实现 )
快速排序是一种高级排序算法,是内部排序中性能最好的排序算法。原创 2022-01-13 09:12:35 · 4545 阅读 · 4 评论 -
单链表(Java实现)
单链表的Java实现原创 2022-01-12 10:08:02 · 157 阅读 · 0 评论 -
归并排序(Java实现)
归并排序是一种高级排序算法,适用于外部排序,时间复杂度为O(nlogn),但是由于必须引入辅助数组,空间复杂度为O(n)原创 2022-01-11 14:36:29 · 483 阅读 · 0 评论 -
堆排序代码详解(Java实现)
堆排序是一种高级排序算法,时间复杂度为O(nlogn),空间复杂度仅为O(1),对于海量数据使用堆排序是相当高效的。原创 2022-01-11 10:55:19 · 1713 阅读 · 0 评论 -
希尔排序在三种著名增量下的时间性能比较
希尔排序是什么?希尔增量最坏时间复杂度:O(n^2)教材上都是以希尔增量为例子 => [N/2, (N/2)/2, …]void shellSort1(int[] arr){ for (int gap = arr.length / 2; gap > 0; gap /= 2){ //排序趟数 for (int i = gap; i < 2 * gap; i++) { //每趟排序组数 //每组使用直接插入排序原创 2022-01-09 17:23:07 · 783 阅读 · 0 评论 -
希尔排序(Java实现)
这里只提供代码,建议彻底弄懂直接插入排序和希尔排序思想后再来看代码。某园的一篇希尔排序图解很清晰。 //希尔排序(希尔增量)(移动式)(避免频繁交换) void shellSort(int[] arr){ for (int gap = arr.length / 2; gap > 0; gap /= 2){ //排序趟数 for (int i = gap; i < 2 * gap; i++) { //每趟排序组数原创 2022-01-09 12:19:46 · 601 阅读 · 0 评论 -
栈应用之行编辑程序(C语言)
void LineEdit(){ Stack S; InitStack(S); char ch; printf("请输入...\n"); fflush(stdout); ch = getchar();//获取输入字符 while (ch != EOF){ while (ch != EOF && ch != '\n'){ ELEMTYPE e; switch (ch){ case '#': if (StackEmpty(S)){//栈空时不能退格原创 2021-03-31 20:21:55 · 1164 阅读 · 0 评论 -
栈应用之汉诺塔问题(C语言)
描述在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:每次只能移动一个盘子;盘子只能从柱子顶端滑出移到下一根柱子;盘子只能叠在比它大的盘子上。核心思想栈 + 分冶(=>递归)代码//A中只剩一个元素时,从A移到Cvoid AtoC(Stack &A, Stack &C, ELEMTYPE &e){ Po原创 2021-03-30 21:49:43 · 1512 阅读 · 0 评论 -
栈应用之括号匹配(C语言)
条件给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。代码void bracketmatch(){ char *str = (char*)malloc(sizeof(char)*10); printf("请输入要匹配的括号组:"); fflush(stdout);//清空输出缓冲区(否则我上面打印不出来) scanf("%s", str); int le原创 2021-03-30 20:17:42 · 577 阅读 · 0 评论 -
单链表应用之一元多项式相加(C语言)
实际上一元多项式的数据结构仍然是一条单链表,不过是此时的每个结点代表多项式的每一项,结点的数据域被细分成了系数域和指数域。而多项式相加的操作就相当于有序单链表的归并操作。代码:#include <stdio.h>#include <stdlib.h>typedef struct{//项的类型(数据域) float coef;//系数 int expn;//指数} Data;typedef struct node {//链表(一元多项式)类型 Data data;原创 2021-03-29 20:15:27 · 2588 阅读 · 1 评论 -
通过尾指针合并俩循环链表(C语言)
#include <stdio.h>#include <stdlib.h>#include <ctime>typedef struct node{ int data; struct node *next, *rear;//直接给结点开辟尾指针域,但是只有头结点真正使用了}node, *CircularList;int random(int min, int max);//生成随机数void InitList(CircularList &C);/原创 2021-03-28 19:36:01 · 787 阅读 · 0 评论 -
通过双向链表找前驱的方法计算一定范围的随机整数出现的比例,探索C语言rand()的性能
代码#define MAXSIZE 1000int random(int min, int max){ return rand() % (max - min + 1) + min;}void randNumPercent(LinkedList L){ srand((unsigned int)time(NULL)); int *a = (int*)malloc(sizeof(int)*MAXSIZE); for (int j = 0; j < MAXSIZE; j++){ int原创 2021-03-24 14:19:31 · 179 阅读 · 0 评论 -
反转单链表(C语言实现)
必要性:单链表是一种数据结构,反转单链表问题经常会出现在面试当中,所以我们一定要掌握!代码:typedef struct node { int data; int length; struct node* next;} node, *LinkList;void reverse(LinkList &L){//L是头节点 if(L->next == NULL) printf("链表为空,不能反转!\n"); else if (L->next->next == N原创 2021-03-23 21:37:29 · 690 阅读 · 0 评论