版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

通用变量命名

变量类型变量名
索引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个元素,再反转剩下的元素,再反转整个数组。

...