Leetcode 第 387 场周赛题解

Leetcode 第 387 场周赛题解

  • Leetcode 第 387 场周赛题解
    • 题目1:3069. 将元素分配到两个数组中 I
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:3070. 元素和小于等于 k 的子矩阵的数目
      • 思路
      • 代码
      • 复杂度分析
    • 题目3:3071. 在矩阵上写出字母 Y 所需的最少操作次数
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:3072. 将元素分配到两个数组中 II
      • 思路
      • 代码
      • 复杂度分析

Leetcode 第 387 场周赛题解

题目1:3069. 将元素分配到两个数组中 I

思路

简单地按题意模拟。

代码

/** @lc app=leetcode.cn id=3069 lang=cpp** [3069] 将元素分配到两个数组中 I*/// @lc code=start
class Solution
{
public:vector<int> resultArray(vector<int> &nums){vector<int> arr1, arr2;arr1.push_back(nums[0]);arr2.push_back(nums[1]);for (int i = 2; i < nums.size(); i++){if (arr1.back() > arr2.back())arr1.push_back(nums[i]);elsearr2.push_back(nums[i]);}vector<int> result(arr1.begin(), arr1.end());for (int &x : arr2)result.push_back(x);return result;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 是数组 nums 的元素个数。

空间复杂度:O(n),其中 n 是数组 nums 的元素个数。

题目2:3070. 元素和小于等于 k 的子矩阵的数目

思路

二维前缀和的模板题。

代码

/** @lc app=leetcode.cn id=3070 lang=cpp** [3070] 元素和小于等于 k 的子矩阵的数目*/// @lc code=start// 二维前缀和class Solution
{
public:int countSubmatrices(vector<vector<int>> &grid, int k){if (grid.empty())return 0;if (grid[0][0] > k)return 0;int m = grid.size(), n = m ? grid[0].size() : 0;// sum[i + 1][j + 1] 表示以 grid[0][0] 为左上角,// 以 grid[i][j] 为右下角的子矩阵的元素和 vector<vector<int>> sum(m + 1, vector<int>(n + 1, 0));int count = 0;for (int i = 0; i < m; i++)for (int j = 0; j < n; j++){sum[i + 1][j + 1] = sum[i + 1][j] + sum[i][j + 1] - sum[i][j] + grid[i][j];if (sum[i + 1][j + 1] <= k)count++;}return count;}
};
// @lc code=end

复杂度分析

时间复杂度:O(mn),其中 m 和 n 分别为二维数组 grid 的行数和列数。

空间复杂度:O(mn),其中 m 和 n 分别为二维数组 grid 的行数和列数。

题目3:3071. 在矩阵上写出字母 Y 所需的最少操作次数

思路

统计 Y 中的元素出现次数,记到一个长为 3 的数组 cnt1 中。统计不在 Y 中的元素出现次数,记到一个长为 3 的数组 cnt2 中。

计算最多可以保留多少个元素不变,设这个值为 maxNotChange。

在 0,1,2 中枚举 i 和 j,其中 i≠j。让 Y 中的元素都变成 i,不在 Y 中的元素都变成 j,那么 maxNotChange 就是 cnt1[i]+cnt2[j] 的最大值。

最后返回 n2−maxNotChange,即最少要修改的元素个数。

代码

/** @lc app=leetcode.cn id=3071 lang=cpp** [3071] 在矩阵上写出字母 Y 所需的最少操作次数*/// @lc code=start
class Solution
{
public:int minimumOperationsToWriteY(vector<vector<int>> &grid){int n = grid.size();    // n 为奇数vector<int> cnt1(3, 0); // 字母 Y 单元格各数字的出现次数vector<int> cnt2(3, 0); // 非字母 Y 单元格各数字的出现次数auto isY = [&](int i, int j) -> bool{if (i < 0 || i > n || j < 0 || j > n)return false;if (i == j && i <= n / 2)return true;if (i + j == n - 1 && i <= n / 2)return true;if (i >= n / 2 && j == n / 2)return true;return false;};for (int i = 0; i < n; i++)for (int j = 0; j < n; j++){int x = grid[i][j];if (isY(i, j))cnt1[x]++;elsecnt2[x]++;}int max_not_change = 0;for (int i = 0; i < 3; i++)for (int j = 0; j < 3; j++)if (i != j)max_not_change = max(max_not_change, cnt1[i] + cnt2[j]);return n * n - max_not_change;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n2+k2),其中 n 为 grid 的长度,k=3。

空间复杂度:O(k),其中 k=3。

题目4:3072. 将元素分配到两个数组中 II

思路

题解:离散化 + 树状数组(附练习题)Python/Java/C++/Go

在这里插入图片描述

代码

/** @lc app=leetcode.cn id=3072 lang=cpp** [3072] 将元素分配到两个数组中 II*/// @lc code=start
class Fenwick
{vector<int> tree;public:Fenwick(int n) : tree(n) {}// 把下标为 i 的元素增加 1void add(int i){while (i < tree.size()){tree[i]++;i += i & -i;}}// 返回下标在 [1,i] 的元素之和int pre(int i){int res = 0;while (i > 0){res += tree[i];i &= i - 1;}return res;}
};class Solution
{
public:vector<int> resultArray(vector<int> &nums){auto sorted = nums;ranges::sort(sorted);sorted.erase(unique(sorted.begin(), sorted.end()), sorted.end());int m = sorted.size();vector<int> a{nums[0]}, b{nums[1]};Fenwick t1(m + 1), t2(m + 1);t1.add(ranges::lower_bound(sorted, nums[0]) - sorted.begin() + 1);t2.add(ranges::lower_bound(sorted, nums[1]) - sorted.begin() + 1);for (int i = 2; i < nums.size(); i++){int x = nums[i];int v = ranges::lower_bound(sorted, x) - sorted.begin() + 1;int gc1 = a.size() - t1.pre(v); // greaterCount(a, v)int gc2 = b.size() - t2.pre(v); // greaterCount(b, v)if (gc1 > gc2 || gc1 == gc2 && a.size() <= b.size()){a.push_back(x);t1.add(v);}else{b.push_back(x);t2.add(v);}}a.insert(a.end(), b.begin(), b.end());return a;}
};
// @lc code=end

复杂度分析

时间复杂度:O(nlog⁡n),其中 n 为数组 nums 的长度。

空间复杂度:O(n),其中 n 为数组 nums 的长度。

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

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

相关文章

linux:线程的控制

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、线程的总结1. 线程的优点2. 线程的缺点3. 线程异常4.线程和进程 二、线程的控制创建线程线程终止线程等待获取返回值 线程分离 总结 前言 本文作为我对于线程的…

[技术杂谈]解决右键没有vscode打开选项的问题

问题&#xff1a; 点击鼠标右键没有‘使用vscode打开’的选项。 原因&#xff1a; 在安装时没有勾选相关选项 解决办法&#xff1a; 新建一个reg文件写入下面文件&#xff0c;注意替换自己真实Code.exe路径 Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\she…

深入理解Java多线程与线程池:提升程序性能的利器

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一、实现多线程 1.1. 继承Thread类 1.2. 实现Runnab…

深入浅出计算机网络 day.1 概论③ 电路交换、分组交换和报文交换

人无法同时拥有青春和对青春的感受 —— 04.3.9 内容概述 01.电路交换、分组交换和报文交换 02.三种交换方式的对比 一、电路交换、分组交换和报文交换 1.电路交换 计算机之间的数据传送是突发式的&#xff0c;当使用电路交换来传送计算机数据时&#xff0c;其线路的传输效率一…

构建可靠的数据基础:HDFS的架构优势与基本操作

目录 写在前面一、 HDFS概述1.1 HDFS简介1.2 HDFS优缺点1.2.1 优点1.2.2 缺点 1.3 HDFS组成架构1.4 HDFS文件块大小 二、HDFS的Shell操作&#xff08;开发重点&#xff09;2.1 基本语法2.2 命令大全2.3 常用命令实操2.3.1 上传2.3.2 下载2.3.3 HDFS直接操作 三、HDFS的API操作3…

代码随想录算法训练营第四十六天| 139.单词拆分、背包总结

文章目录 1.单词拆分[2.背包总结] 1.单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1…

使用VBA快速梳理多层级族谱(组织架构)

实例需求&#xff1a;族谱&#xff08;或者公司组织架构等&#xff09;都是典型的带有层级关系数据&#xff0c;例如下图中左侧表格所示。 A列为层级&#xff08;准确的讲是B列成员的层级&#xff09;&#xff0c;从一开始递增B列和C列为成员直接的父&#xff08;/母&#xff…

项目解决方案:视频监控接入和录像系统设计方案(下)

目 录 1.概述 2. 建设目标及需求 2.1建设总目标 2.2 需求描述 ​2.3 需求分析 3.设计依据与设计原则 3.1设计依据 3.2 设计原则 4.建设方案设计 4.1系统方案设计 4.2组网说明 5.产品介绍 5.1视频监控综合资源管理平台介绍 5.2视频录像服务器和存储 5.2.…

PostgreSQL中In, Exists在SQL查询中到底有无区别

前言 SQL查询当中&#xff0c;In和Exists子查询到底有无区别&#xff1f;记得很多年以前&#xff0c;确实是有相关的使用戒条的&#xff0c;或者说存在一些使用的惯用法。试图完全抹开两者的区别&#xff0c;就有点过了。 两者的主要区别&#xff1a; 从目的上讲&#xff0c…

数据库create详细用法

数据库版本&#xff1a;KingbaseES V008R006C008B0014 简介 本篇文章主要以kingbase为例介绍创建表的基本语法、使用案例和添加描述等方法&#xff0c;在目录2、目录3再详细介绍数据类型和列级约束。 文章目录如下 1. 基本用法 1.1. 基础语法 1.2. 基础案例 1.3. 添加描述 …

防御保护作业六

实验拓扑图&#xff1a; 配置过程&#xff1a; FW1 自定义服务ike 创建nat策略&#xff0c;让10.0.2.0/24访问192.168.1.0/24的流量不进行nat转换,并将这条策略置于nat策略最上面&#xff0c;优先匹配 FW3 测试

vmware添加新磁盘

文章目录 前言一、新增磁盘二、初始化磁盘1.查看2.初始化3.挂载 总结 前言 虚拟机磁盘空间很散乱&#xff0c;大部分都在/root和/home下不好操作&#xff0c;故考虑新增磁盘、增加挂载点。 一、新增磁盘 右键打开虚拟机设置 二、初始化磁盘 1.查看 fdisk -l2.初始化 …

基于SpringBoot在线考试系统

基于SpringBootHtmlJavascript css 的在线考试系统 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 一、项目背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内…

Java 学习和实践笔记(33):多态详解

多态&#xff08;polymorphism): 不同的对象&#xff0c;调用同一个方法&#xff0c;对象的行为状态可能完全不同&#xff0c;也就是说&#xff0c;有多种状态&#xff0c;这种情况就叫做多态。 以下的例子里&#xff0c;同样都是人吃饭这个方法&#xff0c;但是不同的人使用吃…

【SpringBoot框架篇】36.整合Tess4J搭建提供图片文字识别的Web服务

文章目录 简介文件下载引入依赖main函数中使用基于Springboot搭建OCR Web服务配置traineddata路径枚举用到的语种类型定义接口响应的json数据格式封装OCR服务引擎编写web提供服务的接口启动服务并且测试html demo扩展 项目配套代码 简介 Tess4J是一个基于Tesseract OCR引擎的J…

网上超市系统|基于Springboot的网上超市系统设计与实现(源码+数据库+文档)

网上超市系统目录 目录 基于Springboot的网上超市系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、商品信息管理 2、用户管理 1、 商品信息 2、购物车 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、…

重要通告 | 公司更名为“浙江实在智能科技有限公司”

更名公告 升级蜕变、砥砺前行 因业务快速发展和战略升级&#xff0c;经相关政府机构批准&#xff0c;自2024年3月1日起&#xff0c;原“杭州实在智能科技有限公司”正式更名为“浙江实在智能科技有限公司”。 更名后&#xff0c;公司统一社会信用代码不变&#xff0c;业务主体…

力扣hot100:152.乘积最大子数组(动态规划)

一个子数组问题&#xff0c;我们要使用线性dp&#xff0c;最好先考虑以i结尾&#xff0c;如果定义dp[i]为前i个数最大子数组乘积值 那么dp[i-1]就无法转移到dp[i]。因此我们先考虑dp[i]定义为以第i个数结尾的最大子数组乘积值。 53. 最大子数组和 最大子数组和是一个动态规划问…

b树(一篇文章带你 理解 )

目录 一、引言 二、B树的基本定义 三、B树的性质与操作 1 查找操作 2 插入操作 3 删除操作 四、B树的应用场景 1 数据库索引 2 文件系统 3 网络路由表 五、哪些数据库系统不使用B树进行索引 1 列式数据库 2 图形数据库 3 内存数据库 4 NoSQL数据库 5 分布式数据…

yolov5体验

无须安装CUDA&#xff0c;只需要有NVIDIA图形驱动即可 1. 安装Miniconda miniconda下载地址 1.1 安装细节 一个对勾都不要选择 1.2 配置环境变量 在环境变量Path中添加如下变量 C:\Server\miniconda C:\Server\miniconda\Scripts C:\Server\miniconda\Library\bin2. …