摘要: 穷且益坚,不坠青云之志。 阅读全文
posted @ 2020-08-30 20:32 F_jin 阅读(86) 评论(0) 推荐(0)
摘要: 倍增就是字面意思,成倍的增长,如果状态空间很大,通常的线性递推无法满足要求时,那么我们可以采用成倍增长的方式,只递推状态空间中在2的整数次幂位置上的值作为代表。而其他位置的值我们可以通过“任意整数可以表示成若干个2的次幂项的和”这一性质,使用之前求出的代表值拼成所需的值。所以使用倍增算法也要求我们问 阅读全文
posted @ 2020-09-08 21:58 F_jin 阅读(431) 评论(0) 推荐(0)
摘要: 1. 补码 由于CPU在进行设计的时候只进行了加法器的设计,所以在它只会处理加法操作,那么问题来了如何进行减法操作呢?例如:A-B,我们可以将其看作是A+(-B)的形式。这样在计算机内部就会出现负数的形式,所以就引入了补码的概念,补码就是对数字进行按位取反再加一的操作,补码在计算机中进行储存负数。 阅读全文
posted @ 2020-09-08 21:55 F_jin 阅读(140) 评论(0) 推荐(0)
摘要: 堆排序 #include<stdio.h> #include<stdlib.h> #include<math.h> #define MAX_LEN 10 void print(int* pArray, int size, char* c){ printf("%s",c); for(int i = 0 阅读全文
posted @ 2020-09-08 21:53 F_jin 阅读(86) 评论(0) 推荐(0)
摘要: 给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。 模板串P在模式串S中多次作为子串出现。 求出模板串P在模式串S中所有出现的位置的起始下标 // s[]是长文本,p[]是模式串,n是s的长度,m是p的长度 #include<iostream> using name 阅读全文
posted @ 2020-09-04 19:25 F_jin 阅读(97) 评论(0) 推荐(0)
摘要: //双指针算法大致模板for (int i = 0, j = 0; i < n; i ++ ){ while (j < i && check(i, j)) j ++ ; // 具体问题的逻辑}常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2) 对于两个序列,维护某种次序,比如归并排 阅读全文
posted @ 2020-09-04 19:24 F_jin 阅读(171) 评论(0) 推荐(0)
摘要: 首先找到数组(有序数组)中 的中间值,mid=(left+right)>>1,区间[left, right]被划分成[left, mid]和[mid + 1, right];如果是mid = l + r + 1 >> 1,区间[left, right]被划分成[left, mid - 1]和[mid 阅读全文
posted @ 2020-09-04 19:23 F_jin 阅读(277) 评论(0) 推荐(0)
摘要: 1、从需要排序的数组中选取一个基数(通常选取头元素或者尾元素),例如选取数组a[n]中的中间元素,a[l + r >> 1] 2、遍历整个数组,将小于基数的数组元素放到基数的左边,大于的放到基数右边。 3、依次递归左右两边的数组元素即可完成排序。l和r每次选取要递归元素的左右端点即可 //快速排序模 阅读全文
posted @ 2020-08-30 20:49 F_jin 阅读(105) 评论(0) 推荐(0)