c++
文章平均质量分 83
helloworddm
这个作者很懒,什么都没留下…
展开
-
参数传递方式
参数传递方式教材上大都说有两种,一种是值传递,另一种是指针传递。而后者本质上依然是值传递。原创 2023-11-17 13:36:02 · 217 阅读 · 0 评论 -
JavaScript之QuickJs
JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式。JavaScript和Java的区别在我刚开始学JavaScript的时候,总感觉Java和JavaScript差不多,所以就没怎么关注JavaScript,直到工作后才知道,两者没有啥关系。有说有,那就是JavaScrip原创 2021-08-02 14:39:40 · 1580 阅读 · 0 评论 -
Visual Studio快捷键介绍和高级玩法
既然使用IDE,我想更多的看重的是它的调试和定位功能。其他的快捷键需要自己慢慢探索。微软不太好的地方是vscode和studio的快捷方式不太一样。调试调试(启动):F5;调试(重新启动):使用组合键“Ctrl+Shift+F5”;调试(开始执行不调试):使用组合键“Ctrl+F5”;调试(逐语句,步入):F11;调试(逐过程,步过):F10;设置断点:F9。退出当前过程: Shift+F11编译: F7如果遇到库函数,想看看库函数的实现,怎么办? 举个例子memset函数,很常见的原创 2021-04-02 15:58:32 · 518 阅读 · 0 评论 -
最近公共祖先(1)
最近公共祖先问题: 情况1:二叉树是个二叉查找树,且root和两个节点的值(a, b)已知。如果该二叉树是二叉查找树,那么求解LCA十分简单。基本思想为:从树根开始,该节点的值为t,如果t大于t1和t2,说明t1和t2都位于t的左侧,所以它们的共同祖先必定在t的左子树中,从t.left开始搜索;如果t小于t1和t2,说明t1和t2都位于t的右侧,那么从t.right开始搜索;如果t1<=t<= t原创 2016-07-14 15:04:22 · 298 阅读 · 0 评论 -
动态规划(3)格子取数问题
问题描述: 有n*n个格子,每个格子里有正数或者0,从最左上角往右下角走。一共走2次,(即从左上角走到右下角走两次),把所有经过的格子里的数加起来,求总和的最大值。如果两次经过同一个格子,则最后求得的总和中该格子中的数只加一次。 思路: 避免“不顾全局,只看局部”(貌似叫贪心) 动态规划保证全局最优。 代码如下:const int N = 202;const int inf原创 2016-07-19 15:05:40 · 820 阅读 · 0 评论 -
字符串查找(2)KMP算法
Knuth-Morris-Pratt字符串查找算法,简称KMP算法,常用于在一个文本串S中查找一个模式串P出现的位置,因为这个算法有Donald Knuth,Vaughan Pratt,James H.Morris与1977年联合发表,因此取这3个人的姓氏的命名此算法。int KmpSearch(char *S,char *P){ int i = 0,j = 0; int Slen原创 2016-07-17 18:11:59 · 619 阅读 · 0 评论 -
字符串的查找(1)
题目描述: 假设现在有这样一个问题:有一个文本串S和一个模式串P,要查找P在S中的位置。 解法一:蛮力解决 假设现在文本串S匹配呢到位置i,模式串P匹配到j位置,用蛮力匹配的思路,有: 1)如果当前字符串匹配成功,S[i] == P[j],则i++,j++,继续匹配下一个字符 2)如果匹配失败,S[i] != P[j],则令i = i-j+1,j =原创 2016-07-17 18:07:03 · 465 阅读 · 0 评论 -
杨氏矩阵
行和列分别递增的矩阵有一个专有名词叫杨氏矩阵,是由剑桥大学数学家杨表在1900年提出的,而在这个矩阵的查找俗称杨氏矩阵的查找。 定位法:时间复杂度是O(m+n)#include<iostream>using namespace std;#define M 4#define N 4bool find(int a[][N],int value)//注意这里的参数传递,貌似只能这样写 int a原创 2016-07-16 20:40:08 · 485 阅读 · 0 评论 -
有序数组的查找(个人感觉美到极致的一个算法)
对于包含n个元素的数组,整个查找过程大约要经过logn次比较。(二分查找算法) 代码如下: 非递归版本int BinarySearch(int array[],int n,int value){ int left = 0; int right = n-1; //如果上面这句是int right = n的话,则下面有两处需要改动 //while(left < r原创 2016-07-16 19:54:47 · 3633 阅读 · 2 评论 -
树(3)树的层次遍历
问题描述:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / / 6 10 / / / / 5 7 9 11 输出8 6 10 5 7 9 11。 代码如下:#include<iostream>#include<queue>using namespace std;struct bstNode{ bstNode原创 2016-07-16 09:27:14 · 497 阅读 · 0 评论 -
树(2)求二叉树结点最大距离
问题描述: 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义”距离”为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。 思路:相距最远的两个节点一定是两个叶子节点或者一个叶子节点到它的根节点 代码如下:#include<iostream>using namespace std;struct NODE{ NO原创 2016-07-15 21:24:19 · 403 阅读 · 0 评论 -
最近公共祖先(2)
情况3:也是最普通的情况,二叉树是普通的二叉树,节点只有left/right,没有parent指针。 10 / / 6原创 2016-07-14 15:19:10 · 634 阅读 · 0 评论 -
畅通工程(并查集)
首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。像畅通工程这题,问还需要修几条路,实质就是求有几个连通分支。如果是1个连通分支,说明整幅图上的点都连起来了,不用再修路了;如果是2个连通分支,则只要再修1条路,从两原创 2016-07-14 22:18:36 · 496 阅读 · 0 评论 -
红黑树
红黑树:一种特殊的二叉搜索树,满足如下性质: (1)根节点是黑的 (2)每个叶节点是黑的 (3)如果一个节点是红的,它的两个孩子节点是黑的 (4)每个节点要么是红的,要么是黑的 (5)对于任意节点而言,其到叶节点的每条路径到包含相同数目的黑节点原创 2016-07-11 08:33:06 · 324 阅读 · 0 评论