专题十二_floodfill(洪水灌溉)算法_算法专题详细总结

目录

1. 图像渲染(medium)

解析:

函数头:

函数体:固定模板 

设置全局变量:

总结:

2. 岛屿数量(medium)

解析:

注意:

总结:

3. 岛屿的最⼤⾯积(medium)

解析:

解决办法:

总结:

4. 被围绕的区域(medium)

解析:

总结:

5. 太平洋⼤西洋⽔流问题(medium)

解析:

方法一:

方法二:

那么就分别设置两个bool二维矩阵:

进行dfs设置,如果能够进入当前块的位置,说明当前海洋能流向这个位置:

最后就是判断两个bool数组是不是会有重复的数据块,判断两个数据块是否同时为true

总结:

6. 扫雷游戏(medium)

解析:

总结:

7. 衣橱整理(medium)

解析:

设置全局变量:

那么就是固定的深度优先遍历算法:

总结:


有过专题十一的练习,不说这个专题易如反掌吧,简直就是手拿把掐,但是还是有些小细节需要注意,我们一起来看看吧:

1. 图像渲染(medium)

题目意思贼简单,就是说给我们一个中心元素sr,sc然后就把它周围所有的跟中心元素相同的元素就全都进行改变颜色变成color。

解析:

floodfill 一眼就是dfs,然后直接对(sr,sc)这个坐标进行dfs遍历 ,只需要遍历一次,将所有跟这个坐标相通的元素全部都进行修改color即可

那么:

函数头:

dfs(nums,sr,sc);

函数体:固定模板 

for(int k=0;k<4;k++)

        {

            int x=i+dx[k];

            int y=j+dy[k];

            if(x>=0&&x<m&&y>=0&&y<n&&image[x][y]==ret&&visit[x][y]==false)

            {

                visit[x][y]=true;

                image[x][y]=color;

                dfs(image,x,y);

            }

        }

设置全局变量:

    int dx[4]={0,-1,0,1};  
    int dy[4]={-1,0,1,0};  //这里要遍历当前位置的上下左右四个位置,如果满足if里面的条件,就可以递归到下一层
    int visit[100][100];  //设置当前位置是否被访问过,不会出现死循环的条件

class Solution {
public:int dx[4]={0,-1,0,1};int dy[4]={-1,0,1,0};int visit[100][100];int color,n,m,sr,sc;int ret;vector<vector<int>> floodFill(vector<vector<int>>& image, int _sr, int _sc, int _color) {color=_color;m=image.size(),n=image[0].size(),sr=_sr,sc=_sc;visit[sr][sc]=true;ret=image[sr][sc];image[sr][sc]=color;dfs(image,sr,sc);return image;}void dfs(vector<vector<int>>& image,int i,int j){for(int k=0;k<4;k++){int x=i+dx[k];int y=j+dy[k];if(x>=0&&x<m&&y>=0&&y<n&&image[x][y]==ret&&visit[x][y]==false){visit[x][y]=true;image[x][y]=color;dfs(image,x,y);}}}
};

总结:

这就跟上一个专题的那个深度优先遍历二维矩阵的方法一模一样,简直手拿把掐,就是设置全局变量,然后再一个点开始直接进行递归一次,出来即可。

2. 岛屿数量(medium)

题目意思很简单,就是看有几个 1是联通的就是说明分几块区域。

解析:

这就真的很简单了,就一眼dfs,直接秒杀:

思路肯定就是两次for()然后遍历每一个点,就从当前点如果既是‘1’ 又是没有被访问过的,那么这个时候就要加上bool数组了

bool visit[300][300];

注意:

此时从主函数进去的时候,就是要将当前的visit设置成true表示已经被访问过了,这样不会出现是循环的问题,那么就在这个双重for内进行ret++,因为每次进入dfs,当前块的岛屿的所有1都会被置为true,所以只要能进入一次dfs说明就是一块岛屿。

后面就是我们熟悉的固定套路了,回溯+递归。

void dfs(vector<vector<char>>& grid,int i,int j,vector<vector<bool>>& vis)

    {

        vis[i][j]=true;

        for(int k=0;k<4;k++)

        {

            int x=dx[k]+i,y=dy[k]+j;

            if(x>=0&&x<m&&y>=0&&y<n&&vis[x][y]==false&&grid[x][y]=='1')

            {

                dfs(grid,x,y,vis);

            }

        }

    }

class Solution {
public:int dx[4]={1,-1,0,0},dy[4]={0,0,-1,1};int m,n,ret;int numIslands(vector<vector<char>>& grid) {m=grid.size(),n=grid[0].size();vector<vector<bool>> vis(m,vector<bool>(n));for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(vis[i][j]==false&&grid[i][j]=='1'){ret++;dfs(grid,i,j,vis);}}}    return ret;}void dfs(vector<vector<char>>& grid,int i,int j,vector<vector<bool>>& vis){vis[i][j]=true;for(int k=0;k<4;k++){int x=dx[k]+i,y=dy[k]+j;if(x>=0&&x<m&&y>=0&&y<n&&vis[x][y]==false&&grid[x][y]=='1'){dfs(grid,x,y,vis);}}}
};

总结:

这个是一道狠狠狠经典的floodfill的题目,一定要做会做熟做透!~

3. 岛屿的最⼤⾯积(medium)

题目意思很简单,但是这题跟上面几题有那么一点点的不一样,一定要思考到位。

解析:

要求的是所有岛屿里面面积最大的那一块岛屿的面积。那么就是跟求岛屿的数量是不一样的。

我开始做的的时候还是按照以前的套路写下来,可是一直报错,说我面积会少1,这证明,再按照上面的写法的时候,只有满足我当前位置的四周有‘1’才能进入if语句进行+1,但是当我到最后一块的时候,我的四周全是被置为“true” 的字符‘1’,这样最后一块就进不去if()语句,那么就会少算一块面积。

解决办法:

那么就是再遍历所有岛屿的时候,计算面积的唯一办法就是只要进入dfs那么sum就++,这样就会让每次进入dfs的每一块面积都被计算上,保证不会漏掉。

那么这样随之visit这个数组也要随着改变,当前的位置就要跟着变成true

class Solution {
public:int dx[4]={0,-1,0,1};int dy[4]={-1,0,1,0};bool visit[100][100];int ret=0,m,n,sum;int maxAreaOfIsland(vector<vector<int>>& grid) {m=grid.size(),n=grid[0].size();for(int i=0;i<m;i++)for(int j=0;j<n;j++){if(grid[i][j]==1&&visit[i][j]==false){sum=0;visit[i][j]=true;dfs(grid,i,j);ret=max(ret,sum);}}return ret;}void dfs(vector<vector<int>>& grid,int i,int j){sum++;visit[i][j]=true;for(int k=0;k<4;k++){int x=dx[k]+i;int y=dy[k]+j;if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]==1&&visit[x][y]==false){dfs(grid,x,y);}}}
};

总结:

就是要专门总结这一题跟上面一题的区别,这题是求岛屿的面积,那么就要单独把计算拿出来进行计算;上面一题只是计算岛屿的数量,那么就只需要计算能进入岛屿几次就ok了

4. 被围绕的区域(medium)

题目意思就是说,只要有岛屿‘O’跟边缘相连,就活着,其它没有跟边缘相联的岛屿全被杀掉变成‘X’

解析:

我觉得我刚开始做出这题的办法有点蠢,但是我觉得我的思路是没有问题的:

题目要我们找到整个地图‘O’岛屿没有跟边缘相连的岛屿,然后把他全变成‘X’,这样我就逆向思维,找到所有已经再边缘存在的岛屿,然后dfs遍历它,把岛屿就置为true,然后最后来一次双重for遍历整个二维数组,这样就可以找到还是false的岛屿直接变成‘X’即可。

class Solution {
public:int dx[4]={0,-1,0,1};int dy[4]={-1,0,1,0};bool visit[250][250];int n,m;void solve(vector<vector<char>>& board) {m=board.size(),n=board[0].size();for(int i=0;i<n;i++){if(board[0][i]=='O'&&visit[0][i]==false){visit[0][i]=true;dfs(board,0,i);}if(board[m-1][i]=='O'&&visit[m-1][i]==false){visit[m-1][i]=true;dfs(board,m-1,i);}}for(int i=0;i<m;i++){if(board[i][0]=='O'&&visit[i][0]==false){visit[i][0]=true;dfs(board,i,0);}if(board[i][n-1]=='O'&&visit[i][n-1]==false){visit[i][n-1]=true;dfs(board,i,n-1);}}for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(board[i][j]=='O'&&visit[i][j]==false) board[i][j]='X';}}}void dfs(vector<vector<char>>& board,int i,int j){for(int k=0;k<4;k++){int x=dx[k]+i;int y=dy[k]+j;if(x>=0&&x<m&&y>=0&&y<n&&visit[x][y]==false&&board[x][y]=='O'){visit[x][y]=true;dfs(board,x,y);}}}
};

总结:

相通了还是很简单的,都是一样的问题,没有什么区别,都是dfs深度优先遍历后,利用visit数组来设置当前是否要访问。

5. 太平洋⼤西洋⽔流问题(medium)

题目意思有点难理解,就是说再二维矩阵里面如果有一个数字足够大,那么他就能流向其他比他小的方块上,知道这个方块上的水能流向pac和atl两个海洋的话,就把他单独添加进行返回。

解析:

方法一:

我开始做的时候,使考虑到遍历每一个方块进行dfs向四周进行扩散,如果能够扩散到pac和atl两个海洋就可以进行添加,但是这样我就要判断当前有没有递归到这两个海洋,我就要把这个二维矩阵分别加上两行和两列,对这个矩阵进行遍历把新增的这两行分别当作pac和atl,分别设置-1,-2,那么就只要当这个二维矩阵遍历到-1,或者 -2 那么就讲当前海洋的bool置为true

那么这种方法肯定很无脑还空间复杂度贼高,还要保证两个洋的bool left right同时为true,这种代码写出来了,但是我没有过测试用例。
时间复杂度太高,会有太多重复的路径要走,最后肯定会超时。

方法二:

那么就要逆向思考,因为要从二维矩阵的每一个数字开始进行dfs,知道能够流到哪个海洋,不妨进行逆向思维,考虑这个二维矩阵的每一个边界上的方块能够网上爬到哪里的最高位置,分别对这两个海洋设置两个bool同样大的二维数组,直到这两个bool二维数组能够出现重复的被置为true的方块,就说明当前块的值,能够流向两个海洋。

那么就分别设置两个bool二维矩阵:

        vector<vector<bool>> pac(m,vector<bool>(n));    
        vector<vector<bool>> atl(m,vector<bool>(n));

进行dfs设置,如果能够进入当前块的位置,说明当前海洋能流向这个位置:

    void dfs(vector<vector<int>>& heights,vector<vector<bool>>& vis,int i,int j)
    {
        vis[i][j]=true;

        for(int k=0;k<4;k++)
        {
            int x=dx[k]+i;
            int y=dy[k]+j;
            if(x>=0&&x<m&&y>=0&&y<n&&vis[x][y]==false&&heights[x][y]>=heights[i][j])
            {
                dfs(heights,vis,x,y);
            }
        }
    }

最后就是判断两个bool数组是不是会有重复的数据块,判断两个数据块是否同时为true

 if(pac[i][j]&&atl[i][j]) ret.push_back({i,j});

class Solution {
public:int dx[4]={0,-1,0,1};int dy[4]={-1,0,1,0};int n,m;vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {m=heights.size(),n=heights[0].size();vector<vector<bool>> pac(m,vector<bool>(n));    vector<vector<bool>> atl(m,vector<bool>(n));vector<vector<int>> ret;for(int i=0;i<n;i++) dfs(heights,pac,0,i);for(int i=0;i<m;i++) dfs(heights,pac,i,0);for(int i=0;i<n;i++) dfs(heights,atl,m-1,i);for(int i=0;i<m;i++) dfs(heights,atl,i,n-1);for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(pac[i][j]&&atl[i][j]) ret.push_back({i,j});}}   return ret;}void dfs(vector<vector<int>>& heights,vector<vector<bool>>& vis,int i,int j){vis[i][j]=true;for(int k=0;k<4;k++){int x=dx[k]+i;int y=dy[k]+j;if(x>=0&&x<m&&y>=0&&y<n&&vis[x][y]==false&&heights[x][y]>=heights[i][j]){dfs(heights,vis,x,y);}}}
};

总结:

其实写出来并不难,主要就是要考虑用哪种角度来实现这种代码,具体还是跟上面几题没什么太大区别。
所谓正难则反,在dfs()体现的很好,只要正的方向考虑很麻烦,那么就可以考虑换个反方向进行思考。

6. 扫雷游戏(medium)

系统给出一个点击的位置click=[x,y] 然后寻找对应的坐标进行点击,如果点击的位子周围没有地雷,就全部都将‘E’ 置为 'B' 并且进行递归式的展开,直到递归式展开结束或者点击即使地雷就进行返回;当展开的过程中,当前位置附近有几颗地雷,当前位置就讲字符改为数字几。

解析:

题目意思理解清楚后就是说,系统给一个点击的坐标click[0,1];然后这个点击的坐标进行疯狂的递归式的展开,然后判断当前位置的附近八个放向是否会存在地雷,如果存在就说明当前位置被点击后要变成数字,那么就要定义一个sum变量来统计当前位置附近所有地雷的个数。

        for(int k=0;k<8;k++)
        {
            int x=dx[k]+i;
            int y=dy[k]+j;
            if(x>=0&&x<m&&y>=0&&y<n&&board[x][y]=='M') sum++;
        }

这里遍历当前位置的八个方向,来统计地雷的个数,如果当前位置附近有地雷就再就改成地雷的个数。然后就要进行返回上一层

如果没有地雷,那么就可以递归式进入下一层,判断当前位置的附近位置是个什么情况

if(x>=0&&x<m&&y>=0&&y<n&&board[x][y]=='E'&&visit[x][y]==false)

这里仍然要进行判断,下一个位置是没有被访问过,且visit是false的情况下,下一个位置是‘E’ ,跟之前的题目没有什么太大的变化。

唯一要注意的就是开头,系统给出的点击位置,当该位置就是地雷的时候,就直接结束游戏,并且将该位置置为‘X’。

class Solution {
public:bool visit[60][60];int dx[8]={-1,-1,-1,0,0,1,1,1};int dy[8]={-1,0,1,-1,1,-1,0,1};int n,m;vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {m=board.size(),n=board[0].size();if(board[click[0]][click[1]]=='M') {board[click[0]][click[1]]='X';return board;}dfs(board,click[0],click[1]);return board;}void dfs(vector<vector<char>>& board,int i,int j){int sum=0;for(int k=0;k<8;k++){int x=dx[k]+i;int y=dy[k]+j;if(x>=0&&x<m&&y>=0&&y<n&&board[x][y]=='M') sum++;}if(sum!=0) board[i][j]=sum+'0';else{board[i][j]='B';for(int k=0;k<8;k++){int x=dx[k]+i;int y=dy[k]+j;if(x>=0&&x<m&&y>=0&&y<n&&board[x][y]=='E'&&visit[x][y]==false){dfs(board,x,y);}}}}
};

总结:

模拟类型 dfs 题⽬。
⾸先要搞懂题⽬要求,也就是游戏规则。
从题⽬所给的点击位置开始,根据游戏规则,来⼀次 dfs 即可。

7. 衣橱整理(medium)

题目意思比较简单,但是还是有点难读懂,意思就是给定义一个k值,然后要你从[0,0]开始进行遍历,可以上下左右进行遍历,判断当前所在位置的下标的每一位和是否大于k,如果大于,那么就要进行回退了,否则,就可以一直遍历下去,然后统计满足条件的格子。

解析:

题目还真的挺简单的,就是只需要从[0,0]开始只进行一次dfs即可,也不用恢复现场,那么

设置全局变量:

ret,n,m,k

bool visit[][];

int dx[],dy[]

然后dfs(0,0)开始进行遍历,只要进入这个函数,就要设置visit为true,让ret++,说明此时已经满足了这个条件。

那么就是固定的深度优先遍历算法:

 if(x>=0&&x<m&&y>=0&&y<n&&visit[x][y]==false&&check(x,y)<k)

唯一要注意的判断条件就是check()函数,里面要求出x,y两个数字的所有位数之和。判断是小于k的才能进入下一层。 

class Solution {
public:int ret=0;int n,m,k;int dx[4]={0,-1,0,1};int dy[4]={-1,0,1,0};bool visit[110][110];int wardrobeFinishing(int _m, int _n, int _k) {m=_m,n=_n,k=_k;dfs(0,0);return ret;}void dfs(int i,int j){visit[i][j]=true;ret++;for(int k=0;k<4;k++){int x=dx[k]+i;int y=dy[k]+j;if(x>=0&&x<m&&y>=0&&y<n&&visit[x][y]==false&&check(x,y)<k){dfs(x,y);}}}int check(int i,int j){int sum=0;while(i){sum+=i%10;i/=10;}while(j){sum+=j%10;j/=10;}return sum;}
};

总结:

题目并不难,只要能读懂意思,我相信肯定就能写出来。

总结到这里~确实发现了自己的成长,虽然不是说一帆风顺,但总归是有结果发生,对我的收获很大,希望对你也是~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/56700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用由 Search AI 提供支持的自动导入功能加速 Elastic Observability 中的日志分析

作者&#xff1a;来自 Elastic Bahubali Shetti 通过自动化自定义数据集成&#xff0c;以创纪录的速度将日志迁移到 AI 驱动的日志分析。 Elastic 正在通过自动提取自定义日志来加速采用 AI 驱动的日志分析&#xff08;AI-driven log analytics&#xff09;&#xff0c;随着基…

时间序列预测(六)——循环神经网络(RNN)

目录 一、RNN的基本原理 1、正向传播&#xff08;Forward Pass&#xff09;&#xff1a; 2、计算损失&#xff08;Loss Calculation&#xff09; 3、反向传播——反向传播通过时间&#xff08;Backpropagation Through Time&#xff0c;BPTT&#xff09; 4、梯度更新&…

Flink时间语义和时间窗口

前言 在实际的流计算业务场景中&#xff0c;我们会发现&#xff0c;数据和数据的计算往往都和时间具有相关性。 举几个例子&#xff1a; 直播间右上角通常会显示观看直播的人数&#xff0c;并且这个数字每隔一段时间就会更新一次&#xff0c;比如10秒。电商平台的商品列表&a…

MySQL-15.DQL-分页查询

一.DQL-分页查询 -- 分页查询 -- 1. 从 起始索引0 开始查询员工数据&#xff0c;每页展示5条记录 select * from tb_emp limit 0,5; -- 2.查询 第1页 员工数据&#xff0c;每页展示5条记录 select * from tb_emp limit 0,5; -- 3.查询 第2页 员工数据&#xff0c;每页展示5条记…

6.计算机网络_UDP

UDP的主要特点&#xff1a; 无连接&#xff0c;发送数据之前不需要建立连接。不保证可靠交付。面向报文。应用层给UDP报文后&#xff0c;UDP并不会抽象为一个一个的字节&#xff0c;而是整个报文一起发送。没有拥塞控制。网络拥堵时&#xff0c;发送端并不会降低发送速率。可以…

Chromium 前端window对象c++实现定义

前端中window.document window.alert()等一些列方法和对象在c对应定义如下&#xff1a; 1、window对象接口定义文件window.idl third_party\blink\renderer\core\frame\window.idl // https://html.spec.whatwg.org/C/#the-window-object// FIXME: explain all uses of [Cros…

git 报错 SSL certificate problem: certificate has expired

git小乌龟 报错 SSL certificate problem: certificate has expired 场景复现&#xff1a; 原因&#xff1a; 这个错误表明你在使用Git时尝试通过HTTPS进行通信&#xff0c;但是SSL证书已经过期。这通常发生在使用自签名证书或证书有效期已到期的情况下。 解决方法: 1.如果是…

【思维导图】C语言—常见概念

hello&#xff0c;友友们&#xff0c;今天我们进入一个新的专栏——思维导图&#xff01; 思维导图帮助我们复习知识的同时建构出一个清晰的框架&#xff0c;我往后会不断更新各个专栏的思维导图&#xff0c;关注我&#xff0c;一起加油&#xff01; 今天我们回顾C语言中的常见…

智慧社区服务平台:基于Spring Boot的实现

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于web的智慧社区设计与实现的相关信息成…

意外发现!AI写作这样用,热点文章轻松超越同行90%!

做自媒体&#xff0c;写热点文章很重要。 热点自带流量&#xff0c;能很快吸引不少读者。 可很多自媒体新手很犯愁。 干货文还能勉强写出来&#xff0c;碰到热点文就不知咋办了。 为啥写热点文章这么难呢&#xff1f; 关键是得找个新颖角度切入。 要是只在网上反复复制粘贴那些…

R语言机器学习算法实战系列(九)决策树分类算法 (Decision Trees Classifier)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程下载数据加载R包导入数据数据预处理数据描述数据切割调节参数构建模型模型的决策树预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve特征的重要性保存模…

Spring Boot技术栈的电影评论网站设计与实现

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

基于手机模拟器开发游戏辅助的技术选择

开发基于手机模拟器的游戏辅助工具是一项复杂且具有挑战性的任务。为了帮助开发人员选择适合的技术方案并提供详尽的开发指导&#xff0c;我们将从以下几个方面进行分析&#xff1a;发展背景、技术选型、实现原理、实际案例和相关的法律与道德考量。 1. 发展背景 随着智能手机…

Android--第一个android程序

写在前边 ※安卓开发工具常用模拟器汇总Android开发者必备工具-常见Android模拟器(MuMu、夜神、蓝叠、逍遥、雷电、Genymotion...)_安卓模拟器-CSDN博客 ※一般游戏模拟器运行速度相对较快&#xff0c;本文选择逍遥模拟器_以下是Android Studio连接模拟器实现(先从以上博文中…

C++初阶(五)--类和对象(中)--默认成员函数

目录 一、默认成员函数&#xff08;Default Member Functions&#xff09; 二、构造函数&#xff08; Constructor&#xff09; 1.构造函数的基本概念 2.构造函数的特征 3.构造函数的使用 无参构造函数 和 带参构造函数 注意事项&#xff1a; 4.默认构造函数 隐式生成的…

Node-RED开源项目的modbus通信(TCP)

一、Modbus 通信协议 Modbus是一种串行通信协议&#xff0c;是Modicon公司&#xff08;现在的施耐德电气 Schneider Electric&#xff09;于1979年为使用可编程逻辑控制器&#xff08;PLC&#xff09;通信而发表。Modbus已经成为工业领域通信协议的业界标准&#xff08;De fact…

重庆大学软件工程考研,难度如何?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 重大软件专业可谓是最好上岸的985院校&#xff01;重庆大学24考研各大学院复试录取情况已出&#xff0c; 我们先说学硕部分&#xff1a; 招生人数&#xff1a; 重庆大学软件工程学硕近几年计划统招人数都不多&#xf…

【 截稿倒计时 | JPCS独立出版 | 检索快速稳定】第三届能源与动力工程国际学术会议(EPE 2024)

第三届能源与动力工程国际学术会议&#xff08;EPE 2024&#xff09; 2024 3rd International Conference on Energy and Power Engineering 2024年10月18日 线上会议 往届平均会后3个月完成见刊及EI检索&#xff0c;检索快速稳定~ EPE 2023 EI检索 EPE 2023 Scopus检索 …

Git_GitHub

Git_GitHub 创建远程仓库 远程仓库操作 创建远程仓库别名 基本语法 案例实操 推送本地分支到远程仓库 基本语法 案例实操 拉取代码 基本语法 案例实操 克隆远程仓库到本地 基本语法 案例实操 邀请加入团队 选择邀请合作者 填入想要合作的人 复制邀请函 接受邀…

C语言笔记(数据的存储篇)

目录 1.数据类型的详细介绍 2.整型在内存中的存储&#xff1a;原码、反码、补码 3.大小端字节序介绍及判断 4.浮点型的内存中的存储解析 1.数据类型的详细介绍 下述是内置类型&#xff1a; char // 字符数据类型 short // 短整型 int // 整型 long …