C语言 | Leetcode C语言题解之第417题太平洋大西洋水流问题

embedded/2024/11/11 5:47:30/

题目:

题解

static const int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};void bfs(int row, int col, bool ** ocean, const int ** heights, int m, int n) {if (ocean[row][col]) {return;}ocean[row][col] = true;int * queue = (int *)malloc(sizeof(int) * m * n);int head = 0;int tail = 0;queue[tail++] = row * n + col;while (head != tail) {int row = queue[head] / n;int col = queue[head] % n;head++;for (int i = 0; i < 4; i++) {int newRow = row + dirs[i][0], newCol = col + dirs[i][1];if (newRow >= 0 && newRow < m && newCol >= 0 && newCol < n && heights[newRow][newCol] >= heights[row][col] && !ocean[newRow][newCol]) {ocean[newRow][newCol] = true;queue[tail++] = newRow * n + newCol;}}}free(queue);
}int** pacificAtlantic(int** heights, int heightsSize, int* heightsColSize, int* returnSize, int** returnColumnSizes){int m = heightsSize;int n = heightsColSize[0];bool ** pacific = (bool **)malloc(sizeof(bool *) * m);bool ** atlantic = (bool **)malloc(sizeof(bool *) * m);for (int i = 0; i < m; i++) {pacific[i] = (bool *)malloc(sizeof(bool) * n);atlantic[i] = (bool *)malloc(sizeof(bool) * n);memset(pacific[i], 0, sizeof(bool) * n);memset(atlantic[i], 0, sizeof(bool) * n);}for (int i = 0; i < m; i++) {bfs(i, 0, pacific, heights, m, n);}for (int j = 1; j < n; j++) {bfs(0, j, pacific, heights, m, n);}for (int i = 0; i < m; i++) {bfs(i, n - 1, atlantic, heights, m, n);}for (int j = 0; j < n - 1; j++) {bfs(m - 1, j, atlantic, heights, m, n);}int ** result = (int **)malloc(sizeof(int *) * m * n);*returnColumnSizes = (int *)malloc(sizeof(int) * m * n);int pos = 0;for (int i = 0; i < m * n; i++) {result[i] = (int *)malloc(sizeof(int) * 2);(*returnColumnSizes)[i] = 2;}for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (pacific[i][j] && atlantic[i][j]) {result[pos][0] = i;result[pos][1] = j;pos++;}}free(pacific[i]);free(atlantic[i]);}free(pacific);free(atlantic);*returnSize = pos;return result;
}

http://www.ppmy.cn/embedded/114545.html

相关文章

WPF入门教学二 安装与配置WPF开发环境

在安装与配置WPF&#xff08;Windows Presentation Foundation&#xff09;开发环境时&#xff0c;您需要遵循一系列步骤来确保一切顺利进行。WPF是微软提供的一个强大的UI框架&#xff0c;用于构建Windows桌面应用程序。以下是详细的安装与配置指南&#xff1a; 安装Visual S…

7-Zip压缩包如何添加密码,加密后如何取消

压缩包文件大家经常使用&#xff0c;最熟悉的肯定是RAR、ZIP格式压缩文件&#xff0c;但是7z压缩文件格式也很好用&#xff0c;它是三种压缩文件格式中压缩率最大的。想要将文件压缩到最小&#xff0c;使用7z格式可以达到最大化。那么在使用7z压缩格式的时候&#xff0c;我们可…

ITOP-2 分模块安装部署itop

ITOP-2 分模块安装部署itop 一、安装PHP组件1、查看当前Linux服务器安装的PHP版本2、安装源epel&#xff0c;安装源remi&#xff0c;安装yum-config-manager3、用yum-config-manager指定remi的php7.2仓库4、安装升级php5、验证当前PHP的版本 二、部署 MySQL 服务1、设置 Repo2、…

docker搭建个人网盘,支持多种格式,还能画图,一键部署

1&#xff09;效果 2&#xff09;步骤 2.1&#xff09;docker安装 docker脚本 bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrorsmain/DockerInstallation.sh)docker-compose脚本 curl -L "https://github.com/docker/compose/releases/late…

OpenWRT移植FCS950R和EC200A,并实现手机连接WiFi上网

一、EC200A配置 1.1、kernel配置 1.1.1、USB转串口 CONFIG_USB_SERIAL=y CONFIG_USB_SERIAL_WWAN=y CONFIG_USB_SERIAL_OPTION=y Symbol: USB_SERIAL_WWAN [=y] …

【Linux 从基础到进阶】Docker Compose 编排工具使用

Docker Compose 编排工具使用 Docker Compose 是 Docker 官方提供的容器编排工具,允许用户通过定义简单的 docker-compose.yml 文件来管理多容器应用。Compose 主要用于定义和运行多容器 Docker 应用程序,可以简化多个服务的部署、扩展和维护。 本文将详细介绍 Docker Comp…

微服务保护之熔断降级

在微服务架构中&#xff0c;服务之间的调用是通过网络进行的&#xff0c;网络的不确定性和依赖服务的不可控性&#xff0c;可能导致某个服务出现异常或性能问题&#xff0c;进而引发整个系统的故障&#xff0c;这被称为 微服务雪崩。为了防止这种情况发生&#xff0c;常用的一些…

git 操作远程别名

git操作远程别名 1. 查看远程别名2. 添加远程别名3. 修改远程别名4. 删除远程别名 1. 查看远程别名 # 只显示远程别名名称 $ git remote# 显示远程别名和url $ git remote -v# 显示指的远程别名名称 $ git remote show ChkSerInfo2. 添加远程别名 # <remote-name> 别名…