【刷题节】美团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等等数据库已经公开在线。…

vue form表单验证

第一种&#xff1a;非必填不能为空&#xff0c;并且需要正则验证 第二种&#xff1a;必填&#xff0c;正则验证&#xff0c;不能只输入空格验证 第三种&#xff1a;必填&#xff0c;正则验证&#xff0c;不能输入空格(v-model.trim) 第四种&#xff1a;选了多选框后必填 第一种…

【笔记】学习Android.mk(三)

一、在Android.mk文件中引入系统动态库 要在 Android.mk 文件中引入系统动态库&#xff0c;你可以使用 LOCAL_SHARED_LIBRARIES 变量来指定系统动态库。以下是一个示例&#xff1a; LOCAL_PATH : $(call my-dir)include $(CLEAR_VARS)# 定义模块名称和源文件 LOCAL_MODULE : …

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

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

ms office学习记录12:Excel学习记录㈥

数据工具 分列的其他运用&#xff1a;身份证号中“出生日期”切片&#xff1a;分列→固定宽度→下一步→切割出三列→下一步→不导入第一列→导入第二列且转换成日期→不导入第三列→完成 删除重复值&#xff1a;定位到要“数据”选项卡→删除重复项→取消全选再勾选要删除的…

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…

Linux服务器,使用ssh登录时越来越慢,有时甚至出现超时的现象,解决方案

一台Linux服务器&#xff0c;使用ssh登录时越来越慢&#xff0c;有时甚至出现超时的现象。一直以为这不算问题&#xff0c;但是有时候登录时间长的让人无法接受&#xff0c;查了一下&#xff0c;这“ssh登录慢”还真的是个问题&#xff0c;解决方案如下&#xff1a; 客户端进行…

Python小设计

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

Android UI: 自定义控件:可换行的布局控件

文章目录 继承ViewGroup重写onMeasure方法&#xff1a;计算并设置布局控件的高度重写onLayout方法&#xff1a;计算并设置每个子控件的位置具体的代码实现小结 继承ViewGroup 重写generateLayoutParams&#xff0c;设置子控件的LayoutParams为MarginLayoutParams类型 Overridep…

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

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

c/c++的内存分配,详细说一下栈、堆和静态存储区

栈区&#xff08;Stack&#xff09;&#xff1a;由编译器自动分配和回收&#xff0c;栈中存放函数调用的相关信息&#xff0c;栈帧&#xff08;记录函数的栈帧开始的位置&#xff09;&#xff0c;参数&#xff0c;局部变量&#xff0c;返回地址。其操作方法类似于数据结构中的栈…

数组常用操作对照表——matlab和C++(vector)

操作类别注释MatlabC创建创建一维数组常量v [1, 2, 3, 4, 5];std::vector<int> v {1, 2, 3, 4, 5 };创建全为0的一维数组v zeros(1, 3)std::vector<int> v(length);//初始化std::fill(v.begin(), v.end(), 0);创建全为1的一维数组v ones(1, 3);std::vector<…

【python】使用代理IP爬取猫眼电影专业评分数据

前言 我们为什么需要使用IP代理服务&#xff1f; 在编写爬虫程序的过程中&#xff0c;IP封锁无疑是一个常见且棘手的问题。尽管网络上存在大量的免费IP代理网站&#xff0c;但其质量往往参差不齐&#xff0c;令人堪忧。许多代理IP的延迟过高&#xff0c;严重影响了爬虫的工作…

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

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

RocketMq安装部署(centos)

1、下载 官网下载地址&#xff1a;https://rocketmq.apache.org/zh/docs/quickStart/01quickstart/ 下载二进制包 2、上传 上传rocketmq-all-5.2.0-bin-release.zip至/home/rocketmq 解压缩&#xff1a; unzip rocketmq-all-5.2.0-bin-release.zip3、配置 broker.conf&…