通用变量命名
变量类型 | 变量名 |
---|---|
索引 | index,idx |
数组 | arr,array |
左、中、右 | left,mid,right,l,m,r |
和、差、商、积 | sum、diff、quot(ient)、prod(uct) |
二分查找
代码块 |
---|
int binary_search(int a[], int n, int val) {
int ret = -1; // 查找失败返回-1
int left = 0;
int right = n - 1;
int mid;
while(left <= right) {
mid = left + (right - left) / 2; // 防止直接平均可能的溢出问题
if(a[mid] < val) {
left = mid + 1;
} else if(a[mid] > val) {
right = mid - 1;
} else { // 相等情况放到最后,减少分支预测,因为多数搜索情况不是大于就是小于
ret = mid;
break;
}
}
return ret;
} |
邻接矩阵DFS代码模板
代码块 |
---|
vector<vector<int>> visited |
邻接矩阵的DFS遍历代码模板:
代码块 |
---|
bool flag; void dfs(vector<vector<int>> &grid, int x, int y) { static int dx[] = {-1, 0, 1, 0}; static int dy[] = {0, 1, 0, -1}; gridvisited[x][y] = 3true; // 标记已访问 for(int i = 0; i < 4; i++) { // 遍历上下左右邻接点 int tx = x + dx[i]; int ty = y + dy[i]; if(tx < 0 || ty < 0 || tx >= grid.size() || ty >= grid[0].size() || visited[tx][ty]) { continue; // 只有当前点是0才会有dfs搜索,如果搜到出界了,表明当前点(x,y)就在边界上,不符合封闭岛定义 出界或已访问过 flag = false; } else if(grid[tx][ty] == 0) { dfs(grid, tx, ty); } } } |
关于一些通用变量的命名:
索引:index, idx
数组:arr, array
左,中,右:left, mid, right, l, m, r;
和,差,商,积:sum, diff, quot(ient), prod(uct)
邻接数组形式的bfs模板:
邻接表BFS代码模板TODO
代码块 |
---|
vector<int> visited; void bfs(vector<vector<int>> &graph, int start) { queue<int> q; q.push(start); visited[start] = 1; while(!q.empty()) { int size = q.size(); while(size-- > 0) { int cur = q.front(); q.pop(); visited[cur] = 1; for(auto nxtnext : graph[ncur]) { if(!visited[nxtnext]) { q.push(nxtnext); visited[nxtnext] = 1; } } } } } |
数组元素循环右移n个元素的方法:
先反转开头的n个元素,再反转剩下的元素,再反转整个数组。
...