![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
东东7_7
这个作者很懒,什么都没留下…
展开
-
简单理解哈希表和哈希冲突
前言哈希表的查找方式作为查找比较快的一种,我们很有必要去了解一下他的基本原理哈希表定义:哈希表是根据关键码值直接进行数据访问的数据结构,它通过把关键码映射到一个位置来访问记录,这个映射函数叫哈希函数,存放记录的数组叫哈希表最简单的哈希查找当知道数据的范围为0~99时,使用哈希的思想就能很快的统计出来数据的个数void hash_table (int table[],int arr[],int len){ for (int i=0;i<len;i++) //这就是借助数组的下标统计原创 2021-03-01 11:39:28 · 138 阅读 · 0 评论 -
算法题:斐波那契数列
求斐波那契数列的第n项定义:这个数列从第3项开始,每一项都等于前两项之和,其中第一项为0,第二项为1这是一个很经典的递归试题,我们很经典的写法如下方法一,递归unsigned long long Fibonacci(unsigned int val){ if (val == 0) return 0; if (val == 1) return 1; return Fibonacci(val - 1) + Fibonacci(val - 2);原创 2020-12-23 10:30:49 · 381 阅读 · 0 评论 -
算法题: 去除数组中空格
实现一个函数将字符串中的空格替换成#20输入:ni hao ya输出:ni%20hao%20ya其中我们有两个思路,一个是O(N²)的复杂度,将数组遍历,然后在空格处插入#20,但是每次插入都需要后移内存,十分的费时间,所以我们还是从中寻找规律我们先遍历一遍数组,找出他其中的空格数量,用两个指针,一个指向数组尾部,一个指向数组尾部+最后要的偏移量,然后向前遍历,两个指针一起向后移动,后面的指针不断的去拷贝前面指针的数据,当遇到空格的时候,后面的指针去做赋值操作#20注:其中需要注意的就是数组越原创 2020-12-17 14:42:35 · 1045 阅读 · 0 评论 -
算法题:寻找有序的二维数组中的值
在一个二维数组中,每一行按照从左到右,从上到下递增的顺序排序,完成一个函数,可以搜索其中的数1,2,8,9,2,4,9,12,4,7,10,13,6,8,11,15二维数组如上输入 数字 6输出 true我们看到题可以试图从中寻找他的规律,他是从上到下,从左向右依次递增的,我们可以使用特殊点右上角那一个数,他是一行中最大的数,同时是一列中最小的数,用它和目标值进行比较,如果他大于目标值说明这一列中没有他需要的值,如果他小于这个值,说明这一行中没有他需要的值(因为他是这一行中的最大值)代原创 2020-12-16 11:09:45 · 107 阅读 · 0 评论 -
算法题:求连续子数组最大和
求连续子数组最大和输入一个整形的数组,数组中有正数也有负数,数组中一个或者多个组成一个子数组,求子数组和中的最大值输入 1,2,-3,5,6,3,-2,3,-10,2输出 15输入1,2,3,5,6,3,2,3,10,2输出 35-2, - 4,-3,-6,-6,-8,-2,-1,-10,-2输出 -1思路寻找规律,发现数组只要相加不小于等于0,就可以继续相加,否则从0开始int arr_max(int buf[],int len){ if (buf == nullptr原创 2020-12-15 15:58:01 · 183 阅读 · 0 评论 -
算法题:判断一个数组中数据是否有重复,其中元素大小不超过len-1
判断一个数组中数据是否有重复,其中元素大小不超过len-1例子 1,2,3,4,5,5有重复2,3,1,4,5无重复暴力求解法,时间复杂度O(n²)直接遍历他所有的数据,看是否重复bool arr_same(int buf[],int len){ if (buf == nullptr || len <= 0) return false; for (int i = 0; i < len - 1; i++) { for (i原创 2020-12-14 23:30:50 · 542 阅读 · 0 评论 -
链表关于链表合并和反转的两类题型
第一类将链表的头部指向尾部,再指向头部的第二个,再由头部的第二个指向尾部的第二个例子输入:1,3,5,7,8,9,0输出:1,0,3,8,5,8,7这里我的思路是先将将一条表分为两段从中间截断,这时候我们将第二条链表反转,最后将他们有序的合并就可以达成目的link1* fanzhuan (link1 *p){ link1 *p1,*p2,*tem; p1 =p; p2 =p->next; p1 ->next =NULL; tem =p2 ->next; whi原创 2020-11-28 11:42:22 · 161 阅读 · 0 评论 -
看哨兵快速理解快速排序算法
前言我们讲快速排序结合一个例子来说明,假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边,类似下面这种排列。 3 1 2 5 4 6 9 7 10 8好了我们开始吧在初始状态下,数字6在序列的第1位。转载 2020-09-07 23:44:29 · 1615 阅读 · 1 评论 -
递归算法的简单理解
前言递归算法在我们的处理各种问题的时候大量的使用,是一个可以将大型的问题简单化的算法对递归的理解递归在概念上笼统的来说就是自己调用自己的方法,就像是查字典一样,一层一层的查,直到找到你想要的那个数据,然后再逐一的返回递归的抽象化理解其实递归可以理解为出栈入栈的形式,他执行第一步递归,就将函数放在里面,然后逐步进去进去找到那个想要的数值,然后再逐步返回例如一个结点数为7的二叉树的前序遍历...原创 2019-09-06 16:47:56 · 160 阅读 · 0 评论