算法与数据结构
算法与数据结构
Do1phln
医学(病理学)人工智能PhD,曾经是CTFer
展开
-
【算法模板】快速排序模板
快排模板原创 2022-08-30 11:43:01 · 122 阅读 · 0 评论 -
【每日一题】AcWing 1904. 奶牛慢跑
题目奶牛们又出去锻炼蹄子去了!有 N头奶牛在无限长的单行道上慢跑。每头奶牛在跑道上开始奔跑的位置互不相同,一些奶牛的奔跑速度可能相同,也可能不同。由于跑道是单行道,十分狭窄,奶牛们无法相互超越。当一头速度很快的牛追上另一头牛时,她必须减速至与另一头牛速度相同以免发生碰撞,并成为同一跑步小组的一员。此时,两头牛可以视为在同一点上。最终,再也没有奶牛会撞到(追上)其他奶牛了。约翰想知道在这种情况下,会剩下多少个跑步小组。输入格式第一行包含整数 N接下来 N行,每行包含一头奶牛的初始位置和跑步速度。所有原创 2022-01-21 22:01:34 · 621 阅读 · 0 评论 -
【每日一题】LeetCode 1576.替换所有的问号
题目给你一个仅包含小写英文字母和 ‘?’ 字符的字符串 s,请你将所有的 ‘?’ 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。注意:你 不能 修改非 ‘?’ 字符。题目测试用例保证 除 ‘?’ 字符 之外,不存在连续重复的字符。在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。示例输入:s = “?zs”输出:“azs”解释:该示例共有 25 种解决方案,从 “azs” 到 “yzs”原创 2022-01-05 17:04:51 · 169 阅读 · 0 评论 -
【每日一题】LeetCode 913.猫和老鼠(hard题)
题目两位玩家分别扮演猫和老鼠,在一张 无向 图上进行游戏,两人轮流行动。图的形式是:graph[a] 是一个列表,由满足 ab 是图中的一条边的所有节点 b 组成。老鼠从节点 1 开始,第一个出发;猫从节点 2 开始,第二个出发。在节点 0 处有一个洞。在每个玩家的行动中,他们 必须 沿着图中与所在当前位置连通的一条边移动。例如,如果老鼠在节点 1 ,那么它必须移动到 graph[1] 中的任一节点。此外,猫无法移动到洞中(节点 0)。然后,游戏在出现以下三种情形之一时结束:如果猫和老鼠出现在原创 2022-01-04 22:58:05 · 240 阅读 · 0 评论 -
【python应用】干草堆(差分)
题目贝茜对她最近在农场周围造成的一切恶作剧感到抱歉,她同意帮助农夫约翰把一批新到的干草捆堆起来。开始时,共有 N 个空干草堆,编号 1∼N。约翰给贝茜下达了 K 个指令,每条指令的格式为 A B,这意味着贝茜要在 A…B 范围内的每个干草堆的顶部添加一个新的干草捆。例如,如果贝茜收到指令 10 13,则她应在干草堆 10,11,12,13 中各添加一个干草捆。在贝茜完成了所有指令后,约翰想知道 N 个干草堆的中值高度——也就是说,如果干草堆按照高度从小到大排列,位于中间的干草堆的高度。方便起见,原创 2022-01-03 12:17:59 · 679 阅读 · 0 评论 -
【python练习】排列
题目给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数 n。输出格式按字典序输出所有排列方案,每个方案占一行。代码n=int(input())path=[0 for i in range(n)]used=[False for i in range(n)]def dfs(u): if u==n: for i in range(n): print(path原创 2022-01-03 11:29:32 · 711 阅读 · 0 评论 -
【每日一题】LeetCode 390. 消除游戏
题目列表 arr 由在范围 [1, n] 中的所有整数组成,并按严格递增排序。请你对 arr 应用下述算法:从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾。重复上面的步骤,但这次是从右到左。也就是,删除最右侧的数字,然后剩下的数字每隔一个删除一个。不断重复这两步,从左到右和从右到左交替进行,直到只剩下一个数字。给你整数 n ,返回 arr 最后剩下的数字。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/eliminat原创 2022-01-02 23:23:21 · 5914 阅读 · 0 评论 -
【每日一题】LeetCode 2022.将一维数组转变成二维数组
题目给你一个下标从 0 开始的一维整数数组 original 和两个整数 m 和 n 。你需要使用 original 中 所有 元素创建一个 m 行 n 列的二维数组。original 中下标从 0 到 n - 1 (都 包含 )的元素构成二维数组的第一行,下标从 n 到 2 * n - 1 (都 包含 )的元素构成二维数组的第二行,依此类推。请你根据上述过程返回一个 m x n 的二维数组。如果无法构成这样的二维数组,请你返回一个空的二维数组。示例输入:original = [1,2,3,原创 2022-01-01 21:17:06 · 166 阅读 · 0 评论 -
【每日一题】LeetCode 507.完美数
题目对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。给定一个 整数 n, 如果是完美数,返回 true,否则返回 false样例输入:num = 28输出:true解释:28 = 1 + 2 + 4 + 7 + 141, 2, 4, 7, 和 14 是 28 的所有正因子。代码class Solution: def checkPerfectNumber(self, num: int) -> bool: if num原创 2021-12-31 16:30:27 · 307 阅读 · 0 评论 -
【每日一题】LeetCode 786. 第K个最小的素数分数(待补全题解思路)
题目给你一个按递增顺序排序的数组 arr 和一个整数 k 。数组 arr 由 1 和若干 素数 组成,且其中所有整数互不相同。对于每对满足 0 < i < j < arr.length 的 i 和 j ,可以得到分数 arr[i] / arr[j] 。那么第 k 个最小的分数是多少呢? 以长度为 2 的整数数组返回你的答案, 这里 answer[0] == arr[i] 且 answer[1] == arr[j] 。输入:arr = [1,2,3,5], k = 3输出:[原创 2021-11-29 09:06:19 · 392 阅读 · 2 评论 -
【每日一题】LeetCode 438.找到字符串中所有字母异位词
题目给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。输入: s = “cbaebabacd”, p = “abc”输出: [0,6]解释:起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。代码class Solution {public: vector<i原创 2021-11-28 17:00:02 · 142 阅读 · 0 评论 -
【每日一题】LeetCode 458. 可怜的小猪(思路清奇)
题目有 buckets 桶液体,其中 正好 有一桶含有毒药,其余装的都是水。它们从外观看起来都一样。为了弄清楚哪只水桶含有毒药,你可以喂一些猪喝,通过观察猪是否会死进行判断。不幸的是,你只有 minutesToTest 分钟时间来确定哪桶液体是有毒的。喂猪的规则如下:选择若干活猪进行喂养可以允许小猪同时饮用任意数量的桶中的水,并且该过程不需要时间。小猪喝完水后,必须有 minutesToDie 分钟的冷却时间。在这段时间里,你只能观察,而不允许继续喂猪。过了 minutesToDie 分钟后,所原创 2021-11-25 17:25:03 · 179 阅读 · 0 评论 -
【NEFU】数据结构阶段二机试代码
个人拙见,难免有不足之处,望大佬们斧正P1#define MAXNODE 64#include <stdio.h>#include <stdlib.h>typedef struct Node //边的信息{ int adjvex; struct Node *next;}ArcNode;typedef struct VNode //顶点的信息{ int data; ArcNode *firstarc;}VexNode;原创 2021-11-25 17:19:40 · 338 阅读 · 0 评论 -
【每日一题】LeetCode 423.从英文中重建数字
题目给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。输入:s = “owoztneoer”输出:“012”输入:s = “fviefuro”输出:“45”代码class Solution {public: string originalDigits(string s) { string name[] = { "zero", "one", "two", "three", "four",原创 2021-11-24 17:59:15 · 272 阅读 · 0 评论 -
【数据结构】图的基本操作
#include<iostream>#include<cstdio>#include<stack>#include<queue>#include<cstring>const int MAX_SUM=110;using namespace std;typedef struct ArcNode{ int adj; struct ArcNode *nextarc;}ArcNode;typedef struct原创 2021-11-23 21:15:39 · 458 阅读 · 0 评论 -
【数据结构】树结构常用操作
#include<iostream>#include<cstdio>#include<stack>#include<queue>using namespace std;const int MAX_SUM=110;typedef struct BinNode{ char data; struct BinNode *left, *right;}BinNode, *BinTree;void CreateBTree(BinTr原创 2021-11-23 20:21:50 · 439 阅读 · 1 评论 -
【每日一题】LeetCode 859. 亲密字符串
题目描述给你两个字符串 s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回 true ;否则返回 false 。交换字母的定义是:取两个下标 i 和 j (下标从 0 开始)且满足 i != j ,接着交换 s[i] 和 s[j] 处的字符。例如,在 “abcd” 中交换下标 0 和下标 2 的元素可以生成 “cbad” 。代码class Solution {public: bool buddyStrings(string a, string原创 2021-11-23 10:58:55 · 498 阅读 · 0 评论 -
【每日一题】LeetCode 559. N叉树的最大深度
题目描述给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。例如:输入:root = [1,null,3,2,4,null,5,6]输出:3代码/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {}原创 2021-11-21 20:56:55 · 339 阅读 · 0 评论 -
快速排序模板
思路快排基本思路应该就是二分+递归,从两侧同时(实则先从右往左)往中间找,同时和参变量对比,发现位置颠倒后交换位置,然后通过二分将其一块一块的分割开,直到分割到一个元素位置,即完成了快排。代码#include<bits/stdc++.h>using namespace std;int a[101],n;void quicksort(int left,int right){ int i,j,t,temp;//temp存基准数 if(left>right) retu原创 2021-11-05 14:45:53 · 276 阅读 · 0 评论 -
一道有点意思的指针理解题目
具体有意思在哪里,诸君可以自行分析一下删除节点的操作~#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef struct node{ node *next; int data;}LNode, *LinkList;void CreateList(LNode *L,int x){ LNode *r=L, *p; int tmp; for(int i=0;i<x;i++) {原创 2021-11-01 20:08:47 · 171 阅读 · 0 评论 -
第十六届蓝桥杯-JavaA组T.H奇偶覆盖
线段树初步版本,未完善#include<bits/stdc++.h>using namespace std;const int N=1e5+5;struct node{ int l,r,h; bool operator< (const node& a)const { return h<a.h; }}e[N*2];int a[N*2];int sum[N*2*4],flag[N*2*4];void ca原创 2021-10-27 19:21:52 · 214 阅读 · 0 评论 -
【每日一题】LeetCode 401.二进制手表(二进制知识的复习)
题目二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。例如,下面的二进制手表读取 “3:25” 。给你一个整数 turnedOn ,表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。你可以 按任意顺序 返回答案。小时不会以零开头:例如,“01:00” 是无效的时间,正确的写法应该是 “1:00” 。分钟必须由两位数组成,可能会以零开头:例如,“10:2” 是无效的时间原创 2021-10-27 18:25:16 · 200 阅读 · 0 评论 -
数据结构-KMP算法的研究
KMP是什么在计算机科学中,Knuth-Morris-Pratt字符串查找算法(简称为KMP算法)可在一个字符串S内查找一个词W的出现位置。一个词在不匹配时本身就包含足够的信息来确定下一个匹配可能的开始位置,此算法利用这一特性以避免重新检查先前配对的字符。这个算法由高德纳和沃恩·普拉特在1974年构思,同年詹姆斯·H·莫里斯也独立地设计出该算法,最终三人于1977年联合发表。——wikiKMP匹配的原理是什么在两个串匹配的过程中,当前一段匹配都相符合的时候,下一个元素匹配失败(两个串的指针分别原创 2021-10-25 12:06:23 · 130 阅读 · 0 评论