牛客美团2024年春招第一场笔试【技术】解题

1.小美的平衡矩阵

小美拿到了一个n∗n的矩阵,其中每个元素是 0 或者 1。
小美认为一个矩形区域是完美的,当且仅当该区域内 0 的数量恰好等于 1 的数量。
现在,小美希望你回答有多少个i∗i的完美矩形区域。你需要回答1≤i≤n的所有答案

输出描述:
输出n行,第i行输出i*i的完美矩形区域的数量
例子:
输入例子:
4
1010
0101
1100
0011
输出例子:
0
7
0
1

1.1解题思路

1.1.1条件:

1.通过题目我们知道0和1相等才是完美矩形区域,所以我们只需求出矩阵的1的个数就可以了,这时我们可以想到前缀和(专门求矩阵的和)
2.第i行输出i*i的完美矩形区域的数量,得知到这个是确定矩阵边长大小,边长范围是1到n,边长奇数的一定不可能0和1相等

1.2思路

前缀和

  1. 构建前缀和矩阵:建立数组 S [ n ] [ m ] 来统计矩形 ( 1 , 1 ) 到(n,m) 中1 的数量左上矩阵,只用每次遍历矩形的左上定点,就可以确定整个矩形大小
  2. 然后统计该矩形中 01 的具体数量,判断是否相等,左上顶点 ( i , j ) 的矩阵,右下顶点即为 ( x , y ) ,其中 x = i + k − 1 , y = j + k − 1
  3. 字符 1 的数量即为 s [ x ] [ y ] − s [ i − 1 ] [ y ] − s [ x ] [ j − 1 ] + s [ i − 1 ] [ j − 1 ],字符 0 的数量为 k × k/ 2
    在这里插入图片描述
import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {static int n = 201;static int sum[][] = new int[n][n];static int a [][] = new int[n][n];public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别int row = in.nextInt();char[][] charArray = new char[row][];in.nextLine();// 循环读取每一行的字符串,并转换为字符数组for (int i = 0; i < row; i++) {String line = in.nextLine(); // 读取一行字符串charArray[i] =line.toCharArray(); // 将字符串转换为字符数组,并存储在二维数组中}for (int i = 0 ; i < row; i++) {for (int j = 0; j < row; j++) {a[i + 1][j + 1] = Integer.parseInt(Character.toString(charArray[i][j]));sum[i + 1][j + 1] = sum[i][j + 1] + sum[i + 1][j] + a[i + 1][j + 1] - sum[i][j];}}//k是边长for (int k = 1; k <= row; k++) {if ((k & 1) == 1) { // 当边长为奇数时System.out.println(0); // 字符 1的数量不可能等于字符 0的数量// 在循环中的话,这里应该是 continue; continue;}int count = 0;for (int i = 1; i + k - 1 <= row ; i++ ) {for (int j = 1; j + k - 1 <= row ; j++) {int x = i + k - 1;int y = j + k - 1;//核心部分if (sum[x][y] - sum[i - 1][y] - sum[x][j - 1] + sum[i - 1][j - 1] ==(k * k / 2)  ) {count++;}}}System.out.println(count);}}
}

2.小美的数组询问

小美拿到了一个由正整数组成的数组,但其中有一些元素是未知的(用 0 来表示)。
现在小美想知道,如果那些未知的元素在区间[𝑙,𝑟]范围内随机取值的话,数组所有元素之和的最小值和最大值分别是多少?
共有𝑞次询问。
输出描述:
输出q行,每行输出两个正整数,代表所有元素之和的最小值和最大值。
示例1
输入例子:
3 2
1 0 3
1 2
4 4
输出例子:
5 6
8 8
例子说明:
只有第二个元素是未知的。
第一次询问,数组最小的和是 1+1+3=5,最大的和是 1+2+3=6。
第二次询问,显然数组的元素和必然为 8。

2.1解题思路

2.1.1条件:
  1. 通过题目我们可以知道求最小值一定取的是l值,最大值取的是r值
  2. 确定好区间取法后,我们要知道未知数的个数也就是0的个数,最终求出最大和最小值

思路

语法基础: 循环结构

  1. 求0的个数count
  2. [ l , r ] 区间,最小值为 sum + count × l ,最大值为 sum + count × r。
import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别//1.得到未知数的个数//2.得到l和r,l或者r*未知数的个数算出最大值最小值int number = in.nextInt();int query = in.nextInt();//算和的变量long sum = 0;long count = 0;for(int i = 0; i < number; i++){long temp = in.nextLong();sum+=temp;if(temp == 0){count++;}}for(int i = 0 ; i < query; i++){long l = in.nextLong();long r = in.nextLong();//min和max放到外面就提交不通过// long min = sum + (count * l);// long max = sum + (count * r);System.out.println((sum + (count * l) )+ " " + (sum + (count * r)));}}
}

3.小美的 MT

MT 是美团的缩写,因此小美很喜欢这两个字母。现在小美拿到了一个仅由大写字母组成字符串,她可以最多操作k次,每次可以修改任意一个字符。小美想知道,操作结束后最多共有多少个’M’和’T’字符?
输出描述:
输出操作结束后最多共有多少个’M’和’T’字符。
示例1
输入例子:
5 2
MTUAN
输出例子:
4
例子说明:
修改第三个和第五个字符,形成的字符串为 MTTAM,这样共有 4 个’M’和’T’。
语法基础: 顺序结构

3.1条件

  1. 找出字符串中 M 和 T 的字符数量count,答案即为count+q和n(字符串长度)的最小值。
import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别int number = in.nextInt();int q = in.nextInt();int count = 0;in.nextLine();String s = in.nextLine();for(int i = 0 ; i < number; i++) {if(s.charAt(i) == 'M' || s.charAt(i) == 'T' ){count++;}}System.out.println(Math.min(number,count+q));}
}

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

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

相关文章

VSCode连接远程服务器时卡在审核(check)log.txt和pid.txt

诸神缄默不语-个人CSDN博文目录 VSCode就NM跟SB一样天天搁那儿更新&#xff0c;瞎JB更新&#xff0c;每次更新都要出一次兼容性问题&#xff0c;远程服务器不能连公网就上不去了&#xff0c;也没有显式提示&#xff0c;错误很明显就是在下载不了文件&#xff0c;用VSCode内置的…

Linux的有关权限的学习

1.认识权限在Linux中的表示 在Linux中&#xff0c;一切皆文件&#xff0c;而每个文件都会有其相对应的操作权限。那么&#xff0c;我们该怎么来认识他们呢&#xff1f; 首先我们可以看到&#xff0c;在每个test文件的前面都会有一个-rw-r--r--这个字符&#xff0c;而这个字符&…

ServiceNow 研究:通过RAG减少结构化输出中的幻觉

论文地址&#xff1a;https://arxiv.org/pdf/2404.08189 原文地址&#xff1a;rag-hallucination-structure-research-by-servicenow 在灾难性遗忘和模型漂移中&#xff0c;幻觉仍然是一个挑战。 2024 年 4 月 18 日 灾难性遗忘&#xff1a; 这是在序列学习或连续学习环境中出现…

Pycharm远程环境开发(保姆级详细步骤)

使用远程机器的python环境 同步一下linxu和window的文件 可以从远端下载到本地(如下图所示)&#xff0c;也可以从本地上传到linux&#xff0c;在左侧的目录里右键选择你所需要的上传文件点击deployment然后upload就行

k8s 资源组版本支持列表

1 kubernetes的资源注册表 kube-apiserver组件启动后的第一件事情是将Kubernetes所支持的资源注册到Scheme资源注册表中,这样后面启动的逻辑才能够从Scheme资源注册表中拿到资源信息并启动和运行API服务。 kube-apiserver资源注册分为两步:第1步,初始化Scheme资源注册表;…

Linux进程——Linux下常见的进程状态

前言&#xff1a;在进程学习这一块&#xff0c;我们主要学习的就是PCB这个进程控制块&#xff0c;而PBC就是用来描述进程的结构体&#xff0c;而进程状态就是PCB结构体中的一个变量。 本篇主要内容&#xff1a; 操作系统中的进程状态Linux下的进程状态 在开始之前&#xff0c;我…

AI学习指南-人工智能概述

欢迎来到人工智能的奇妙世界&#xff01;如果你是初学者&#xff0c;那么你来对地方了。今天&#xff0c;我们将一起探索人工智能&#xff08;AI&#xff09;的基本概念&#xff0c;看看它是如何分类的&#xff0c;它的应用有哪些&#xff0c;以及未来可能的发展方向。准备好了…

每日一题(力扣740):删除并获得点数--dp+思维

其实跟打家劫舍没啥区别 排序去重之后去考虑当前位置和前两个位置之间的关系即可&#xff0c;具体见代码&#xff1a; class Solution { public:int deleteAndEarn(vector<int>& nums) {int n nums.size();if (n 1) return nums[0];unordered_map<int, int>…

Java项目:基于SSM框架实现的在线医疗服务系统(ssm+B/S架构+源码+数据库+毕业论文+开题报告)

一、项目简介 本项目是一套基于SSM框架实现的在线医疗服务系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能…

MES(制造执行系统)与PDCA循环,斩不断理还乱的关系。

MES系统算是B端系统中比较复杂的一种&#xff0c;这与我国制造业标准化程度较低有一定的关联&#xff0c;MES的存在就是要更好执行PDCA循环&#xff0c;二者关联是千丝万缕的&#xff0c;B系统提升专家借此为大家分享一下。 一、什么是PDCA PDCA&#xff08;Plan-Do-Check-Ac…

【系统架构师】-选择题(十一)

1、紧耦合多机系统一般通过&#xff08;共享内存&#xff09;实现多机间的通信。对称多处理器结构&#xff08;SMP&#xff09;属于&#xff08; 紧耦合&#xff09;系统。 松耦合多机系统又称间接耦合系统,—般是通过通道或通信线路实现计算机间的互连。 2、采用微内核的OS结构…

SQLite如何处理CSV 虚拟表(三十七)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite的DBSTAT 虚拟表&#xff08;三十六&#xff09; 下一篇:SQLite的扩展函数Carray()表值函数(三十八) ​ RFC4180格式是一种文本文件格式&#xff0c;被用于表格数据间的交互&#xff0c;也可将表格数据转化…

项目管理-项目范围管理1/2

1.项目范围管理-知识框架 2.范围管理-6个过程 项目范围管理&#xff0c;过程 6个&#xff0c;包括“规收定 创确控”&#xff1a; 规划范围管理收集需求定义范围创建WBS确认范围控制范围 2.1规划范围管理 &#xff08;1&#xff09;主要内容 4-3-2 &#xff08;2&#xf…

如何低成本创建个人网站?

目录 前言 网站源代码 虚拟主机或服务器 域名注册或免费二级域名 域名解析 上传源代码压缩包 添加刚刚的域名 成功搭建 失败的解决方案 结语 前言 很多小白都非常想拥有自己的网站&#xff0c;但很多人虽然有了自己的源代码但苦于不知道怎么将其变成所有人都能够访…

Lucene从入门到精通

**************************************************************************************************************************************************************************** 1、概述 【1】入门&#xff1a;作用、有点与缺点 【2】应用&#xff1a;索引、搜索、fie…

Redis Zset的底层原理

Redis Zset的底层原理 ZSet也就是SortedSet&#xff0c;其中每一个元素都需要指定一个score值和member值&#xff1a; 可以根据score值排序后member必须唯一可以根据member查询分数 因此&#xff0c;zset底层数据结构必须满足键值存储、键必须唯一、可排序这几个需求。之前学…

Java | Leetcode Java题解之第66题加一

题目&#xff1a; 题解&#xff1a; class Solution {public int[] plusOne(int[] digits) {int n digits.length;for (int i n - 1; i > 0; --i) {if (digits[i] ! 9) {digits[i];for (int j i 1; j < n; j) {digits[j] 0;}return digits;}}// digits 中所有的元素…

LeetCode 131 —— 分割回文串

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 首先&#xff0c;按照 LeetCode 5——最长回文子串 中的思路&#xff0c;我们先求出 d p dp dp&#xff0c;这样我们就知道了所有的子串是否是回文子串。 然后&#xff0c;我们进行一个 dfs 搜索&#xff0c;起…

计算机网络4——网络层6路由器构成

文章目录 一、路由器的构成1、路由器结构2、交换结构 二、IP多播1、IP多播的概念2、在局域网上进行硬件多播 三、网际组管理协议IGMP和多播路由选择协议1、IP 多播需要两种协议2、网际组管理协议 IGMP3、多播路由选择协议 一、路由器的构成 1、路由器结构 路由器是一种具有多…

【Cortex-M3 CMSIS内核驱动文件详解】4:内核功能接口

文章目录 四、内核功能接口4.1 NVIC功能接口4.1.1 配置优先级分组4.1.2 获取优先级分组4.1.3 关闭使能相应的中断&#xff08;IRQ&#xff0c;非系统错误&#xff09;4.1.4 获取中断挂起&#xff08;IRQ&#xff0c;非系统错误&#xff09;4.1.5 设置外部中断挂起&#xff08;I…