【刷题节】美团2024年春招第一场笔试【技术】

在这里插入图片描述

1.小美的平衡矩阵

在这里插入图片描述

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[][] nums = new int[n][n], sum = new int[n][n];char[] chars;for (int i = 0; i < n; i++) {chars = scanner.next().toCharArray();for (int j = 0; j < n; j++) {nums[i][j] = chars[j] - '0';if ( i != 0 &&j != 0)sum[i][j] = sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1] +nums[i][j];else if (i != 0)sum[i][j] = sum[i - 1][j] + nums[i][j];else if (j != 0)sum[i][j] = sum[i][j - 1] + nums[i][j];else sum[i][j] = nums[i][j];}}int res = 0;int tar = 0;for(int i = 0;i<n;i++){if(i%2==0) System.out.println(0);else{for (int j = i; j < n; j++) {for (int w = i; w < n; w++) {if (j == i && w == i)tar = sum[j][w];else if (j == i)tar = sum[j][w] - sum[j][w - i - 1];else if (w == i)tar = sum[j][w] - sum[j - i - 1][w];else tar = sum[j][w] - sum[j][w - i - 1] - sum[j - i - 1][w] + sum[j - i - 1][w- i - 1];if (tar == (i + 1) * (i + 1) / 2)res++;}}System.out.println(res);res = 0;}}}
}

2. 小美的数组询问

在这里插入图片描述

import java.util.Scanner;
import java.io.*;
public class Main {public static void main(String[] args) throws IOException {StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));in.nextToken();int n=(int)in.nval;in.nextToken();int q=(int)in.nval;int[] arr = new int [n];long sum = 0l;long a = 0;for (int i = 0; i < n; i++) {in.nextToken();arr[i] = (int)in.nval;if(arr[i]==0) a++;sum += (long)arr[i];}for (int i = 0; i < q; i++) {in.nextToken();int  left = (int)in.nval;in.nextToken();int right = (int)in.nval;System.out.print(sum+a*left);System.out.print(" ");System.out.println(sum+a*right);}}
}

3.小美的 MT

在这里插入图片描述

import java.util.Scanner;
import java.io.*;public class Main {public static void main(String[] args) throws IOException {
//        StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
//        in.nextToken();int n=(int)in.nval;
//        in.nextToken();int q=(int)in.nval;StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));in.nextToken();int n = (int) in.nval;in.nextToken();int k = (int) in.nval;in.nextToken();String string = in.sval;int sum = 0;for(int i = 0;i<string.length();i++){if(string.charAt(i)=='M'||string.charAt(i)=='T'){sum++;}}System.out.println(sum+k>=n?n:sum+k);}
}
import java.util.Scanner;public class Main {static final int maxn = 100010;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int q = scanner.nextInt();int[] a = new int[maxn];long cnt = 0;long sum = 0;for (int i = 1; i <= n; ++i) {a[i] = scanner.nextInt();if (a[i] == 0) {cnt++;} else {sum += a[i];}}while (q-- > 0) {int l = scanner.nextInt();int r = scanner.nextInt();System.out.println((sum + l * cnt) + " " + (sum + r * cnt));}}
}

4.小美的朋友关系

在这里插入图片描述

关键词:并查集、逆序、栈、类、方法重写、集合

这题考到我的智商盲点的,我们需要维护一个并查集来记录朋友关系,这题难点就在于后期会存在遗忘的情况,但是并查集只有合并操作,没有删除操作,由于进行了路径压缩,因此删除的时候难以确定应该修改哪些节点。但是我们可以逆向操作,我们可以逆向遍历查询,遇到删除操作如果是逆序的话则是合并操作,这样就能用并查集进行处理了。确定了大方向后,我们首先读入初始化的边存入数组和集合中,然后存储后期的查询,然后对应后期遗忘的边存入集合方便后续判断。然后才开始初始化关系,注意后期要删除的边不要初始化。然后在存储查询的时候要注意,遗忘中可能包括不是初始化时的操作,是间接关系,是不需要执行并操作的,然后也会出现重复的遗忘,我们要执行加边的是第一次出现的遗忘,因此需要将重复的遗忘从查询中删除。然后要注意重写类的equals方法,传入的参数需要与父类一致,都是Object类,然后hashcode也需要重写,否则集合会判断两者不一样。

import java.util.*;public class Main {static Map<Integer, Integer> fa = new HashMap<>();static Set<Pair> fr = new HashSet<>();static List<Pair> qs = new ArrayList<>();static List<String> ans = new ArrayList<>();static class Pair {int first;int second;int third;Pair(int first, int second) {this.first = first;this.second = second;}Pair(int first, int second, int third) {this.first = first;this.second = second;this.third = third;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Pair pair = (Pair) o;return first == pair.first && second == pair.second && third == pair.third;}@Overridepublic int hashCode() {return Objects.hash(first, second, third);}}static int find(int x) {if (!fa.containsKey(x)) return x;fa.put(x, find(fa.get(x)));return fa.get(x);}static void merge(int x, int y) {x = find(x);y = find(y);if (x != y) {fa.put(x, y);}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int q = scanner.nextInt();for (int i = 0; i < m; i++) {int u = scanner.nextInt();int v = scanner.nextInt();fr.add(new Pair(u, v));}for (int i = 0; i < q; i++) {int op = scanner.nextInt();int u = scanner.nextInt();int v = scanner.nextInt();if (op == 1) {fr.remove(new Pair(u, v));}qs.add(new Pair(op, u, v));}Collections.reverse(qs);for (Pair pair : fr) {merge(pair.first, pair.second);}for (Pair pair : qs) {if (pair.first == 1) {merge(pair.second, pair.third);} else {ans.add(find(pair.second) == find(pair.third) ? "Yes" : "No");}}Collections.reverse(ans);for (String s : ans) {System.out.println(s);}}
}

5.小美的区间删除

在这里插入图片描述
小美拿到了一个大小为n的数组,她希望删除一个区间后,使得剩余所有元素的乘积末尾至少有k个 0。小美想知道,一共有多少种不同的删除方案?

关键词:数学、前缀和、滑动窗口

这题我只想到了使用前缀和来解决,因此会遇到乘法太大导致溢出的问题,当时还打算使用BigDecimal来解决,原来是自己想的简单了。这题除了前缀和,还考了数学问题,实际上能够得到10的倍数只与2和5的个数相关,其他因子对这个不产生影响。因此我们只需对数组中每个数进行分解,看里面包含多少个2和5,然后用前缀和的方式记录。然后就使用滑动窗口来寻找可以删除的区间。判断条件是这个剩下的区间的2和5的最小值与k进行比较,因为一个2和一个5相乘就是10,那么2和5的最小值就是末尾为零的个数。

import java.util.*;public class MaxCase {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int k = in.nextInt();long[] pre2 = new long[n+1];long[] pre5 = new long[n+1];int cnt2,cnt5,temp;for(int i=0;i<n;i++){temp = in.nextInt();cnt2=0;cnt5=0;for(int x=temp;x%2==0;x/=2) cnt2++;for(int x=temp;x%5==0;x/=5) cnt5++;pre2[i+1] = pre2[i] + cnt2;pre5[i+1] = pre5[i] + cnt5;}long res = 0;for(int i=0,j=0;i<n;i++){while(j<n){long remain2 = pre2[n] - pre2[j+1] + pre2[i];long remain5 = pre5[n] - pre5[j+1] + pre5[i];if(Math.min(remain2,remain5)<k) break;j++;}res += Math.max(j-i, 0);}System.out.println(res);}
}

垃圾的我写的,我实在不知道哪错了!希望大佬指正!!!备受感谢!!

import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.io.IOException;public class Main {public static void main(String[] args) throws IOException {StreamTokenizer tokenizer = new StreamTokenizer(new InputStreamReader(System.in));tokenizer.nextToken();        int n = (int) tokenizer.nval;tokenizer.nextToken();        int k = (int) tokenizer.nval;int [] arr = new int[n];long sum = 1l;for (int i = 0; i < arr.length; i++) {tokenizer.nextToken();    arr[i] = (int) tokenizer.nval;sum *=arr[i];}long temp = sum;long result = 0;for(int left = 0; left < arr.length;left++) {for(int right = left;right<arr.length;right++){temp /= arr[right];if(moweizero(temp,k))result++;else {break;}}temp = sum;}System.out.println(result);}public static boolean  moweizero (long sum ,int k){while(k>0){if(sum==0)return false;if(sum%10!=0)return false;sum = sum/10;k--;}return true;}
}

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

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

相关文章

介绍Oracle的SQL调化健康检查脚本(SQLHC)

概述 Oracle提供了一个SQL调优健康检查脚本&#xff08;SQLHC&#xff09;&#xff0c;用于检查需要优化的SQL的运行环境&#xff0c;生成报告以便帮助DBA找到SQL性能不佳的原因。SQLHC是SQLT的一个子集&#xff08;我后续的文章会介绍SQLT&#xff09;&#xff0c;但SQLHC与S…

迁移学习怎么用

如果想实现一个计算机视觉应用&#xff0c;而不想从零开始训练权重&#xff0c;比方从随机初始化开始训练&#xff0c;更快的方式是下载已经训练好权重的网络结构&#xff0c;把这个作为预训练&#xff0c;迁移到你感兴趣的新任务上。ImageNet、PASCAL等等数据库已经公开在线。…

C#,数值计算,希尔伯特矩阵(Hilbert Matrix)的算法与源代码

Hilbert, David (1862-1943) 1 希尔伯特(Hilbert) 德国数学家,在《几何学基础》中提出了第一套严格的几何公理(1899年)。他还证明了自己的系统是自洽的。他发明了一条简单的空间填充曲线,即埃里克魏斯汀的数学世界,即希尔伯特曲线,埃里克魏斯汀的数学世界,并证明了不…

C/C++程序设计实验报告2 | 循环结构实验

本文整理自博主学校大一&#xff08;2021级&#xff09;C/C专业课的课程实验报告&#xff0c;适合学弟妹或C语言初学者入门C语言学习、练习。 编译器&#xff1a;gcc 10.3.0 ---- 注&#xff1a; 1.虽然课程名为C程序设计&#xff0c;但实际上当时校内该课的内容大部分其实都是…

ElasticSearch学习篇10_Lucene数据存储之BKD动态磁盘树

前言 基础的数据结构如二叉树衍生的的平衡二叉搜索树通过左旋右旋调整树的平衡维护数据&#xff0c;靠着二分算法能满足一维度数据的logN时间复杂度的近似搜索。对于大规模多维度数据近似搜索&#xff0c;Lucene采用一种BKD结构&#xff0c;该结构能很好的空间利用率和性能。 …

查找jdk的安装

方式1&#xff1a;which或者where java which java -- linux where java --windows 方式2: echo 使用echo 打印配置的java home环境变量 echo $JAVA_HOME$ --linux echo %JAVA_HOME% --windows 方式3&#xff1a;使用ls -lrt -a &#xff1a;显示所有文件即目录…

沃通SSL证书证券行业应用案例

金融证券行业作为现代经济体系中的重要组成部分&#xff0c;其安全性直接关系到国家经济的稳定和广大投资者的利益。沃通SSL证书基于密码技术保护传输数据的机密性、完整性&#xff0c;通过权威身份认证确保服务器身份真实性&#xff0c;已持续为众多知名证券行业客户提供服务&…

微信小程序之vue按钮切换内容变化

效果图如下&#xff1b; 上代码 <template><view class"content"><view class"searchDiv"><view class"paytab"><view class"buttab" v-for"(t,index) in tabList" :key"index" clic…

Python小设计

1. 五个PPT上的界面打印【print、input函数】 &#xff08;1&#xff09;英雄商城登陆界面 print(英雄联盟商城登录界面 ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~1. 用户登录2. 新用户注册3. 退出系统 ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~…

【Numpy】基础学习:一文了解np.expand_dims的作用、用法

【Numpy】基础学习&#xff1a;一文了解np.expand_dims的作用、用法 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望…

MySQL用法---MySQL Workbench创建数据库和表

1. 连接数据库 打开软件&#xff0c;点击左下角卡片&#xff0c;输入设置的数据库密码&#xff0c;勾选单选框 2. 了解主页面的组成部分 3. 创建数据库 先点击工具栏的创建按钮 再输入数据库名称 点击 Apply 创建 4. 创建数据表 展开数据库&#xff0c;在Tables上右键&…

docker学习(十四)docker搭建私服

docker私服搭建&#xff0c;配置域名访问&#xff0c;设置访问密码 启动registry docker run -d \-p 5000:5000 \-v /opt/data/registry:/var/lib/registry \registrydocker pull hello-world docker tag hello-world 127.0.0.1:5000/hello-world docker push 127.0.0.1:5000…

【2024-完整版】python爬虫 批量查询自己所有CSDN文章的质量分:附整个实现流程

【2024】批量查询CSDN文章质量分 写在最前面一、分析获取步骤二、获取文章列表1. 前期准备2. 获取文章的接口3. 接口测试&#xff08;更新重点&#xff09; 三、查询质量分1. 前期准备2. 获取文章的接口3. 接口测试 四、python代码实现1. 分步实现2. 批量获取文章信息3. 从exce…

WPF —— Calendar日历控件详解

1&#xff1a; Calendar的简介 日历控件用于创建可视日历&#xff0c;让用户选择日期并在选择日期时触发事件。 DisplayMode 用来调整日历显示模式&#xff0c;分为Month、Year 和Decade 三种。如下是None 2&#xff1a;Calendar控件常用的属性 SelectionMode 选中日历的类…

深入理解指针——C语言

目录 1. 内存和地址 2. 指针变量和地址 3. 指针变量类型的意义 4. const修饰指针 5. 指针运算 6. 野指针 7. assert断言 8. 指针的使用和传址调用 9. 数组名的理解 10. 使用指针访问数组 11. 一维数组传参的本质 12. 冒泡排序 13. 二级指针 14. 指针数组 15. 指…

如何在Windows系统安装Node.js环境并制作html页面发布公网远程访问?

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

创建一个Django项目

安装python、pip、Django 找不到python命令&#xff0c;请将C:\Python33、C:\Python33\Lib、C:\Python33\libs三个地址加入环境变量。 get-pip.py下载&#xff1a;https://bootstrap.pypa.io/ django版本需要与python版本对应&#xff0c;并将C:\Python33\Scripts加入环境变…

CNC机加工引入复合机器人可以提高生产效率,降低成本

CNC加工企业在过去依赖大量的人工来完成生产线上的各项任务&#xff0c;包括CNC机床的上下料、物料搬运以及部分装配工作。然而&#xff0c;随着产能需求的不断增长和人工成本的持续上升&#xff0c;企业逐渐意识到自动化升级的重要性与迫切性。 面临的挑战与需求&#xff1a; …

Layer1 新星 Partisia Blockchain 撑起隐私保护伞,助你无忧加密交易!

信息纷繁芜杂、真假掺半的 Web3 行业&#xff0c;如何才能更快、更安全地实现快速交易&#xff1f;Partisia Blockchain 或许交出了一份满意的技术答卷。致力于隐私保护、互操作性和可持续创新的 Layer1 区块链新星&#xff0c;Partisia Blockchain 以安全公平标榜&#xff0c;…

VScode(Python)使用ssh远程开发(Linux系统树莓派)时,配置falke8和yapf总结避坑!最详细,一步到位!

写在前面&#xff1a;在Windows系统下使用VScode时可以很舒服的使用flake8和yapf&#xff0c;但是在ssh远程开发树莓派时&#xff0c;我却用不了&#xff0c;总是出现问题。当时我就开始了漫长的探索求知之路。中间也请教过许多大佬&#xff0c;但是他们就讲“能用不就行了&…