【leetcode_1601】【困难】maximum-number-of-achievable-transfer-requests / 最多可达成的换楼请求数目

本文主要是介绍【leetcode_1601】【困难】maximum-number-of-achievable-transfer-requests / 最多可达成的换楼请求数目,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • URL
  • 题目
  • 分析
  • 源码
  • 源码概述
  • 小结

URL

链接:https://leetcode-cn.com/problems/maximum-number-of-achievable-transfer-requests/


题目

[截图]
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


分析

[截图]


源码

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>int maximum_requests(int n, int **requesets, int requeset_size, int *requeset_col_size){int * delta = (int *)malloc(sizeof(int) * n);  	// n栋楼int ans = 0, m = requeset_size;					// m个请求for (int  mask = 0; mask < (1 << m); ++mask){int cnt = __builtin_popcount(mask);  		// GCC 内建函数 统计mask中1的个数, 平台不通用,不一定可移植if( cnt <= ans){  							// 如果当前可响应的请求 <= 已经响应过的请求个数(现在楼层变化的数量) ,则判断下一个请求是否可行continue;}memset(delta, 0, sizeof(int) * n);   		// n栋楼的变化数量δ for (int i = 0; i < m; i++){				// 遍历m个请求if (mask & (1 << i)){					// 如果第i个请求被选中,则from楼增加的人数++,to楼的人数--++delta[requesets[i][0]];--delta[requesets[i][1]];}}bool flag = true;/* 遍历n栋楼的变化是否==0,不为0则表示响应后无法满足楼层变化相同的要求,也即无法响应这次请求 */for (int i = 0; i < n; ++i){if (delta[i] != 0){flag = false;break;}}/* 如果请求可被满足,则可响应请求数ans++ */if (flag){ans = cnt;}}return ans;
}int main()
{
#ifdef TEST_1int n = 5; int **requesets = (int **)malloc(sizeof(int *) * 6);int arr[6][2] = {{0,1},{1,0},{0,1},{1,2},{2,0},{3,4}};for (int i = 0; i < 6; i++){requesets[i] = (int *)malloc(sizeof(int) * 2);}for (int i = 0; i < 6; i++){for (int j = 0; j < 2; j++){requesets[i][j] = arr[i][j];}}int ret = maximum_requests(n, requesets, 6, NULL);printf("ret : 5 = %d ?\n",ret);for (int i = 0; i < 6; i++){free(requesets[i]);}free(requesets);return 0;
#elseint n = 3; int **requesets = (int **)malloc(sizeof(int *) * 6);int arr[3][2] = {{0,0},{1,2},{2,1}};for (int i = 0; i < 3; i++){requesets[i] = (int *)malloc(sizeof(int) * 2);}for (int i = 0; i < 3; i++){for (int j = 0; j < 2; j++){requesets[i][j] = arr[i][j];}}int ret = maximum_requests(n, requesets, 3, NULL);printf("ret : 3 = %d ?\n",ret);for (int i = 0; i < 3; i++){free(requesets[i]);}free(requesets);return 0;
#endif
}

源码概述

  1. 请求m长的二进制数mask存储所有的请求个数,用bit位表示第i次请求。主要是m主要用于控制遍历响应次数
  2. 用delta[楼层号]表示第i次请求后楼层的变化值,为0则表示这次请求后满足“每个楼转入数=转出数”
  3. 遍历上述delta[]是否为0,可被满足则进入下一次请求,即mask下一bit+1,总共m个bit位

小结

  1. 用到了一个GCC的内建函数__builtin_popcount(mask),判断bit为1的个数。学习到了,用二进制表示请求个数,配合内建函数。
  2. 一个delta[]表示响应每次请求后各个楼层变化数量,每次请求可调整两栋楼的变化数量,这也是注意点。

这篇关于【leetcode_1601】【困难】maximum-number-of-achievable-transfer-requests / 最多可达成的换楼请求数目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/469127

相关文章

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Spring Boot Controller处理HTTP请求体的方法

《SpringBootController处理HTTP请求体的方法》SpringBoot提供了强大的机制来处理不同Content-Type​的HTTP请求体,这主要依赖于HttpMessageCo... 目录一、核心机制:HttpMessageConverter​二、按Content-Type​处理详解1.

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码