【九日集训】第八天:二级指针

二级指针顾名思义就是指针又嵌套了一个指针;
常用的变量是这样的int p = 1;
一级指针指向该变量 int * p1 = &p;
二级指针指向一级指针 int ** p2 = &p1;

解引用方法:
一级指针解引用是变量 int x = * p1;
二级指针解引用是一级指针 int * x1 = *p2;

二级指针内存申请模版:

int **myMalloc(int r, int c, int * returnSize, int ** returnColumnSizes) {// 创建返回二级指针数组int **ret = (int **)malloc(sizeof(int *) * r);// returnColumnSizes是二级指针,加一个*是一级指针,代表行;*returnColumnSizes = (int *)malloc(sizeof(int) * r);// returnSize解引用是常量,代表有多少行;*returnSize = r;// 遍历ret,设置每行列for(int i = 0; i < r; ++i) {ret[i] = (int *)malloc(sizeof(int) * c);(*returnColumnSizes)[i] = c;}return ret;
}

第一题 867. 转置矩阵

https://leetcode.cn/problems/transpose-matrix/description/
创建一个二级指针模版,只需要将数组中的ij变换位置即可;

/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/int **myMalloc(int r, int c, int * returnSize, int ** returnColumnSizes) {int ** ret = (int **)malloc(sizeof(int *) * r);*returnColumnSizes = (int *)malloc(sizeof(int) * r);*returnSize = r;for(int i = 0; i < r; ++i) {ret[i] = (int *)malloc(sizeof(int) * c);(*returnColumnSizes)[i] = c;}return ret;
}int** transpose(int** matrix, int matrixSize, int* matrixColSize, int* returnSize, int** returnColumnSizes) {int r = matrixColSize[0];int c = matrixSize;int ** res = myMalloc(r, c, returnSize, returnColumnSizes);for(int i = 0; i < r; ++i) {for(int j = 0; j < c; ++j) {res[i][j] = matrix[j][i];}}return res;
}

第二题 832. 翻转图像

https://leetcode.cn/problems/flipping-an-image/description/

/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/int ** myMalloc(int r, int c, int * returnSize, int ** returnColumnSizes) {int ** ret = (int **)malloc(sizeof(int *) * r);*returnSize = r;*returnColumnSizes = (int *)malloc(sizeof(int) * r);for(int i = 0; i < r; ++i) {ret[i] = (int *)malloc(sizeof(int) * c);(*returnColumnSizes)[i] = c;}return ret;
}int** flipAndInvertImage(int** image, int imageSize, int* imageColSize, int* returnSize, int** returnColumnSizes) {int n = imageSize;int ** res = myMalloc(n, n, returnSize, returnColumnSizes);for(int i = 0; i < n; ++i) {for(int j = 0; j < n; ++j) {res[i][j] = 1 - image[i][n - 1 - j];}}return res;}

第三题 566. 重塑矩阵

https://leetcode.cn/problems/reshape-the-matrix/description/

/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/
int **myMalloc(int r, int c, int * returnSize, int ** returnColumnSizes) {// 创建返回二级指针数组int **ret = (int **)malloc(sizeof(int *) * r);// returnColumnSizes是二级指针,加一个*是一级指针,代表行;*returnColumnSizes = (int *)malloc(sizeof(int) * r);// returnSize解引用是常量,代表有多少行;*returnSize = r;// 遍历ret,设置每行列for(int i = 0; i < r; ++i) {ret[i] = (int *)malloc(sizeof(int) * c);(*returnColumnSizes)[i] = c;}return ret;
}int** matrixReshape(int** mat, int matSize, int* matColSize, int r, int c, int* returnSize, int** returnColumnSizes) {int n = matSize;int m = matColSize[0];int **res = myMalloc(r, c, returnSize, returnColumnSizes);if(n * m != r * c) {*returnSize = n;for(int i = 0; i < n; ++i) {(*returnColumnSizes)[i] = m;}return mat;}int id;for(int i = 0; i < r; ++i) {for(int j = 0; j < c; ++j) {id = i * c + j;res[i][j] = mat[id / m][id % m];}}return res;
}

第四题 2022. 将一维数组转变成二维数组

https://leetcode.cn/problems/convert-1d-array-into-2d-array/description/
第一种:
这种方法好理解,创建二维数组判断是否能够构成二维数组都不难;
如果m * n != 一维数组长度则不能构成;
一维变为二维那里,可以先遍历原数组,然后根据二维数组每一行的开始元素都等于一维数组的0 n 2n 3n...判断是否可以整除n

int **myMalloc(int r, int c, int * returnSize, int **returnColumnSizes) {int **ret = (int **)malloc(sizeof(int *) * r);*returnSize = r;*returnColumnSizes = (int *)malloc(sizeof(int) * r);for(int i = 0; i < r; ++i) {ret[i] = (int *)malloc(sizeof(int) * c);(*returnColumnSizes)[i] = c;}return ret;
}int** construct2DArray(int* original, int originalSize, int m, int n, int* returnSize, int** returnColumnSizes) {int ** res = myMalloc(m, n, returnSize, returnColumnSizes);if(m * n != originalSize) {*returnSize = 0;return NULL;}int tr = 0, tc = 1;res[0][0] = original[0];for(int i = 1; i < originalSize; ++i) {if(i % n == 0) {tr++;tc = 0;}res[tr][tc++] = original[i];}return res;
}

第五题 1260. 二维网格迁移

https://leetcode.cn/problems/shift-2d-grid/description/

/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/int **myMalloc(int r, int c, int * returnSize, int ** returnColumnSizes) {// 创建返回二级指针数组int **ret = (int **)malloc(sizeof(int *) * r);// returnColumnSizes是二级指针,加一个*是一级指针,代表行;*returnColumnSizes = (int *)malloc(sizeof(int) * r);// returnSize解引用是常量,代表有多少行;*returnSize = r;// 遍历ret,设置每行列for(int i = 0; i < r; ++i) {ret[i] = (int *)malloc(sizeof(int) * c);(*returnColumnSizes)[i] = c;}return ret;
}int** shiftGrid(int** grid, int gridSize, int* gridColSize, int k, int* returnSize, int** returnColumnSizes){int r = gridSize;int c = gridColSize[0];int ** res = myMalloc(r, c, returnSize, returnColumnSizes);for(int i = 0; i < r; ++i) {for(int j = 0; j < c; ++j) {int index = (i * c + j + k) % (r * c);res[index / c][index % c] = grid[i][j];}}return res;
}

第六题 661. 图片平滑器

https://leetcode.cn/problems/image-smoother/description/

/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/int **myMalloc(int r, int c, int * returnSize, int ** returnColumnSizes) {// 创建返回二级指针数组int **ret = (int **)malloc(sizeof(int *) * r);// returnColumnSizes是二级指针,加一个*是一级指针,代表行;*returnColumnSizes = (int *)malloc(sizeof(int) * r);// returnSize解引用是常量,代表有多少行;*returnSize = r;// 遍历ret,设置每行列for(int i = 0; i < r; ++i) {ret[i] = (int *)malloc(sizeof(int) * c);(*returnColumnSizes)[i] = c;}return ret;
}
int rn[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
int cn[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
int** imageSmoother(int** img, int imgSize, int* imgColSize, int* returnSize, int** returnColumnSizes) {int r = imgSize;int c = imgColSize[0];int **res = myMalloc(r, c, returnSize, returnColumnSizes);for(int i = 0; i < r; ++i) {for(int j = 0; j < c; ++j) {int temp = img[i][j];int s = 1;for(int x = 0; x < 8; ++x) {int ir = i + rn[x];int ic = j + cn[x];if(ir < 0 || ic < 0 || ir >= r || ic >= c) {continue;}else {temp += img[ir][ic];s++;}}temp /= s;res[i][j] = temp;}}return res;
}

第七题 1314. 矩阵区域和

https://leetcode.cn/problems/matrix-block-sum/description/
这道题正规解法应该是前缀和,但是由于我才疏学浅,只能用四重循环暴力解出来了;
没想到竟然还能过~~~

 int **myMalloc(int r, int c, int * returnSize, int ** returnColumnSizes) {// 创建返回二级指针数组int **ret = (int **)malloc(sizeof(int *) * r);// returnColumnSizes是二级指针,加一个*是一级指针,代表行;*returnColumnSizes = (int *)malloc(sizeof(int) * r);// returnSize解引用是常量,代表有多少行;*returnSize = r;// 遍历ret,设置每行列for(int i = 0; i < r; ++i) {ret[i] = (int *)malloc(sizeof(int) * c);(*returnColumnSizes)[i] = c;}return ret;
}int** matrixBlockSum(int** mat, int matSize, int* matColSize, int k, int* returnSize, int** returnColumnSizes) {int m = matSize;int n = matColSize[0];int ** ret = myMalloc(m, n, returnSize, returnColumnSizes);for(int i = 0; i < m; ++i) {for(int j = 0; j < n; ++j) {ret[i][j] = 0;for(int x = i - k; x <= i + k; ++x) {if(x < 0 || x >= m)continue;for(int y = j - k; y <= j + k; ++y) {if(y < 0 || y >= n) continue;ret[i][j] += mat[x][y];}}}}return ret;
}

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

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

相关文章

【开源】基于Vue和SpringBoot的快递管理系统

项目编号&#xff1a; S 007 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S007&#xff0c;文末获取源码。} 项目编号&#xff1a;S007&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 快递类型模块2.3 快…

Linux配置Java多服务开机启动脚本(包含前置远程MySQL和NACOS)

因为公司内部原因导致服务器经常关机开机&#xff0c;每次重启就需要手动启动大量服务&#xff0c;所以决定将所有服务都配置到开机启动里面 正常的Java项目一般都会依赖MySQL和NACOS等服务&#xff0c;所以在配置开机启动的时候我们首先要考虑的是服务需不需要等待nacos等服务…

【读书笔记】微习惯

周日晚上尝试速读一本书《微习惯》&#xff0c;共七章看了下目录结构并不复杂&#xff0c;计划每章7-8分钟读完&#xff0c; 从20:15-21:00。读的时候&#xff0c;订下闹钟&#xff0c;催促着自己的进度。边读边记了一些要点和微信读书里面的划线。 第六章实践内容最为丰富&…

“此应用专为旧版android打造,因此可能无法运行”,问题解决方案

当用户在Android P系统上打开某些应用程序时&#xff0c;可能会弹出一个对话框&#xff0c;提示内容为&#xff1a;“此应用专为旧版Android打造&#xff0c;可能无法正常运行。请尝试检查更新或与开发者联系”。 随着Android平台的发展&#xff0c;每个新版本通常都会引入新的…

wvp gb28181 pro 平台国标级连功能说明

国标28181不同平台之间支持两种连接方式&#xff0c;平级和上下级&#xff0c;WVP目前支持向上级级联。 测试环境 测试平台上级&#xff1a;192.168.10.209&#xff08;Alam centos8&#xff09; 测试平台下级&#xff1a;192.168.10.206&#xff08;ky10_x86&#xff09; 下级…

C++11--类的新功能

目录 类的新功能 默认成员函数 类成员变量初始化 强制生成默认的关键子default 禁止生成默认成员函数关键字delete 继承和多态中final和override关键字 类的新功能 默认成员函数 八个默认成员函数 在C11之前,一个类中有如下六个默认成员函数: 构造函数析构函数拷贝构造…

2023-12-03 C语言最小二乘法备忘

点击 <C 语言编程核心突破> 快速C语言入门 C语言最小二乘法备忘 前言一、数学公式二、代码总结 前言 要解决问题: 最小二乘法实现线性回归的C语言实现, 这个数学公式转为C语言. 一、数学公式 设有 n n n 组数据 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x n , y n ) …

KDE环境文件夹user-dirs为英文

KDE环境文件夹user-dirs 修改KDE主页文件夹为英文 该文件路径 ~/.config/user-dirs.dirs打开后会发现里面的内容如下 # This file is written by xdg-user-dirs-update # If you want to change or add directories, just edit the line youre # interested in. All local …

openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表

文章目录 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表140.1 相关概念140.2 操作步骤140.3 维护建议 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表 为了保证数据库的有效运行&#xff0c;数据库必须在插入/删除操作后&#xff0c;基于…

Ant Design Pro 框架设置API Token拦截器的功能

分享记录一个解决方法&#xff0c;希望对大家有帮助。 找到文件&#xff0c;然后定义一个方法。最后调用一下即可。 代码我也给你贴上了。 // 获取token 拦截方法 const setTokenRequest (config: any) > {const token 30|eh5GNXWRe5rO4XLjbbnqy132RABfiKqI338EoIhqc790a…

思维模型 反馈效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。反馈促进改进。 1 反馈效应的应用 1.1 反馈效应在营销中的应用 1 “可口可乐与百事可乐之战” 在 20 世纪 80 年代&#xff0c;可口可乐公司是全球最大的饮料公司之一&#xff0c;其市场…

利用reddit的api进行爬虫

1 介绍 Reddit是一个社交新闻聚合网站&#xff0c;用户可以发布、评价和讨论各种话题。Reddit的内容涵盖了广泛的主题&#xff0c;可以从中获取大量的文本数据进行情绪分析。 2 注册 2.1 注册reddit 你需要先注册一个reddit的账号。 2.2 注册api https://www.reddit.com/…

文科专业和编程基础薄弱的女孩子做软件的神器——aardio学习资源入门

相关资源 aardio 开发桌面应用&#xff0c;这几点必须要掌握&#xff01; - 星安果的文章 - 知乎 https://zhuanlan.zhihu.com/p/430970376 从使用者角度来为aardio编程软件说句话 - popdes的文章 - 知乎 https://zhuanlan.zhihu.com/p/461290014 故事和情怀 优点 1 快捷 2 …

HarmonyOS开发(九):数据管理

1、概述 1.1、功能简介 数据管理为开发者提供数据存储、数据管理能力。 它分为两个部分&#xff1a; 数据存储&#xff1a;提供通用数据持久化能力&#xff0c;根据数据特点&#xff0c;分为用户首选项、键值型数据库和关系型数据库。数据管理&#xff1a;提供高效的数据管…

Bean的加载控制

Bean的加载控制 文章目录 Bean的加载控制编程式注解式ConditionalOn*** 编程式 public class MyImportSelector implements ImportSelector {Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {try {Class<?> clazz Class.forName("…

UCore-OS实验Lab0

实验内容&#xff1a;搭建ucore-os的实验环境 实验准备内容&#xff1a;vmware虚拟机&#xff0c;ubuntu22.04镜像&#xff0c;qemu7.0.0源码 ucore代码地址 GitHub - chyyuu/os_kernel_lab at x86-32 实验步骤&#xff1a; 在vmware中安装ubuntu&#xff0c;因为我个人喜欢…

★448. 找到所有数组中消失的数字

★448. 找到所有数组中消失的数字 使用数组本身当作哈希表 考虑让nums数组本身当作哈希表。 遍历nums&#xff0c;每遇到一个数x&#xff0c;就让在x-1位置处的数n。 再次遍历nums&#xff0c;如果遇到i位置上数nums[i]不大于n&#xff0c;则i1并没有出现。 eg&#xff1a; …

【智能家居】四、网络服务器线程控制功能点

网络控制 网络线程控制功能点代码 inputCommand.h&#xff08;输入控制指令&#xff09;socketControl.c&#xff08;socket网络控制指令&#xff09;main.c&#xff08;主函数&#xff09;编译运行结果 网络控制 Linux网络编程 “网络控制”&#xff08;Network Control&a…

openEuler学习04-ssl升级到openssl-1.1.1w

当前环境ssl的版本是 1.1.1f &#xff0c;计划升级到openssl-1.1.1w [roottest ~]# more /etc/os-release NAME"openEuler" VERSION"20.03 (LTS-SP3)" ID"openEuler" VERSION_ID"20.03" PRETTY_NAME"openEuler 20.03 (LTS-SP3)&q…

ES6 Promise的用法,async/await异步处理同步化

文章目录 一、什么是promise &#xff1f;二、await / async ES7的新规范&#xff0c;异步处理同步化 一、什么是promise &#xff1f; promise是解决异步的方法&#xff0c;本质上是一个构造函数&#xff0c;可以用它实例化一个对象。对象身上有resolve、reject、all&#xff…