【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

相关文章

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

一文详解如何在Python中使用Requests库

《一文详解如何在Python中使用Requests库》:本文主要介绍如何在Python中使用Requests库的相关资料,Requests库是Python中常用的第三方库,用于简化HTTP请求的发... 目录前言1. 安装Requests库2. 发起GET请求3. 发送带有查询参数的GET请求4. 发起PO

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ