- 博客(219)
- 收藏
- 关注
原创 为什么Dijktra算法解决不了带有负权边的问题?【带有经典例子讲解】
首先明确一点,Dijkstra算法 不是解决不了所有的带有负权边的问题,只是有的情况解决不了,直接上图吧。比如下面这种情况,就出来不了正确的结果。但是只要稍稍更换下权值,就是可以的。所以遇到负权边的情况,就老老实实用SPFA吧(但是其实就算不会写SPFA,用Dijkstra算法应该也能得到部分分,当然我说的不是ACM辣)参考资料:https://www.zhihu.com/questi...
2019-12-22 09:59:05
889
原创 《计算机网络—自顶向下方法》 第六章Wireshark实验:Ethernet and ARP
实验描述:在本实验中,我们将研究以太网协议和 ARP 协议。在开始实验之前, 您可以查看课本的 6.4.1 节(链路层地址和 ARP)和 6.4.2(以太网), 您也可以去看 RFC 826(ftp://ftp.rfc-editor.org/in-notes/std/std37.txt)了解关于 ARP 的协议详细信息,该协议可以根据 IP 地址获取远程主机的的物理地址(MAC地址)。实...
2019-12-21 12:01:07
23504
原创 CCP-CSP认证考试 201703-3 Markdown c/c++题解
题目描述题解:这道题我做了挺长时间了(看起来挺简单的,但是做起来还是有点难度),结果还只有70分。我只说下我的过程:1、只考虑区块(标题、无序列表、段落): 4个测点,正好拿了40分2、考虑区块内的强调:多了两个测点,60分3、考虑区块内的超链接:只多过了一个测点,应该是有错误,70分(最后的分数,懒得调试了)注意点:输出时删除所有分隔区块的空行,也就是没有空行强调 和 超链...
2019-12-09 21:13:24
512
原创 CCP-CSP认证考试 201612-3 权限查询 c/c++题解
题目描述题解:先声明一下,只完成了60分(有50%的样例是 不带等级权限+不带等级的查询,所以我考虑了带等级的情况,但是没有考虑好)我的思路:【待完成】代码:#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <cl...
2019-12-07 21:19:52
544
原创 CCP-CSP认证考试 201604-2 俄罗斯方块 c/c++题解
题目描述题解:我的思路:题目要求输入一个15 x 10的原始图形g1,然后再输入一个4 x 4的填充图形g2,还要输入一个位置(这个位置就是4 x 4的图形整体的左边位置)将4 x 4的图形g2填充到15 x 10的图形g1中对图形g1从第4行遍历到第1行,每行获取1的左边界和右边界(在一行内一定是连续的),然后进入一个down()函数,传入行数i,左边界s,右边界e (在这之前要将...
2019-12-06 21:15:05
486
1
原创 《计算机网络—自顶向下方法》 第四章Wireshark实验:IP
实验描述:在本实验中,我们将研究 IP 协议,重点关注 IP 数据报(IP datagram)。我们将通过分析在执行 traceroute 程序发送和接收的一系列 IP 数据报的过程来完成这个实验(traceroute 程序本身则是在 Wireshark ICMP 实验中进行了更详细的探讨),我们将研究 IP datagram 中的各个字段(fields),并详细研究 IP fragmenta...
2019-12-06 15:01:13
30827
1
原创 《计算机网络—自顶向下方法》 第五章Wireshark实验:ICMP
实验描述:在本实验中,我们将探讨 ICMP 协议的几个方面:Ping 程序生成的 ICMP 消息;Traceroute 程序生成的 ICMP 消息;ICMP 消息的格式和内容。实验过程:1. ICMP 协议和 Ping 程序【一堆内容】2. ICMP 协议和 Traceroute 命令【一堆内容】3. 额外问题对于一个编程任务,您可能创建了一个 UDP 客户端 ...
2019-12-05 11:33:36
15768
1
原创 CCP-CSP认证考试 201803-3 URL映射 c/c++题解
题目描述题解:这道题我只拿到了50分,还有50分是没有考虑的情况:我的思路:输入(其实这种大型的模拟题将输入完成了,就完成了三分之一了,其余的三分之二就是写出整体的逻辑+调试了):rule 规则我用一个一维数组保存,每个元素是一个结构体,其中包含了url规则串、url规则名称,规则串我是用数组保存每个以’‘分隔的字符串。rule 匹配串我直接用一个二维的字符串数组保存,每一行保存一...
2019-11-29 21:13:40
447
原创 CCP-CSP认证考试 201809-3 元素选择器 c/c++题解
CCF-CSP认证考试题解目录By东瓜lqd题目描述:题解:先说一句,这道题目只拿到了70分,而且具体哪几个点还没有拿到我自己都是知道了,下面是分析过程:1. 对于数据的输入: 我使用的是vector arr[MAX],也就是一个存储字符串的二维数组。注意点:因为一行中有多个字符串,多个字符串以空格分隔开来,所以使用getline来输入,然后使用strtok()将每个字符串存入二维数组...
2019-11-26 21:10:28
363
原创 C语言/C++ 动态分配数组(一维/二维)的大小
c语言:malloc - freec++:malloc - free and new - delete代码(已通过编译):#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <climits>#include &...
2019-11-19 20:17:35
1302
原创 LeetCode算法题解 70-爬楼梯
题目描述题解:我用的就是动态规划,其实还有别的方法。两种形式:1. 自顶向下的递归(超时) 2. 自底向上的迭代代码:class Solution {public: /* 方法1:动态规划法(递归):超时 int dp(int x) { if(x == 1) { return 1; ...
2019-11-19 20:03:42
176
原创 LeetCode算法题解 203-移除链表元素
题目描述题解:其实这就是一道简单模拟题,看我的代码来理解吧:tmp:记录下临时的图,初始值就是grid开个循环:判断1:遍历grid,如果图中没有1,也就代表没有新鲜的了,直接返回分钟数 (放在前面是因为有可能初始状态就是没有新鲜的,直接返回0)。判断2:遍历grid,如果发现了2,那就把上、下、左、右的四个方向都判断一遍(不越界 + 值为1),就变为2,注意这里是把 tmp[i][...
2019-11-19 19:43:37
153
原创 LeetCode算法题解 205-同构字符串
题目描述题解:注意两个点:一个字母只能映射一个字母,也就是说假设 a -> b了,那就不能 a -> c了。一个字母只能被映射一次,也就是说假设 a -> b,那就不能 c -> b我的代码中的 map<char,char> mp 可以记录下每个字母映射的字母,比如 mp['a'] = 'b',就表示 a->b。思路直接看代码吧。代码...
2019-11-19 19:34:27
159
原创 LeetCode算法题解 231-2的幂
题目描述题解:循环判断法递归判断法性质法:2的幂对应的二进制数,一定有且只有一个1。代码:class Solution {public: bool isPowerOfTwo(int n) { /* 1. 循环解法 long long tmp = 1;// 可能num接近INT_MAX,但是tmp*2可能会超出INT_MAX。 ...
2019-11-19 19:26:45
195
原创 LeetCode算法题解 1232-缀点成线
题目描述题解:随便找两个点,求出两点相连的直线方程式,如果所有的点都满足就代表属于同一条直线上:根据两点求方程式:(x1,y1) (x2,y2) =>斜率式:k=(y2-y1)/(x2-x1) 直线方程 y-y1=k(x-x1)两点式:(x-x1)/(x2-x1)=(y-y1)/(y2-y1) (这里直接用两点式了)将第三个点(x3,y3)代入两点式,然后判断是否满足等式注...
2019-11-19 19:23:33
225
原创 LeetCode算法题解 203-移除链表元素
题目描述题解:迭代法递归法(操作链表的题目用递归,往往实现起来很简单,但是自己难想出来)两种方法(或者其他方法),跟着模拟一遍就理解了。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(i...
2019-11-18 21:03:51
220
原创 求第k小的数、第k大的数、中位数的三种算法(nth_element()、快速选择算法、直接排序法)
题目描述:给定一个n个元素的无序序列,求出第k小的数、第k大的数、中位数。注意:其实要求出第k大的数,只需要求出第 (n+1)-k 小的数即可,中位数同理,如果n为偶数,就是求出(第 n/2 小的数+第 n/2+1 小的数) / 2,如果n为奇数,就是求出第 n/2 + 1小的数。下面给出三种解法:nth_element()快速选择法直接排序法方法1:nth_element()...
2019-11-18 21:00:00
1605
原创 蓝桥杯算法题解 算法训练 2的次幂表示
题目描述问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=27+23+2^0 现在约定幂次用括号来表示,即a^b表示为a(b) 此时,137可表示为:2(7)+2(3)+2(0) 进一步:7=22+2+20 (2^1用2表示) 3=2+2^0 ...
2019-11-15 21:18:35
480
原创 LeetCode算法题解 206-反转链表
题目描述题解:解法1:递归法解法2:迭代法解法3:直接反转元素法具体的思路看代码注释(如果不理解,跟着模拟一遍就可以了),还有其他的解法直接看LeetCode里面的题解吧。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;...
2019-11-11 21:13:37
299
原创 最长上升子序列(LIS)、最长公共子序列(LCS)、最长上升公共子序列(LICS) 等一系列问题的解法 【待完善】
1. 最长上升子序列(LIS)题意:给定一个序列,求出最长的上升(递增)子序列,注意:不一定要连续解法:动态规划:创建一个dp数组,dp[i]表示以i结尾的最长上升子序列的长度,开两层循环求dp数组即可,具体思路看代码理解。代码:int LIS(int a[],n){ int dp[MAX]; for(int i = 0; i < n; ...
2019-11-05 21:05:00
406
原创 LeetCode算法题解 543-二叉树的直径
题目描述题解:这道题我刚开始的思路是:求出以根节点为中心,左子树的最大深度(从1开始) + 右子树的最大深度,对于样例来说就是:左子树深度(2) + 右子树深度(1) = 3,但是有个样例通不过,问题就出现在两个节点路径长度的最大值不一定根节点在中间的,有可能是任意的一个节点(也就是可能某个子节点在中间,两边的深度之和更大) ,所以递归的每个节点的时候都要求一次左右两边最大深度之和,然后记录...
2019-11-03 19:42:10
193
原创 LeetCode算法题解 997-找到小镇的法官
题目描述题解:思路:法官应该满足的条件:被信任N-1次(也就是在truct[i][1]出现了N-1次)没有信任过别人(也就是这个人不会出现在truct[i][0]中)具体看代码吧,其中还使用了map来记录下出现的次数。**注意:**当只有一个人时,也就是当N=1,不会有信任的情况,也就是truct数组为空,那么这个人就是法官。代码:class Solution {pub...
2019-11-01 21:17:49
379
原创 LeetCode算法题解 949.-给定数字能组成的最大时间
题目描述题解:刚一开始,我拿到这道题就直接分析,思考过程:我认为这四个数的范围应该是这样的:[0-2][0-3][0-5][0-9],也就是必须有四个这些个范围的数,然后要尽可能的时间大,那就是:从数组中选出<=2最大的数从数组中选出<=3最大的数从数组中选出<=5最大的数从数组中选出<=9最大的数而且要保证这几个数处于不同的位置,然后就报错了,样例没...
2019-11-01 20:30:01
294
原创 LeetCode算法题解 788-旋转数字
题目描述题解:看代码的注释。代码:class Solution {public: int rotatedDigits(int N) { int cnt = 0; for(int i = 1; i <= N; i++) { if(rotateIsOk(i))// 判断: 1.每个数位旋转180°后,是...
2019-11-01 20:15:02
204
原创 LeetCode算法题解 581-最短无序连续子数组
题目描述题解:方法1:将nums数组从小到大排个序得到sortNums数组,然后找到两个数组,从左边开始第一个不相等的位置left、从右边开始第一个不相等的位置right,最后right-left+1就是最短的无序连续子数组(将left-right的数排序,整个数组也会有序)。代码:class Solution {public: int findUnsortedSubarr...
2019-11-01 20:08:44
152
原创 LeetCode算法题解 342-4的幂
题目描述题解:我这里给出三种解法:1. 循环解法2. 递归解法前两种就不用解释了,直接看代码吧。3. 利用性质【待完成,待学习】代码:class Solution {public: bool isPowerOfFour(int num) { /* 1. 循环解法 long long tmp = 1;// 可能num接近INT_MAX,...
2019-11-01 20:03:34
136
原创 LeetCode算法题解 189-旋转数组
题目描述题解:这道题的解法是多样的:1. 直接模拟移动的过程,用两层循环来解决:第一层循环表示移动k次,然后每次记录下最后一个值,第二层循环从倒数第二个数到第一个数依次往后移动一个位置,最后把记录下的值放到第一个位置。注意:这个方法使用c++过不了,使用java可以过。2. 三次翻转法:比如给定的样例:1、2、3、4、5、6、7 ,k=3,最后的结果应该为:5、6、7、1、2、3、4...
2019-11-01 19:52:53
235
原创 《计算机网络—自顶向下方法》 第三章Wireshark实验2:UDP
实验描述:在本实验中,我们将快速了解 UDP 传输协议。 正如我们在本文第 3 章中所看到的,UDP 是一种简化的协议。 在进行本实验之前,您可能需要重新阅读课本中的第 3.3 节。 由于 UDP 简单易理解,您只需要一点花费时间就能做这个实验。实验过程:开始在 Wireshark 中捕获数据包,然后执行一些会导致主机发送和接收多个 UDP 数据包的操作。 您也可以什么也不做,...
2019-10-31 09:29:10
10515
5
原创 LeetCode算法题解 414-第三大的数
题目描述题解:这道题如果不看时间复杂度那是挺容易的,一个排序就解决了,但是限制到O(n)还是要点方法才能解出来的:方法1:如果元素的个数<=2,直接返回最大的值即可。如果元素的个数>3,首先找出最大的(注意:可能有多个),把最大的数标记为INT_MAX,然后把这个最大的数记录下来为:realMaxV,然后找出第二大的(也可以有多个),把次大的也标记为INT_MAX,最后找...
2019-10-26 20:08:22
465
原创 LeetCode算法题解 1185-一周中的第几天
题目描述题解:首先要明白知识点:每年的第一天 不一定是星期一,刚开始我就是直接求出这一天是这年的第几天,然后去%7求星期数,但是一翻日历,发现2019年的第一天并不是星期一。题目给出的提示给出的日期一定是在 1971 到 2100 年之间的有效日期。是有作用的,可以通过查资料(比如Excel啥的)得到1971年1月1日的星期数,然后求出给定的日期距离这一天多少天,比如1971 /1/1...
2019-10-26 19:40:55
393
原创 LeetCode算法题解 242-有效的字母异位词
题目描述题解:方法1:定义一个tmp向量,遍历arr的元素赋值给tmp,如果发现元素的值为0,则多添加一个0,然后直接输出即可。方法2:如果要求不能开额外的空间,那么就是:遍历一次arr,记录下值为0的个数nums,在arr后面添加nums个-1(随便什么)。做一个1->nums的循环,第一次遍历找到第一个0,在后面插入一个0,其他元素往后移动一个位置,第二次遍历找到第3个...
2019-10-26 19:33:50
169
原创 LeetCode算法题解 242-有效的字母异位词
题目描述代码:class Solution {public: bool isAnagram(string s, string t) { sort(s.begin(),s.end()); sort(t.begin(),t.end()); if(s == t) return true; else ...
2019-10-26 19:21:00
192
原创 LeetCode算法题解 38-报数
题目描述题解:这道题目的其实是很简单的(难度的分类也是简单),但是乍一看并不是那么好做,首先看懂题目意思:比如1211,怎么报数呢?从左到右开始报数:1个1、1个2、2个1 => 111221第一种解法:n最大为30,那我就一个个地数出来,不过这方法太耗时间了,而且容易出错。第二种解法:写一个getCountResultBySqe(string str),传入一个字符串,比...
2019-10-26 19:18:46
244
原创 LeetCode算法题解 35-搜索插入位置
题目描述代码:class Solution {public: int searchInsert(vector<int>& nums, int target) { for(int i = 0; i < (int)nums.size(); i++) { if(nums[i] == target) ...
2019-10-26 19:07:27
289
原创 LeetCode算法题解 9-回文数
题目描述代码:bool isPalindrome(long long x){ if(x < 0) { // 负数不可能是回文数 return false; } else { long long tx = x; long long rx = 0; while(tx) ...
2019-10-22 19:51:17
149
原创 LeetCode算法题解 7-整数反转
题目描述给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21题解:思路:先求出数字的位数len,然后计算pow(10,len-1),比如123,得到100 (我写的是自己写的pow_int(),因为math库中pow()函数返回的...
2019-10-22 19:48:27
144
原创 LeetCode算法题解 6-Z 字形变换
题目描述题解:当行数为1的时候,一定只有一行,而且会和原字符串一样。当行数不为1,开一个z数组,用于保存形成的z图形(从左往右看是按z字行排列的),初始化为’\0’,代表没有字符。定义一个bool isReachNumRows:值为false,表示没有达到最后一行,不断的对z[++i][j]赋值 (往下走)值为true,表示达到了最后一行,然后不断的对z[–i][++j]赋值 (...
2019-10-22 19:36:46
199
原创 LeetCode算法题解 1-两数之和
题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]代码:...
2019-10-22 19:24:52
181
原创 LeetCode算法题解 28-实现strStr()
题目描述实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle ...
2019-10-22 19:22:02
258
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅