- 博客(7)
- 收藏
- 关注
原创 哈希(笔记)
# 哈希(1) 拉链法 int h[N], e[N], ne[N], idx; // 向哈希表中插入一个数 void insert(int x) { int k = (x % N + N) % N; e[idx] = x; ne[idx] = h[k]; h[k] = idx ++ ; } // 在哈希表中查询某个数是否存在 bool find(int x) { ...
2021-12-04 17:19:09
458
原创 双指针(笔记)
#双指针算法双指针双指针比较灵活,可以大大降低时间复杂度,可用在数组,单链表等数据结构中。快慢指针:一快一慢,步长一大一小。例如,是否有环问题(看慢指针是否能追上快指针),单链表找中间节点问题(快指针到单链表结尾,慢指针到一半)。对撞指针:一左一右向中间逼近。滑动窗口:类似计算机网络中的滑动窗口,一般是右端向右扩充,达到停止条件后右端不动,左端向右端逼近,逼近达到停止条件后,左端不动,右端继续扩充。所谓双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方
2021-12-04 17:07:48
134
原创 常见算法集合
1排序1快排时间void quick_sort1(int arr[],int l,int r){ if(l>=r)return; int x=arr[l],i=l-1,j=r+1; while(i<j) { do i++;while(arr[i]<x); do j--;while(arr[j]>x); if(i<j)swap(arr[i],arr[j]); } quick...
2021-11-15 18:52:05
163
原创 刷题系列3
这就是一道简单的进制转换题。1常规做法:直接模拟,先进进制转换成10进制,再转换成其他进制,主要注意一下16进制。代码:#include <iostream>using namespace std;int unhex(char ); //将16进制数A-F转换为10进制。 char hex(int ); //将10进制转换为16进制。int main(){ long long i,n=0,n1,n2,x=1; string str,red="..
2021-11-13 14:03:03
402
原创 刷题系列2
题目大意计算方块与方块之间的积水面积。拿到题目很多人都会想到从左到右挨个判断,虽然与能做,但这样不仅时间复杂度高,而且中间的情况也不好处理。我们简单分析一下题目给的例子:我们可以转换一下思维,不从左到右分析,而从上到下分析,第一层:我们找到左右第一次有方块的地方,假设全是方块总数为8,而第二层真实方块数为5,则水的个数为8-5=3;第二层同理全方块为6,真方块为3,则水的个数6-3=3。最后把所有层的水的个数加起来就是答案。输入:#include<iostrea...
2021-11-12 19:59:24
493
原创 魔方数(c语言版)
魔方矩阵又称幻方,是有相同的行数和列数,并在每行每列、对角线上的和都相等的矩阵。魔方矩阵中的每个元素不能相同。你能构造任何大小(除了2x2)的魔方矩阵。平方数的定义:平面魔方的一般定义:将自然数 1 到 N^2, 排列 N 行 N 列的方阵,使每行、每列及两条主对角线上的 N 个数的和都等于N (N^2+1)/2,这样的方阵称为 N 阶幻方。通过搜索整理后,得到下面的算法:对平面魔方的构造,分为三种情况:N为奇数、N为4的倍数、N为其它偶数N 为奇数时(1) 将1放在第一行中
2021-11-12 13:29:39
1067
3
原创 我的第一篇文章(刷题记录)
对于这个题目我们首先排除马能到的地方,对马能到的地方做标记void sett(int x,int y){ ma[x][y]=1; ma[x-1][y-2]=1; ma[x-2][y-1]=1; ma[x-2][y+1]=1; ma[x-1][y+2]=1; ma[x+1][y-2]=1; ma[x+2][y-1]=1; ma[x+2][y+1]=1; ma[x+1][y+2]=1;}对于这个问题我们可以使用奥数中的一种简..
2021-11-12 10:52:59
94
7
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人