- 博客(11)
- 收藏
- 关注
原创 分治法解决问题
分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。分治法的三个步骤:(1)分解,将要解决的问题划分成若干规模较小的同类问题;(2)求解,当子问题划分得足够小时,用较简单的方法解决;(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。例如:这个函数将数组a[l]...a[r]分成a[l],...,a[m]和a[m+1]...
2019-03-15 16:24:18
2768
转载 判断链表中是否有环及链表开始入环的第一个节点
1)给定一个链表,判断链表中是否有环:我们可以用快慢指针的方法解决这个问题。fast指针一次走2步,slow指针一次走1步,则当两个指针走一次时两个指针相差1步,走两次时相差2步,以此类推当走n次时fast指针与slow指针相差n步,每多走一次两个指针之间相差步数加1。若slow走n步入环,则此时fast以入环且比slow快n步,因为在环中,故我们可以看作fast指针在追赶slow指针,设...
2019-03-15 16:03:23
226
原创 KMP算法详解
KMP算法是一种相比较于的高级算法。KMP是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt同时发现的。其中第一位就是《计算机程序设计艺术》的作者!!KMP算法要解决的问题就是在字符串(也叫主串)中的模式(pattern)定位问题。说简单点就是我们平时常说的关键字搜索。模式串就是关键字(接下来称它为P),如果它在一个主串(接下来称为T)中出现,就返回它的具体位置,否则...
2019-03-14 23:19:48
312
原创 位运算知识概论
位运算符号&,|,^,~(取反,不分正负数),<<(标准规定在右边补0),>>(正数则左边补0,负数标准没有规定在左边补充的数字,分为逻辑右移和算术右移,具体由编译器决定去掉最后一位 | (101101->10110) | x >> 1在最后加一个0 | (101101->1011010) | x << 1在最后加一个...
2018-11-12 22:27:39
177
原创 c和c++文件计算机的运行过程
c和c++程序在运行时各阶段的处理过程图:一、预处理、预编译阶段:在这阶段很快就会生成“.i”文件生成,在“.i”文件中会把代码中所有的注释删掉,把宏定义过的变量赋予真值包含的头文件c和c++都会很直接的直接把头文件的相关内容直接复制粘贴过来。二、编译:此阶段会把代码中的错误查找出来,就是把已经预编译的文件编译成汇编代码的过程,整个过程会包含语法,词法的分析,和一些优化操作。三、汇...
2018-11-11 13:25:44
255
原创 链表建立
详细代码:#include "stdio.h"#include "malloc.h " //创建动态内存;struct node{int data;struct node *next;};typedef struct node NODE;NODE *create(int n){int i,a;NODE *head=NULL;NODE *p1=N...
2018-10-31 10:29:11
118
原创 const解析
const的定义:常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。为什么函数中要引用const?回:const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。1、const把变量变为只读,对于基本数据类型对于const是透明的。int a;const int ca=10;a=ca;//合法ca=20;//error...
2018-10-31 10:27:13
149
原创 指针+数字
指针加一:加一个字节;int arr[10]={1,2,3};int*p=arr;p++;*p=10;符合数学思维字节加一,但要是字节加一,p++就变成0a000000.2、加一个单元格;如果移动一个单元格这样p++就指向地址104,*p=2;上述代码就出现下面这种情况3、加一个数组这种情况不可能出现,不符合逻辑。因此我们的p++是第二种情况。...
2018-10-25 20:07:41
722
原创 数组溢出
溢出这个问题对于计算机来说是一个很严重的问题,下面就让我们来认识一下:我们做题时经常发现定义整型数组a[10],并赋初值,然后我访问a[11],输出0,再a[11]=3后访问a[11],输出3,a的长度还是10,那么a[11]存在哪里了?数组的存放位置:栈顶部存放小地址,底部存放大地址。此段代码就是数组长度为10,i从0-9输出数值。如果i从0-10的输出就会越界(溢出...
2018-10-25 17:39:13
3440
1
原创 如何获知在n进制下等式成立的方法?
例一:假设在n进制下,下面的等式成立,567*456=150216 ,n的值是()。A:9 B:10 C:12 D:18上面例子中左边 567*456 =(5n^2+6n+7)*(4n^2+5n+6) =20n^4+49^3+88n^2+71n+42 ...
2018-10-22 19:31:42
213
原创 统计数字n是个几位数,并将其逆序和顺序输出
首先是第一问:统计数字n是个几位数;这一问相对比较简单,思路就是对n整除,循环进行,直到n=0,返回循环的次数,方法使用while循环,for循环,或者do…while循环都可以进行,这里我选择了代码量最少的do…while 循环在这里插入代码片int Count(int n){ int tmp = 0; do { n /= 10; ...
2018-10-16 13:28:05
365
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人