Leetcode - 周赛403

news2024/11/24 5:28:13

目录

一,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.coloradmin.cn/o/1898570.html

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

相关文章

从零开始手写STL库:Vector

从零开始手写STL库–Vector部分 文章目录 从零开始手写STL库--Vector部分Vector是什么Vector需要包含什么函数1&#xff09;基础成员函数2&#xff09;核心功能 基础成员函数的编写核心功能函数的编写总结 Vector是什么 std::vector 是一个动态数组&#xff0c;它在内存中以连…

安装Nginx以及简单使用 —— windows系统

一、背景 Nginx是一个很强大的高性能Web和反向代理服务&#xff0c;也是一种轻量级的Web服务器&#xff0c;可以作为独立的服务器部署网站&#xff0c;应用非常广泛&#xff0c;特别是现在前后端分离的情况下。而在开发过程中&#xff0c;我们常常需要在window系统下使用Nginx作…

SwiftUI中List的liststyle样式及使用详解添加、移动、删除、自定义滑动

SwiftUI中的List可是个好东西&#xff0c;它用于显示可滚动列表的视图容器&#xff0c;类似于UITableView。在List中可以显示静态或动态的数据&#xff0c;并支持垂直滚动。List是一个数据驱动的视图&#xff0c;当数据发生变化时&#xff0c;列表会自动更新。针对List&#xf…

关于下载obsidian SimpRead Sync中报错的问题

参考Kenshin的配置方法&#xff0c;我却在输入简悦的配置文件目录时多次报错。 bug如下&#xff1a; 我发现导出来的配置文件格式如下&#xff1a; 然后根据报错的bug对此文件名进行修改&#xff0c;如下&#xff1a; 解决。

【后端面试题】【中间件】【NoSQL】MongoDB查询优化2(优化排序、mongos优化)

优化排序 在MongoDB里面&#xff0c;如果能够利用索引来排序的话&#xff0c;直接按照索引顺序加载数据就可以了。如果不能利用索引来排序的话&#xff0c;就必须在加载了数据之后&#xff0c;再次进行排序&#xff0c;也就是进行内存排序。 可想而知&#xff0c;如果内存排序…

elasticsearch-users和elasticsearch-reset-password介绍

elasticsearch 内置 elastic, kibana, logstash_system,beats_system 共4个用户&#xff0c;用途如下&#xff1a; elastic 账号&#xff1a;内置的超级用户&#xff0c;拥有 superuser 角色。 kibana 账号&#xff1a;用来连接 elasticsearch 并与之通信。Kibana 服务器以该用…

ACL2023 | 如何用175条种子数据打造顶级指令模型?揭秘self-instruct:媲美InstructGPT001的秘密武器

1. 论文的核心问题和核心贡献 核心问题&#xff1a;该论文解决的问题是大规模语言模型在微调响应指令时过于依赖人工编写的指令数据&#xff0c;这些数据往往在数量、种类和创意上都存在局限&#xff0c;阻碍了模型的广泛泛化能力。研究的主要目标是开发一种方法&#xff0c;通…

Java实习手册(小白也看得懂)

秃狼说 距离俺发布的学习路线已经六个月了&#xff0c;那我给小伙伴的学习周期是四五个月左右&#xff0c;我相信大多的小伙伴已经学习的差不多了。正好赶上暑期实习的阶段&#xff0c;在暑期找到实习就成为暑期的头等大事。 实习经验在校招的起到决定性的作用&#xff0c;所…

代码随想录算法训练营第九天|151.翻转字符串里的单词、右旋字符串、28. 实现 strStr()、459.重复的子字符串

打卡Day9 1.151.翻转字符串里的单词2.右旋字符串3.28. 实现 strStr()4.459.重复的子字符串 1.151.翻转字符串里的单词 题目链接&#xff1a;翻转字符串里的单词 文档讲解&#xff1a; 代码随想录 思路&#xff1a;首先&#xff0c;移除多余的空格&#xff1b;然后&#xff0c…

Amesim应用篇-信号传递

前言 在Amesim中常见的信号传递是通过信号线连接&#xff0c;针对简单的模型通过信号线连接还可以是信号线清晰规整&#xff0c;方便查看。如果模型较复杂&#xff0c;传递信号的元件较多时&#xff0c;此时再继续使用信号线进行信号传递&#xff0c;可能会使草图界面看起来杂…

比赛获奖的武林秘籍:02 国奖秘籍-大学生电子计算机类竞赛快速上手的流程,小白必看

比赛获奖的武林秘籍&#xff1a;02 国奖秘籍-大学生电子计算机类竞赛快速上手的流程&#xff0c;小白必看 摘要 本文主要介绍了大学生参加电子计算机类比赛&#xff08;电赛、光电设计大赛、计算机设计大赛、嵌入式芯片与系统设计大赛等比赛&#xff09;的流程和涉及到的知识…

一本超简单能用Python实现办公自动化的神书!让我轻松摆脱办公烦恼!

《超简单&#xff1a;用Python让Excel飞起来》 这本书旨在通过Python与Excel的“强强联手”&#xff0c;为办公人员提供一套高效的数据处理方案。书中还介绍了如何在Excel中调用Python代码&#xff0c;进一步拓宽了办公自动化的应用范围。 全书共9章。第1~3章主要讲解Python编…

软件设计之Java入门视频(11)

软件设计之Java入门视频(11) 视频教程来自B站尚硅谷&#xff1a; 尚硅谷Java入门视频教程&#xff0c;宋红康java基础视频 相关文件资料&#xff08;百度网盘&#xff09; 提取密码&#xff1a;8op3 idea 下载可以关注 软件管家 公众号 学习内容&#xff1a; 该视频共分为1-7…

【C++】 解决 C++ 语言报错:Memory Leak

文章目录 引言 内存泄漏&#xff08;Memory Leak&#xff09;是 C 编程中常见且严重的内存管理问题之一。当程序分配了内存而没有正确释放&#xff0c;导致内存无法被重新利用时&#xff0c;就会发生内存泄漏。这种错误会导致程序占用越来越多的内存&#xff0c;最终可能导致系…

Using a text embedding model locally with semantic kernel

题意&#xff1a;在本地使用带有语义核&#xff08;Semantic Kernel&#xff09;的文本嵌入模型 问题背景&#xff1a; Ive been reading Stephen Toubs blog post about building a simple console-based .NET chat application from the ground up with semantic-kernel. Im…

C++基础21 二维数组及相关问题详解

这是《C算法宝典》C基础篇的第21节文章啦~ 如果你之前没有太多C基础&#xff0c;请点击&#x1f449;C基础&#xff0c;如果你C语法基础已经炉火纯青&#xff0c;则可以进阶算法&#x1f449;专栏&#xff1a;算法知识和数据结构&#x1f449;专栏&#xff1a;数据结构啦 ​ 目…

【MindSpore学习打卡】应用实践-计算机视觉-深入解析 Vision Transformer(ViT):从原理到实践

在近年来的深度学习领域&#xff0c;Transformer模型凭借其在自然语言处理&#xff08;NLP&#xff09;中的卓越表现&#xff0c;迅速成为研究热点。尤其是基于自注意力&#xff08;Self-Attention&#xff09;机制的模型&#xff0c;更是推动了NLP的飞速发展。然而&#xff0c…

嵌入式UI开发-lvgl+wsl2+vscode系列:6、布局(Layouts)

一、前言 这节总结一下整体页面的布局方式&#xff0c;lvgl的布局方式比较少&#xff0c;目前只有flex和grid两大类布局&#xff0c;即弹性布局和网格布局&#xff0c;弹性布局一般就是指定相对位置&#xff0c;网格布局就是将整个页面划分为网格状&#xff0c;我们做其它的UI…

【Python机器学习】处理文本数据——用tf-idf缩放数据

为了按照我们预计的特征信息量大小来缩放特征&#xff0c;而不是舍弃那些认为不重要的特征&#xff0c;最常见的一种做法就是使用词频-逆向文档频率&#xff08;tf-idf&#xff09;。这一方法对某个特定文档中经常出现的术语给与很高的权重&#xff0c;但是堆在语料库的许多文档…

pandas,dataframe使用笔记

目录 新建一个dataframe不带列名带列名 dataframe添加一行内容查看dataframe某列的数据类型新建dataframe时设置了列名&#xff0c;则数据类型为object dataframe的保存保存为csv文件保存为excel文件 dataframe属于pandas 新建一个dataframe 不带列名 df pd.DataFrame() 带…