自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 收藏
  • 关注

原创 计算机操作系统

操作系统

2023-09-11 22:28:44 417

原创 力扣题目-Z字形变幻(数学规律法、hash法,c++,python,Java实现)

题目:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入: s =

2020-06-27 15:46:28 314

原创 力扣题目-无重复字符的最长子串(C++,python,java)

题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 :输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。C++1.滑动窗口(双指针法)+hash一开始联想到kmp,然后发现实际还是双指针法的运用,最后看题解这也叫滑动窗口,确实和计网中的滑动窗口挺像思路是从开始记录两个指针,第一个指针表示从它开始的最长子串长度,第二个通过移动对比前面是否出现过该字符来记录最长长度(利用hash思想),len=后-前+1;其实题

2020-06-23 10:09:43 250

原创 力扣题目-两数相加(迭代递归,常用3种语言实现)

题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807C++1.迭代:直接从最低位开始模拟两个数相加,时间复杂

2020-06-22 15:58:07 422

原创 力扣题目-两数字和(三种解法,C++,java,python实现)

题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]这里学习的主要是方法,之所以再用python、java实现,是因为我最近在学习这两门语言,希望在此基础是得到巩固。C++1.

2020-06-21 10:20:21 265

原创 笔试押题之动态规划

动态规划有两个重要因素:最优子结构和重叠子问题。一般求解步骤:证明最优子结构性,写出状态方程,自底向上求解,重构解。下面就我遇到的题目进行总结1.一维dp[]问题汇总a.最大连续子序列和以dp[i]表示第i个数字结尾的最大连续子序列和。看dp[i]和dp[i-1]的关系如果dp[i-1]>0,显然dp[i]=A[i]+dp[i-1],反之dp[i]=A[i]b.最长不下降子序列以dp[i]表示以i结尾的最长不下降子序列长度。dp[i]的关系是和前面的dp[1…i-1]均有关系,不能仅由

2020-05-09 11:13:11 180

原创 算分导论上的伪代码要求

先前总结的规则可以参照两种进行伪代码的书写,主要是利用后者的参数赋值和前面结合吧。

2020-05-07 15:58:06 101

原创 数据结构各种排序算法的温习

首先分门别类介绍各种算法的实现,最后汇总比较一下排序算法1.插入排序直接插入排序A[1…n],从i=2开始,一个一个找,找到A[i]在A[1…i-1]已排序好的位置排序所以排n-1趟最好O(n),一般是O(n²)折半插入排序区别在于,找位置的时候用了二分法,但是注意查找快了,放入数据后的移动次数没有改变所以还是O(n²)希尔排序区别在于每次分组进行直接插入排序,直到只分为一组。...

2020-05-07 09:19:48 132

原创 2015年华科834复试笔试题

答:一、1.最优子结构,重叠子问题2.算法在最坏情况下的平均运行时间(模糊)3.类似于锦标赛算法,比较log2n向上取整次4.遗忘知识点:各类排序算法比较5.渐进紧确界,上界函数,下界函数6.明白BFS的实现方式即可7.0/1背包问题:动态规划8.回溯法和分支限界法的区别在于状态空间树的构造方式不一样,一个是深度优先,一个是广度优先二、floyd算法:关键...

2020-05-06 15:05:11 217

原创 对于2016年笔试题的反思

1.最短路径问题:最短路径我们常识的是Dijkstra、Bellman-Ford,SPFA、 Floyd、Johnson算法,下面主要讲解其原理和差距。在这之前,我们认识一下松弛操作。松弛操作:首先测试一下是否可以对从s到v的最短路径进行改善(即有没有更短的路径)。如果可以改善,则v.d更新为新的最短路径估计值,v的前驱v.π更新为新的前驱结点。对于松弛操作过程有如上的性质。1.Bel...

2020-05-06 12:28:50 158

原创 2016年华科834复试笔试题

答:一1.上界函数:一个算法时间复杂度的紧确上界2.最优性原因:原问题的最优解包含子问题的最优解3.分治法:将一个问题划分为规模更小,互不重叠的子问题求解的方法二1.01背包问题:动态规划,分支限界,回溯法等2.最优二分检索树问题:动态规划3.深度优先数:未知知识点三Floyd算法寻找最短路径过程动态规划: d[i][j](k)表示考虑前k个结点的所有松弛操作有些遗忘的知...

2020-05-05 17:34:38 333 1

原创 华科2018年笔试题大概

数据库:1.画E-R图3个重点:属性,实体、联系2.判断一个函数依赖是否存在如果x->y,则求x的闭包,看里面是否包含y具体步骤:找出F中左部属于X的部分,将其右部加入X,如此循环直至X=U或者不发生改变即可。3.SQL语句多练习4.关系代数表达式如果是第二章内容,记住选择、投影、连接、笛卡尔积符号以及连接、除用基本运算表示。如果是第九章内容,记下几个优化规则:先选择再...

2020-05-05 15:25:14 268

原创 回溯法与分枝—限界法的区别以及分支限界法分类以及LC学习

区别首先理解什么是状态空间树。状态空间树:是指解空间的树结构在状态空间树生成过程中有3类结点:活结点、E-结点、死结点而回溯法与分支限界法的区别主要在于:构造状态空间树的过程不一样。回溯法是利用深度优先搜索构造,分支限界法是用广度优先搜索构造。分类接下来了解分支限界法。可以利用队列或栈来导出分支限界法,所以依次分支限界法可以分为:FIFO(队列)检索、LIFO(栈)检索但两种扩...

2020-05-05 10:49:20 7435

原创 SQL 50题刷题记录

上诉为数据表答:1select * from student right join (select t1.sid,class1,class2 from(select sid,score as class1 from sc where cid=‘01’)as t1,(select sid,score as class2 from sc where cid=‘02’)as t2whe...

2020-05-04 19:37:41 354

原创 贪心算法的证明题

贪心算法的证明一般是比动态规划要复杂。原因是贪心算法的证明有两个,一个是最优子结构,另外一个是贪心选择性质。贪心选择性质: 可以通过局部最优选择来构造全局最优解证明:一般考虑某个子问题的最优解,然后考虑用一个贪心选择替换其中某个选择,修改此解,导出更小子问题。最优子结构同动态规划,而且其实一般也不是特别需要证明,关键还是在证明问题具有贪心选择性质,下面是尝试证明。1.活动选择问题贪心...

2020-05-04 10:20:00 3454

原创 动态规划的证明题

动态规划一般用来解决最优解问题,且一般要求这样的问题具有最优子结构和重叠子问题。证明一个动态规划问题的成立往往在于求证其具有最优子结构:该问题的最优解包含子问题的最优解。最优子结构的证明步骤:做出选择,划分子问题,假设该问题最优解成立,而子问题的解不是最优解,反证,利用子问题的最优解推出与该问题最优解矛盾,得证。下面请看几个实例证明:1.钢条切割问题证明:我们不妨选择n英寸长的最优解...

2020-05-03 11:07:36 2631

原创 绪论以及递归式上界函数的证明

循环不变式循环不变式主要用来证明算法的正确性。其定义是:第一次进入循环前成立,之后每次循环还成立的关系。证明其大概分为下面三个过程:初始:进入循环前成立保持:每次循环之后成立终止:循环能在有限次结束总结前两步类似于数学归纳法,第三步保证有穷性。限界函数相关3个符号,渐进紧确界、上界函数、下界函数。如何求解递归式的限界函数?代换法:这里值得注意的是带入那一步,是后续推导的...

2020-05-03 09:30:16 598

原创 算法设计初步之贪心算法

理论知识贪心算法是指是这样一种方法,分步骤实施,它在每一步仅作出当时看起来最佳的选择,即局部最优的选择,希望这样的选择能导致全局最优解。在贪心算法的每一步所做的局部最优选择就叫做贪心选择。其中贪心算法中贪心选择性质和最优子结构性是两个关键要素!贪心选择性质:即是可以通过贪心选择来构造全局最优解最优子结构性质上文已述。贪心求解一般有下面几个步骤做出贪心选择,用反证法假设当前步骤不是最优,...

2020-04-09 16:43:29 222

原创 算法设计初步之动态规划

理论知识动态规划通常用来求解最优化问题。最优化问题:这类问题的解可能有多个,每一个解对应一个值,我们希望寻找具有最优值的一个解。适用于动态规划求解对最优子问题一般有两个要素:最优子结构和重叠子问题。最优子结构是指:一个问题的最优解包含子问题的最优解;重叠子问题是指:问题的递归算法会反复求解相同的子问题这里有一个要点,如何证明一个问题具有最优子结构性质?我们采用复制—粘贴法:一般用反证法...

2020-04-08 19:57:36 429

原创 C++文件操作

2019年华科考了一道文件操作题,所以在这里补充一下相关知识。文件操作头文件<fstream>,可读可写,定义好头文件好之后对文件的操作需要打开对应文件。fstream f;f.open("abc.cpp",ios::in);上面是打开文件的一般流程,第一句是定义文件指针,第二句的open第一个参数是文件名,第二个参数是控制文件的读写情况,此时成功即返回文件指针,f就与abc...

2020-03-25 11:33:18 211

原创 2019年华科834计算机机试题

第一题 关于梅森素数。所谓梅森数,是指形如2^p-1的一类数,其中指数p是素数,常记为M(p)。如果p是素数的同时,梅森数(即2^p-1)也是素数,就称这个梅森数为梅森素数。输入一个长整型数n,输出不大于它的所有梅森素数。例:输入:1000输出:M(2)=3M(3)=7M(5)=31M(7)=127分析:写一个判断一个数是不是素数的函数调用即可#include<i...

2020-03-21 10:53:17 465

原创 华科834计算机2016年机试题

分析:这题比较简单,由于题目没有说去掉一个最高和最低,我就都去掉了,要保留一位小数用printf吧#include<iostream>#include<algorithm>using namespace std;int main(){ int a[7]; for(int i=0;i<7;i++) scanf("%d",&a[i]); so...

2020-03-21 09:48:34 220 1

原创 字符串匹配——kmp算法

在文本串(text)中找模式串(pattern)时,如果用暴力查找基本是时间复杂度是(n*m),以i,j分别标志文本串、模式串当前匹配位置,如果text[i]和pattern[j]不等,pattern就要从头比较,实际上模式串的j前面的已经匹配好了,这样就比较浪费信息。如果j的前几位和pattern开头的前几位相同,那这几位可以不用再比较,而kmp算法正是应用了这个特性,找到pattern当前j...

2020-03-20 10:52:55 99

原创 华科2017年计算机学院机试题(c++)

分析:直接记录字符对应数字进行输入输出#include<iostream>using namespace std;int main(){ char c; cin>>c; if('A'<=c&&c<='Z'){ int n=c-'A'; for(int i=0;i<=n;i++) { for(int j=0...

2020-03-20 09:57:11 364

原创 2018年华科计算机学院机试题

从键盘输入一行英文句子,句子中只有英文单词和空格,每个单词之间由若干个空格隔开,英文单词由大小写字母组成,编程完成下列任务:(1)统计并输出此句子中英文字母的个数; (10 分)(2)统计并输出此句子中单词的个数; (10 分)(3)查找此句子中出现次数最多的字母(不区分大小写,大小写字母是相同的)和次数。当出现最多的字符不止一个时,都能找到,并输出找到的所有字母及次数。(输出字母时大小...

2020-03-19 17:28:02 448

原创 动态规划

动态规划是一种用来解决最优化问题的算法思想,其会记录下子问题的最优解,综合子问题的最优解得到最优解。上面有两个关键,划分子问题和记录子问题,其中划分子问题有一个重要的状态转移方程。一般解决步骤如下:1.确定维数,确定dp数组。2.每一维采用下面表述,为i或者前i。3.之后问题可以描述为dp[i]为恰好为i(或者前i)的XXX(问题描述),然后思考dp[i-1]得出状态转移方程。动态规划...

2020-03-19 11:09:01 96

原创 关键路径

关键路径的求法一般是针对有向无环图的,常用来解决工程中的问题,前面我们学过Bellman和SPFA算法,如果我们给每条边变成相反数就可以求解关键路径了,当然关键路径不止一种求法,数据结构中给出的关键路径求法的优势在于其更快,利用了ve,vl数组,下面是其代码。#include<iostream>#include<stack>#include<queue> ...

2020-03-09 17:26:18 145

原创 拓扑排序

拓扑排序是针对有向无环图的,当然也可以用它来检测到底有没有环,数据结构中学过其构成原理,这里就不再赘述,主要来讲他的实现。分析原理,其实他的过程有点类似于层次遍历,所以用队列存储入度为0的点是OK的,但其实只要每次入队的结点入度为0,也没有顺序要求,栈也行,这里我为了避免每次比较麻烦,直接用优先队列实现。#include<iostream> #include<vector&...

2020-03-09 09:13:15 106

原创 Bellman算法和SPFA算法

Dijkstra算法比较快速,但是如果遇到负边就无能为力了,而Bellman算法可以解决负边问题,只要不是负环。这个算法数据结构没有讲过,他主要是每次对所以边进行松弛操作,进行n-1次得到最短路径。其原理如下所述:首先指出,图的任意一条最短路径既不能包含负权回路,也不会包含正权回路,因此它最多包含|n-1条边。其次,从源点s可达的所有顶点如果存在最短路径,则这些最短路径构成一个以s为根的最...

2020-03-08 11:45:05 277

原创 最短路径之Dijkstra算法

Dijkstra算法有些类似于最小生成树中prim算法,从源点出发,每次选出一个最短路径,然后依次更新n次。下面是代码实现#include<iostream>#include<vector>#include<algorithm>using namespace std;const int maxv=101;const int inf=1000000...

2020-03-08 11:01:33 155

原创 问题 D: 最短路径

问题 D: 最短路径[命题人 : 外部导入]时间限制 : 1.000 sec 内存限制 : 32 MB题目描述有n个城市m条道路(n<1000, m<10000),每条道路有个长度,请找到从起点s到终点t的最短距离和经过的城市名。输入输入包含多组测试数据。每组第一行输入四个数,分别为n,m,s,t。接下来m行,每行三个数,分别为两个城市名和距离。输出每组输出占两行...

2020-03-08 10:53:43 759 1

原创 问题 E: 最短路径问题

问题 E: 最短路径问题[命题人 : 外部导入]时间限制 : 1.000 sec 内存限制 : 32 MB题目描述给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。输入输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最...

2020-03-08 10:45:29 242

原创 最小生成树两种方法实现

在数据结构中我们知道最小生成树有两种实现方法,这两种方法一定要熟练,其中prim方法开了两个辅助数组vis[]和dis[];kruskal方法采用了并查集并可以和优先队列(也可以直接用sort排序)结合起来,下面是个人两种方法在邻接表中的实现代码:#include<iostream> #include<vector>#include<queue> usi...

2020-03-06 11:23:27 410

原创 图的深度遍历和广度遍历

实事上,这些遍历问题只是老生常谈的bfs和dfs过程,学习图的时候前面的图的定义和存储都没有讲解,但定义那些初试就学过,这里更注重讲解图的存储,再顺带把其遍历解决。图的存储有邻接矩阵和邻接表这几种方式,邻接矩阵是个二维数组,邻接表是一个点集加链表的形式,这里我们想用vector来实现邻接表。为什么vector可以实现邻接表,注意邻接表是点集加链表,为什么加链表是因为链表长度不一定需要确定,恰好...

2020-03-05 16:04:28 118

原创 哈夫曼树和哈夫曼编码的简单实现

学过数据结构自然清楚哈夫曼树是每次选择两个最小权值的结点构树,一般来说如果只是要求最小帯权路径长度,不一定要构造哈夫曼树,直接用一个优先队列就可以模拟这个过程,但是如果需要实现哈夫曼编码,这时就必须得构建哈夫曼树了。由定义哈夫曼树是二叉树,那分析,构建哈夫曼树和普通的二叉树有什么区别,首先哈夫曼树的大小是2*n-1,大小是定的,那用静态二叉树来描述更方便,可以前n个数都是叶子节点;其次由于哈夫曼...

2020-03-05 10:41:22 477

原创 平衡二叉树的实现

平衡二叉树是对排序二叉树的优化,在插入结点时有着很大的变化,需要调整树的高度达到平衡,下面是代码:#include<iostream>using namespace std;struct node{ int v,height; //height 记录高度 这里的高度是从下往上记 node *lchild,*rchild;};node* newnode(int x){...

2020-03-02 16:40:37 116

原创 二叉排序树的建立、查找、插入、删除

如题,详情见下代码,基本类似于二叉树。#include<iostream> using namespace std;struct node{ int data; node *lchild,*rchild;};void search(node* root,int x) { // 查找 if(root==NULL){ //没有查到 printf("fail!...

2020-03-02 11:48:21 684

原创 树的遍历

如果要实现树的结构,按照前面的链表实现指针域需要开一个数组,可能比较麻烦,这里采用静态实现,又考虑到一个结点的孩子树不确定,用vector定义变长数组,最后结构如下:struct node{ datatype data; vector<int>child;}Node[maxn];如果遇到某些问题只需要树的结点不需要数据域,上述结构还可以直接用vector<in...

2020-03-01 15:44:46 70

原创 二叉树的遍历问题

二叉树的定义是用递归定义的,这样我们会发现在它在前中后遍历、甚至插入、建立程序中常常用到递归,实际上把握好了递归,也就把握好了二叉树的遍历问题。下面是一些问题练习1.从一个遍历(明确空树)中确定树时间限制: 1 Sec 内存限制: 32 MB提交: 312 解决: 186[提交][状态][讨论版][命题人:外部导入]题目描述编一个程序,读入用户输入的一串先序遍历字符串,根据此字符...

2020-03-01 11:18:12 451

原创 二叉树的实现和四种遍历

#include<iostream> #include<queue> using namespace std;struct node{ int data; node *lchild,*rchild; int layer; //存放树的层次};node* newnode(int x){ //生成一个新结点 node* r=new node; r-...

2020-02-29 11:08:20 107

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除