Leetcode - 周赛403

目录

一,3200. 三角形的最大高度

二,3195. 包含所有 1 的最小矩形面积 I

三,3196. 最大化子数组的总成本

四,3197. 包含所有 1 的最小矩形面积 II


一,3200. 三角形的最大高度

本题是一道模拟题,可以先排序再用两个变量枚举最大值和最小值,不断比较,返回最小值,代码如下:

class Solution {public double minimumAverage(int[] nums) {Arrays.sort(nums);int n = nums.length;double ans = 50.0;int i = 0, j = n - 1;while(i < j){ans = Math.min(ans, (nums[i] + nums[j])/2.0);i++;j--;}return ans;}
}

二,3195. 包含所有 1 的最小矩形面积 I

本题求最小矩形的面积,就是求它的长和宽,即求它的上下左右,代码如下:

class Solution {public int minimumArea(int[][] grid) {int n = grid.length, m = grid[0].length;int left=m, right=0, top=n, bottom=0;for(int i=0; i<n; i++){for(int j=0; j<m; j++){if(grid[i][j] == 1){left = Math.min(left, j);right = Math.max(right, j);top = Math.min(top, i);bottom = Math.max(bottom, i);}}}return (right-left+1)*(bottom-top+1);}
}

三,3196. 最大化子数组的总成本

本题可以使用选或不选来做,即选择第 i 个数是在上一个子数组中(选),还是以它为起点重开了一个子数组(不选),所以我们需要一个参数 i 来确定下标,此外,要计算子数组的cost(l,r),我们还需要一个参数 j 来判断该数是加还是减,定义dfs(i,j):[0,i] 的最大总成本,且由 j 可得知,如果选,当前数是加还是减(j==0 ? + : -):

  • 选,第 i 个数是在上一个子数组中,那么接下来要判断的是第 i + 1 个数选或不选,且 j^1,(j^1就是将0变1,1变0),即下一个状态是 dfs(i+1,j^1)
  • 不选,第 i 个是新子数组的开头,那么接下来要判断的是第 i + 1 个数选或不选,注意如果第i+1个数要选的话,那么一定是减法( j = 1),即下一个状态是 dfs(i+1, 1)

代码如下:

class Solution {public long maximumTotalCost(int[] nums) {int n = nums.length;memo = new long[n][2];for(long[] r : memo) Arrays.fill(r, -1);return dfs(0, 0, nums);}long[][] memo;long dfs(int i, int j, int[] nums){if(i == nums.length) return 0;if(memo[i][j] != -1) return memo[i][j];return memo[i][j] = Math.max(dfs(i+1, j^1, nums) + (j==0?1:-1)*nums[i], dfs(i+1, 1, nums)+nums[i]);}
}

记忆化 1:1 改成递推

由上述代码可知:

  • f [i][j]定义:[0,i] 的最大总成本,且由 j 可得知,如果选,当前数是加还是减(j==0 ? - : +)
  • 递推公式 f[i][j] = Math.max( f[ i+1 ][ j^1 ] + (j==0?-1:1)*nums[i],f[i+1][1]+nums[i])
  • 当 j = 0 时,f[i][0] = Math.max(f[i+1][1] - nums[i],f[i+1][1] + nums[i]) = f[i+1][1] + nums[i]
  • 当 j = 1 时,f[i][1] = Math.max(f[i+1][0] - nums[i],f[i+1][1] + nums[i])
  • 答案是f[0][0]

由递推公式可知,要得到f[i][j]就必须先得到f[i+1][j],所以需要倒着遍历,代码如下:

class Solution {public long maximumTotalCost(int[] nums) {int n = nums.length;long[][] f = new long[n+1][2];for(int i=n-1; i>=0; i--){f[i][0] = f[i+1][1] + nums[i];f[i][1] = Math.max(f[i+1][0] - nums[i], f[i+1][1] + nums[i]);}return f[0][0];}
}

四,3197. 包含所有 1 的最小矩形面积 II

本题可以直接暴力求解,题目要求三个不重叠的矩形,并没有要求每个矩形必须有1,所以我们可以将该矩形分成三个部分,在使用T2的方法求最小面积,就可以得到答案,我们一共有6种分法:

但是我们只需要写上面三个就行,因为下面三个可以由上面三个矩形向右旋转90度获得,代码如下:

class Solution {public int minimumArea(int[][] grid, int x1, int x2, int y1, int y2) {int left=y2, right=0, top=x2, bottom=0;for(int i=x1; i<x2; i++){for(int j=y1; j<y2; j++){if(grid[i][j] == 1){left = Math.min(left, j);right = Math.max(right, j);top = Math.min(top, i);bottom = Math.max(bottom, i);}}}return (right-left+1)*(bottom-top+1);}public int Sum(int[][] grid) {int n = grid.length, m = grid[0].length;int ans = n*m;if(n >= 3){for(int i=1; i<n; i++){for(int j=i+1; j<n; j++){//上中下int res = minimumArea(grid, 0, i, 0, m);res += minimumArea(grid, i, j, 0, m);res += minimumArea(grid, j, n, 0, m);ans = Math.min(ans, res);}}}if(n>=2 && m>=2){for(int i=1; i<n; i++){for(int j=1; j<m; j++){//上左右int res = minimumArea(grid, 0, i, 0, m);res += minimumArea(grid, i, n, 0, j);res += minimumArea(grid, i, n, j, m);ans = Math.min(ans, res);//左右下res = minimumArea(grid, 0, i, 0, j);res += minimumArea(grid, 0, i, j, m);res += minimumArea(grid, i, n, 0, m);ans = Math.min(ans, res);}}}return ans;}public int[][] rotate(int[][] grid){int n = grid.length, m = grid[0].length;int[][] a = new int[m][n];for(int i=0; i<n; i++){for(int j=0; j<m; j++){a[j][n-i-1] = grid[i][j];}}return a;}public int minimumSum(int[][] grid) {return Math.min(Sum(grid), Sum(rotate(grid)));}
}

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

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

相关文章

【Leetcode笔记】406.根据身高重建队列

文章目录 1. 题目要求2.解题思路 注意3.ACM模式代码 1. 题目要求 2.解题思路 首先&#xff0c;按照每个人的身高属性&#xff08;即people[i][0]&#xff09;来排队&#xff0c;顺序是从大到小降序排列&#xff0c;如果遇到同身高的&#xff0c;按照另一个属性&#xff08;即p…

分享超级实用的3款AI工具,让工作效率轻松翻倍

Hey&#xff0c;职场小伙伴们&#xff01;每天被堆积如山的工作压得喘不过气&#xff1f;加班成了日常&#xff0c;效率却不见提高&#xff1f;别急&#xff0c;今天就让我来给你们揭秘3款AI神器&#xff0c;它们将是你职场上的得力助手&#xff0c;让你的工作效率轻松翻倍&…

在Linux上部署和管理OpenStack云平台

部署和管理OpenStack云平台在Linux上是一个相当复杂的任务&#xff0c;涉及到多个组件和服务的配置和集成。下面是一个简化的步骤概述&#xff0c;用于在Linux上部署和管理OpenStack云平台&#xff1a; 1. 环境准备: • 确保你有足够数量的服务器作为控制节点、计算节点、网络…

ExoPlayer 迁移到 Media3 日志

参考网站 中文&#xff1a;https://developer.android.google.cn/media/media3/exoplayer/mappings?authuser3&hlzh-cn 英文&#xff1a;https://developer.android.google.cn/media/media3/exoplayer/migration-guide?hlen&authuser0 主体 替换 ExoPlayerMedia3c…

AR视频技术与EasyDSS流媒体视频管理平台:打造沉浸式视频体验

随着增强现实&#xff08;AR&#xff09;技术的飞速发展&#xff0c;其在各个领域的应用日益广泛。这项技术通过实时计算摄影机影像的位置及角度&#xff0c;将虚拟信息叠加到真实世界中&#xff0c;为用户带来超越现实的感官体验。AR视频技术不仅极大地丰富了我们的视觉体验&a…

菜鸡的原地踏步史02(◐‿◑)

每日一念 改掉自己想到哪写哪的坏习惯 二叉树 二叉树的中序遍历 class Solution {/**中序遍历左 - 中 - 右*/private List<Integer> res new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {if(root null) {return res;}tranve…

阶段总结——基于深度学习的三叶青图像识别

阶段总结——基于深度学习的三叶青图像识别 文章目录 一、计算机视觉图像分类系统设计二、训练模型2.1. 构建数据集2.2. 网络模型选择2.3. 图像数据增强与调参2.4. 部署模型到web端2.5. 开发图像识别小程序 三、实验结果3.1. 模型训练3.2. 模型部署 四、讨论五、参考文献&#…

Linux: network: openvswitch: disk 访问速度导致不稳定

在文件utilities/ov-ctl.in 文件中有提到一个目录:OVS_RUNDIR Default directories with "configure" option and environment variable override:logs: @LOGDIR@ (--with-logdir, OVS_LOGDIR)pidfiles and sockets: @RUNDIR@ (--with-rundir, OVS_RUNDIR)conf.db

Linux wget报未找到命令

wget报未找到命令需要安装wget 1、下载wget安装文件&#xff0c;本次于华为云资源镜像下载 地址&#xff1a;https://mirrors.huaweicloud.com/centos-vault/7.8.2003/os/x86_64/Packages/ 2、下载后上传到安装服务器/install_package&#xff0c;执行命令安装 rpm -ivh /i…

联合概率密度函数

目录 1. 什么是概率密度由联合概率密度求概率参考链接 1. 什么是概率密度 概率密度到底在表达什么&#xff1f; 外卖在20-40分钟内送达的概率 随机变量落在[20,40]之间的概率。下图中&#xff0c;对总面积做规范化处理&#xff0c;令总面积1&#xff0c; f ( x ) f(x) f(x)则成…

用requirements.txt配置环境

1. 在anaconda创建环境 创建Python版本为3.8的环境&#xff0c;与yolov5所需的包适配。 2. 在Anaconda Prompt中激活环境 (base) C:\Users\吴伊晴>conda activate yolov5 3. 配置环境 用指定路径中的requirements.txt配置环境。 (yolov5) C:\Users\吴伊晴>pip insta…

1、Reids之基础

Reids之基础 Redis是一个key-value的数据库&#xff0c;key一般是String类型&#xff0c;不过value的类型多种多样&#xff1a;&#xff08;未列全&#xff09; 类型例子Stringhello worldHash{name: “jack”, age: “20”}List[A->B->C]Set{A,B,C}SortedSet{A: 1, B:…

格式化代码 | 美化JSON、SQL

一、格式化JSON数据 打开Postman&#xff0c;将json数据粘到里面&#xff0c;点击Beautify即可美化代码。 二、格式化SQL 打开Navicat&#xff0c;新建查询&#xff0c;将sql粘进去点击”美化sql“即可。 三、浏览器 在线格式化 使用浏览器上的在线格式化网址。例如&…

使用ChatGPT写论文,只需四步突破论文写作瓶颈!

欢迎关注&#xff0c;为大家带来最酷最有效的智能AI学术科研写作攻略。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥&#xff08;yida985&#xff09;交流 地表最强大的高级学术AI专业版已经开放&#xff0c;拥有全球领先的GPT学术科研应用&#xff0c;有兴趣的朋友可…

Zero Knowledge Machine Learning-ZKML

目录 一、定义与背景 二、技术特点 三、应用场景 四、发展现状与挑战 五、未来展望 关于 ML 的快速入门知识 EZKL zkML(Zero Knowledge Machine Learning)是一种将零知识证明(Zero-Knowledge Proofs, ZKP)技术融入机器学习中的新兴技术。该技术旨在解决机器学习中的…

【深入探索】WebKit与WebGL:渲染高性能图形的秘密

标题&#xff1a;【深入探索】WebKit与WebGL&#xff1a;渲染高性能图形的秘密 WebKit是许多流行的网络浏览器的引擎&#xff0c;包括Safari和之前的版本的Chrome。它负责解析HTML、CSS和JavaScript&#xff0c;以及提供许多其他Web功能。WebGL是一种在浏览器中渲染3D图形的AP…

滑动窗口(C++)

文章目录 1、长度最小的子数组2、无重复字符的最长子串3、最大连续1的个数 Ⅲ4、将x减到0的最小操作数5、水果成篮6、找到字符串中所有字母异位词7、串联所有单词的子串8、最小覆盖子串 通常&#xff0c;算法的主体说明会放在第一道题中。但实际上&#xff0c;不通常。 算法在代…

大数据面试题之数据库(3)

数据库有必要建索引吗? MySQL缺点? 什么是脏读?怎么解决? 为什么要有三大范式&#xff0c;建数据库时一定要遵循吗? 数据库一般对哪些列建立索引?索引的数据结构? MySOL中索引的建立需要考虑哪些问题 关系型数据库与非关系型数据库区别 MySQL与Redis区别 …

前端代码规范 - 日志打印规范

在前端开发中&#xff0c;随着项目迭代升级&#xff0c;日志打印逐渐风格不一&#xff0c;合理的日志输出是监控应用状态、调试代码和跟踪用户行为的重要手段。一个好的日志系统能够帮助开发者快速定位问题&#xff0c;提高开发效率。本文将介绍如何在前端项目中制定日志输出规…

Linux网络基础与配置:基本网络命令详解

网络基础与配置&#xff1a;基本网络命令详解 在网络管理和配置中&#xff0c;掌握基本的网络命令是至关重要的。这些命令不仅能够帮助我们了解和诊断网络环境&#xff0c;还能进行网络配置和故障排除。本文将详细介绍常用的网络命令&#xff1a;ifconfig、ping、netstat、ss等…