摘要: N皇后问题,我们在解决N皇后问题的时候,采用搜索的方法,dg记录的是左对角线的截距,udg记录的是右对角线的截距。之后便可以进行dfs进行求解了 #include <iostream> using namespace std; #define N 20 int n; bool col[N], dg[ 阅读全文
posted @ 2020-08-15 02:59 SteveYu 阅读(176) 评论(0) 推荐(1) 编辑
摘要: 逆序对板子,我们在求逆序的时候,仅仅需要进行在归并排序上加上 mid - i + 1即可 #include <iostream> using namespace std; typedef long long LL; const int N = 100010; int n, q[N], tmp[N]; 阅读全文
posted @ 2020-08-15 01:58 SteveYu 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 归并排序原理如下: 我们首先进行对半划分,我们选择中间那个数字,之后把左右两个数组进行按位比较,组成一个新数组,之后再放回去。 紧接着进行递归。 分析复杂度分析,推导详见快排,原理差不多,复杂度O(n logn),但是快速排序是不稳定的排序,而归并排序是一个稳定的排序。 int tmp[N]; vo 阅读全文
posted @ 2020-08-15 00:37 SteveYu 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 快速选择原理如下,选择第k大的数字: 我们在快速选择的时候,也同样用了划分的思想,随机选择一个中轴,双指针i, j,指针i从左往右扫描,指针j从右往左扫描,如果i < j 则进行交换,并且继续循环,直到遇到中轴,这时候我们的i和j均为中轴(理由:因为i,j相等),如果数字在中轴的左边,则向左递归,如 阅读全文
posted @ 2020-08-15 00:22 SteveYu 阅读(366) 评论(0) 推荐(0) 编辑
摘要: 快速排序原理如下: 我们在排序的时候,用到了划分的思想,随机选择一个中轴,双指针i, j,指针i从左往右扫描,指针j从右往左扫描,如果i < j 则进行交换,并且继续循环,直到遇到中轴,这时候我们的i和j均为中轴(理由:因为i,j相等)。我们在中轴左右递归,假设递归到了最后,也就交换了最后两个数。 阅读全文
posted @ 2020-08-15 00:05 SteveYu 阅读(1269) 评论(0) 推荐(0) 编辑