leetcode解题思路分析(一百五十九)1380 - 1386 题

  1. 矩阵中的幸运数
    给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。
    幸运数 是指矩阵中满足同时下列两个条件的元素:
    在同一行的所有元素中最小
    在同一列的所有元素中最大

遍历查找并且保存即可,但是这不是最佳做法。本题其实挖掘以后可以发现,最多只可能有一个解。若某个位置值X是幸运数,假设另一个位置的值Y也是幸运数,X与Y一定不在同一行或同一列。假设Y上方和X同行的数,以及Y左侧和X同列的数,分别为X+A,X-B,则Y>X+A且Y<X-B,A<-B,明显无解。

class Solution {
public:vector<int> luckyNumbers (vector<vector<int>>& matrix) {std::set<int> line_min;vector<int>   ret;for (auto v : matrix) {int min_n = INT_MAX;for (auto n : v) {min_n = min(min_n, n);}line_min.insert(min_n);}int m = matrix.size();int n = matrix[0].size();for (int j = 0; j < n; ++j) {int max_n = INT_MIN;for (int i = 0; i < m; ++i) {max_n = max(max_n, matrix[i][j]);}if (line_min.count(max_n))ret.push_back(max_n);}return ret;}
};class Solution {
public:vector<int> luckyNumbers (vector<vector<int>>& matrix) {int m = matrix.size();int rowMax = 0, k;for (int i = 0; i < m; i++) {int c = min_element(matrix[i].begin(), matrix[i].end()) - matrix[i].begin();if (rowMax < matrix[i][c]) {rowMax = matrix[i][c];k = c;}}for (int i = 0; i < m; i++) {if (rowMax < matrix[i][k]) {return {};}}return {rowMax};}
};
  1. 将二叉搜索树变平衡
    给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。如果有多种构造方法,请你返回任意一种。如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二叉搜索树是 平衡的 。

构造中序遍历的序列,然后递归生成树。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<int> inorderSeq;void getInorder(TreeNode* o) {if (o->left) {getInorder(o->left);}inorderSeq.push_back(o->val);if (o->right) {getInorder(o->right);}}TreeNode* build(int l, int r) {int mid = (l + r) >> 1;TreeNode* o = new TreeNode(inorderSeq[mid]);if (l <= mid - 1) {o->left = build(l, mid - 1);}if (mid + 1 <= r) {o->right = build(mid + 1, r);}return o;}TreeNode* balanceBST(TreeNode* root) {getInorder(root);return build(0, inorderSeq.size() - 1);}
};
  1. 最大的团队表现值
    给定两个整数 n 和 k,以及两个长度为 n 的整数数组 speed 和 efficiency。现有 n 名工程师,编号从 1 到 n。其中 speed[i] 和 efficiency[i] 分别代表第 i 位工程师的速度和效率。从这 n 名工程师中最多选择 k 名不同的工程师,使其组成的团队具有最大的团队表现值。团队表现值 的定义为:一个团队中「所有工程师速度的和」乘以他们「效率值中的最小值」。请你返回该团队的​​​​​​最大团队表现值,由于答案可能很大,请你返回结果对 10^9 + 7 取余后的结果

采用「动一个,定一个」的策略——即我们可以枚举效率的最小值 e,在所有效率大于 e
​ 的工程师中选取不超过 k−1个,让他们的速度和最大

class Solution {
public:using LL = long long;struct Staff {int s, e;bool operator < (const Staff& rhs) const {return s > rhs.s;}};int maxPerformance(int n, vector<int>& speed, vector<int>& efficiency, int k) {vector<Staff> v;priority_queue<Staff> q;for (int i = 0; i < n; ++i) {v.push_back({speed[i], efficiency[i]});}sort(v.begin(), v.end(), [] (const Staff& u, const Staff& v) { return u.e > v.e; });LL ans = 0, sum = 0;for (int i = 0; i < n; ++i) {LL minE = v[i].e;LL sumS = sum + v[i].s;ans = max(ans, sumS * minE);q.push(v[i]); sum += v[i].s;if (q.size() == k) {sum -= q.top().s;q.pop();}}return ans % (int(1E9) + 7);}
};
  1. 两个数组间的距离值
    给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足 |arr1[i]-arr2[j]| <= d 。

本题直接暴力求解即可,更优雅的做法是对arr2进行排序,然后取最接近arr1[i]的两个数,因为他们是最重要的两个数,然后将这两个数和arr1[i]做差取绝对值,都>d则ok。

class Solution {
public:int findTheDistanceValue(vector<int>& arr1, vector<int>& arr2, int d) {int cnt = 0;for (auto n : arr1) {bool find = true;for (auto arr2_num : arr2) {if (std::abs(n - arr2_num) <= d) {find = false;break;}}if (find) {cnt++;}}return cnt;}
};
  1. 安排电影院座位
    如上图所示,电影院的观影厅中有 n 行座位,行编号从 1 到 n ,且每一行内总共有 10 个座位,列编号从 1 到 10 。给你数组 reservedSeats ,包含所有已经被预约了的座位。比如说,reservedSeats[i]=[3,8] ,它表示第 3 行第 8 个座位被预约了。请你返回 最多能安排多少个 4 人家庭 。4 人家庭要占据 同一行内连续 的 4 个座位。隔着过道的座位(比方说 [3,3] 和 [3,4])不是连续的座位,但是如果你可以将 4 人家庭拆成过道两边各坐 2 人,这样子是允许的。

很容易想到用位操作+掩码的方式解题,比较有趣的是1和10两个位置是无关紧要的,因此直接忽略,剩下8个刚好一字节

class Solution {
public:int maxNumberOfFamilies(int n, vector<vector<int>>& reservedSeats) {int left = 0b11110000;int middle = 0b11000011;int right = 0b00001111;unordered_map<int, int> occupied;for (const vector<int>& seat: reservedSeats) {if (seat[1] >= 2 && seat[1] <= 9) {occupied[seat[0]] |= (1 << (seat[1] - 2));}}int ans = (n - occupied.size()) * 2;for (auto& [row, bitmask]: occupied) {if (((bitmask | left) == left) || ((bitmask | middle) == middle) || ((bitmask | right) == right)) {++ans;}}return ans;}
};

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

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

相关文章

AI大模型语料库

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 语料库概述 语料库&#xff08;Corpus&#xff09;是一个存储了大量真实语言使用实例的集合&#xff0c;这些实例可以是文本、语音、视频等多种形式的语言数据。语料库通常…

ESP32 Error creating RestrictedPinnedToCore

随缘记&#xff0c;刚遇到&#xff0c;等以后就可能不想来写笔记了。 目前要使用到音频数据&#xff0c;所以去用ESP-ADF&#xff0c;但在使用例程上出现了这个API有问题&#xff0c;要去打补丁。 但是我打补丁的时候git bash里显示not apply&#xff0c;不能打上。 网上看到…

物联网开发tcp协议之——netty拆包问题

1.前言 tcp协议是物联网开发中比较常见的一种通信协议&#xff0c;而netty则是一tcp通信协议中一个比较优秀的框架。tcp协议是一种长连接的协议&#xff0c;是流式传输的&#xff0c;开发过程中最长遇见的问题就是拆包粘包问题。我目前对接过的物联网系列有智能家居设备&#…

神奇的python语法

今天发现一个神奇的语法规则 import numpy as np aa np.zeros((4,3)) print(aa) print(aa .shape[0] * aa. shape[1])结果是不报错的 结果是正常运行的 包括在jupyter里面&#xff0c;这种写法还是没有报错

氧兜:新一代隔热防晒膜,打造您的健康氧吧,开启品质生活新篇章

随着人们对生活品质追求的不断提升&#xff0c;氧兜品牌凭借创新科技&#xff0c;为您带来了新一代隔热防晒膜。它不仅具备卓越的隔热防晒功能&#xff0c;更能通过释放负氧离子&#xff0c;为您打造一个居家办公或出行环境的氧吧&#xff0c;让您的生活更加健康、舒适。 一、…

Linux开发:多进程通过shm_open/mmap共享内存

Linux编程:多进程间通过shmget共享内存_检测共享内存中 是否有数据-CSDN博客 介绍了通过SYS V的方式进行多进程间共享内存,这种方式属于比较久远的方式。 POSIX也提供了共享内存的方法,使用起来要更容易些式 其原理是利用Linux的tmpfs(Linux开发:tmpfs文件系统-CSDN博客)…

三十四篇:办公效率革命:深入探索办公自动化系统的全面策略

办公效率革命&#xff1a;深入探索办公自动化系统的全面策略 1. 引言 1.1 办公自动化系统&#xff08;OAS&#xff09;的定义与关键作用 在当前的企业环境中&#xff0c;办公自动化系统&#xff08;Office Automation System, OAS&#xff09;已成为提高效率和执行力的关键技…

全面守护你的健康ZL-0891A小动物多参数监护仪

简单介绍&#xff1a; 12.1英寸彩色TFT显示&#xff0c;分辨率800X600,采用数字血氧DSP算法&#xff0c;低灌注&#xff0c;小动物多参数监护仪具有优良的抗运动性能;动物用血压算法&#xff0c;支持测量各种动物类型,特有的中英文语音报警;支持USB数据导出&#xff0c;可以在…

Ubuntu部署开源网关Apache APISIX

说明 系统&#xff1a;Ubuntu 24.04 LTSDocker版本&#xff1a;v26.1.3Docker Compose版本&#xff1a;v2.26.1 下载和配置 Ubuntu需要安装Docker和Docker Compose 下载apisix-docker仓库 git clone https://github.com/apache/apisix-docker.git修改docker-compose 配置e…

C语言小例程8/100

题目&#xff1a;输出特殊图案&#xff0c;请在c环境中运行&#xff0c;看一看 程序分析&#xff1a;字符共有256个。不同字符&#xff0c;图形不一样。 #include<stdio.h> int main() {char a176,b219;printf("%c%c%c%c%c\n",b,a,a,a,b);printf("%c%c%c…

:长亭雷池社区版动态防护体验测评

序 长亭雷池在最近发布了动态防护功能&#xff0c;据说可以动态加密保护网页前端代码和阻止爬虫行为、阻止漏洞扫描行为等。今天就来体验测试一下 WAF 是什么 WAF 是 Web Application Firewall 的缩写&#xff0c;也被称为 Web 应用防火墙。区别于传统防火墙&#xff0c;WAF …

Vivado 设置关联使用第三方编辑器 Notepad++

目录 1.前言2.Vivado关联外部编辑器步骤3.Notepad的一些便捷操作 微信公众号获取更多FPGA相关源码&#xff1a; 1.前言 Vivado软件自带的编辑器超级难用&#xff0c;代码高亮对比不明显&#xff0c;而且白色背景看久了眼睛痛。为了写代码时有更加舒适的体验&#xff0c;可以…

速率限制中间件AspNetCoreRateLimit

AspNetCoreRateLimit AspNetCoreRateLimit 是一种 ASP.NET Core 速率限制解决方案&#xff0c;旨在控制客户端可以根据 IP 地址或客户端 ID 向 Web API 或 MVC 应用发出的请求速率。AspNetCoreRateLimit 包包含一个 IpRateLimitMiddleware 和一个 ClientRateLimitMiddleware&am…

LLama2源码分析——Rotary Position Embedding分析

参考&#xff1a;一文看懂 LLaMA 中的旋转式位置编码&#xff08;Rotary Position Embedding&#xff09; 原理推导参考自上文&#xff0c;以下结合huggingface代码分析公式计算过程 1 旋转角度计算 计算公式如下&#xff0c;其中d为词嵌入维度&#xff0c;这部分和论文原文…

STM32 音乐播放器之音频入门实验(pwm、dac、.wav、.mp3)

1.pwm实现简易电子琴实验 1.改变PWM频率&#xff0c;输出不同音调 2.改变占空比&#xff0c;调节音量大小 3.按键弹奏&#xff0c;支持按按键录取弹奏音 4.播放:中高低音&#xff1b;录取音&#xff1b;指定歌曲 5.支持按上一首&#xff0c;下一首&#xff0c;调弹奏速度&#…

Docker Desktop下载安装

Window下使用Docker推荐使用Docker Desktop; Docker Desktop是一款适用于Windows操作系统的桌面应用&#xff0c;它为开发人员提供了一个界面化操作Docker的环境&#xff0c;以便在本地环境中轻松创建、构建和运行Docker容器: Windows系统下Docker Desktop的安装 官网下载安装…

英国树莓派五大天王和你相约上海国际嵌入式展!

6月12日-14日 上海世博展览馆3号馆 H3馆 237展位 树莓派(Raspberry Pi),这个曾经让全球掀起"创客热潮"的小型单板电脑,如今已经成为嵌入式行业不可或缺的一员。作为行业先驱,树莓派基金会正携手团队,亮相2024年6月12日至6月14日在上海举办的 Embedded World上海国…

如何更精准定位你的Facebook广告受众?

Facebook广告成为吸引目标受众、推广产品和服务的重要工具之一。然而&#xff0c;要让广告取得更好的效果&#xff0c;关键在于精准定位受众。本文将介绍如何通过策略和技巧更精确地定位Facebook广告受众&#xff0c;提高广告投放的效果和转化率。 一、精准受众定位重要吗&…

值传递过程中的开销

当处理很大的字符串时&#xff0c;按值传递和按引用传递的区别会更加明显。让我们详细介绍一下字符串的拷贝过程以及占用的内存情况。 字符串按值传递 当你按值传递一个大字符串时&#xff0c;会发生以下过程&#xff1a; 创建临时副本&#xff1a; 在函数调用时&#xff0c;…

完全背包(从二维数组到一维滚动数组)

完全背包 二维dp数组完全背包1. 确定dp数组以及下标的含义2. 确定递推公式3. dp数组如何初始化4. 确定遍历顺序5. 举例推导dp数组完整代码: 一维滚动dp数组完全背包1.确定dp数组以及下标的含义2. 确定递推公式3. dp数组如何初始化4. 确定遍历顺序5. 举例推导dp数组完整代码&…