【刷题节】美团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.rhkb.cn/news/275677.html

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

相关文章

宏任务及微任务

js有一个基于事件循环的并发模型&#xff0c;事件循环负责执行代码、收集和处理事件&#xff0c;以及执行队列中的子任务。js是单线程的&#xff08;某一刻只能执行一行代码&#xff09;&#xff0c;为了让耗时带啊不阻塞其他代码运行&#xff0c;设计了事件循环模型。 事件循环…

java中使用rabbitmq

文章目录 前言一、引入和配置1.引入2.配置 二、使用1.队列2.发布/订阅2.1 fanout(广播)2.2 direct(Routing/路由)2.3 Topics(主题)2.4 Headers 总结 前言 mq常用于业务解耦、流量削峰和异步通信,rabbitmq是使用范围较广,比较稳定的一款开源产品,接下来我们使用springboot的sta…

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

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

打造完美视频,两款Mac录屏软件推荐!

“mac电脑可以进行录屏吗&#xff1f;我正在准备一次在线演示&#xff0c;需要将一些操作过程记录下来&#xff0c;这样观众可以更加清晰地了解。我尝试过一些mac录屏软件&#xff0c;但是感觉有些复杂&#xff0c;不太适合自己。请问有没有好用的mac录屏软件推荐&#xff1f;”…

一 windso10 笔记本刷linux cent os7.9系统

1:准备材料 16G以上U盘, 笔记本一台 镜像选了阿里云镜像:centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 软件:链接&#xff1a;https://pan.baidu.com/s/13WDp2bBU1Pdx4gRDfmBetg 提取码&#xff1a;09s3 2:把镜像写入U盘,本人已经写入好了,选择镜像,点开始就是,确定等…

Redis到底是单线程还是多线程!,【工作感悟】

无论你是做 Python&#xff0c;PHP&#xff0c;JAVA&#xff0c;Go 还是 C#&#xff0c;Ruby 开发的&#xff0c;都离不开使用 Redis。 大部分程序员同学工作中都有用到 Redis&#xff0c;但是只限于会简单的使用&#xff0c;对Redis缺乏整体的认知。 无论是在大厂还是在中小…

leetcode110.平衡二叉树

之前没有通过的样例 return语句只写了一个 return abs(l-r)<1缺少了 isBalanced(root->left)&&isBalanced(root->right);补上就好了 class Solution { public:bool isBalanced(TreeNode* root) {if(!root){return true;}int lgetHeight(root->left);i…

UE5 UMG拖拽旋转

需要一个区域接收ButtonDown再在ButtonUp取消作用再在ButtonMove改变值最后tick或者ButtonMove去做动作

C++之继承

目录 一、继承的关系 二、继承方式和子类权限 三、子类构造函数 四、继承的种类 一、继承的关系 继承一定要的关系&#xff1a;子类是父类 学生是人 狗是动物 继承的实现形式&#xff1a; class 子类名&#xff1a;继承方式 父类名 { 成员变量&#xff1a; 成员函数&a…

DHCP中继实验(思科)

华为设备参考&#xff1a;DHCP中继实验&#xff08;华为&#xff09; 一&#xff0c;技术简介 DHCP中继&#xff0c;可以实现在不同子网和物理网段之间处理和转发DHCP信息的功能。如果DHCP客户机与DHCP服务器在同一个物理网段&#xff0c;则客户机可以正确地获得动态分配的IP…

Redis实现分布式锁源码分析

为什么使用分布式锁 单机环境并发时&#xff0c;使用synchronized或lock接口可以保证线程安全&#xff0c;但它们是jvm层面的锁&#xff0c;分布式环境并发时&#xff0c;100个并发的线程可能来自10个服务节点&#xff0c;那就是跨jvm了。 简单分布式锁实现 SETNX 格式&…

如何在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…

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

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

【Redis】Redis常用命令一

1.keys&#xff1a;返回所有满足条件的key&#xff0c;比如&#xff1a; KEYS pattern时间复杂度&#xff1a;O(N)&#xff0c;返回值&#xff1a;匹配pattern的所有key。 • h?llo 匹配 hello , hallo 和 hxllo • h*llo 匹配 hllo 和 heeeello • h[ae]llo 匹配 hello 和 …

C语言游戏实战(4):人生重开模拟器

前言&#xff1a; 人生重开模拟器是前段时间非常火的一个小游戏&#xff0c;接下来我们将一起学习使用c语言写一个简易版的人生重开模拟器。 网页版游戏&#xff1a; 人生重开模拟器 (ytecn.com) 1.实现一个简化版的人生重开模拟器 &#xff08;1&#xff09; 游戏开始的时…

Pytest测试中的临时目录与文件管理!

在Pytest测试框架中&#xff0c;使用临时目录与文件是一种有效的测试管理方式&#xff0c;它能够确保测试的独立性和可重复性。在本文中&#xff0c;我们将深入探讨如何在Pytest中利用临时目录与文件进行测试&#xff0c;并通过案例演示实际应用。 为什么需要临时目录与文件&a…

【李沐论文精读】GPT、GPT-2和GPT-3论文精读

论文&#xff1a; GPT&#xff1a;Improving Language Understanding by Generative Pre-Training GTP-2&#xff1a;Language Models are Unsupervised Multitask Learners GPT-3&#xff1a;Language Models are Few-Shot Learners 参考&#xff1a;GPT、GPT-2、GPT-3论文精读…

「金三银四」,你遇到过哪些奇葩题目?参与出题可领取腾讯新春定制祥龙公仔哦!

「金三银四」&#xff0c;是职场人在每年春季最忙的时期之一。在这个时期&#xff0c;各大企业都会举行各种各样的面试和笔试&#xff0c;而这些面试中出现的题目往往千奇百怪&#xff0c;有时候甚至让人捧腹大笑 &#xff01; 为此&#xff0c;腾讯云开发者社区预计推出以「金…

【C++基础】3.第一个C++程序“Hello world!”——《跟老吕学C++编程语言》

【C基础】3.第一个C程序——《跟老吕学C编程语言》 第一个C程序“Hello world&#xff01;”1.创建新项目2.选择“控制台程序”3.命名存储4.输入代码5.编译运行 第二个C程序“你好&#xff0c;世界&#xff01;”1.输入代码2.编译运行 C语言跟C语言的区别1.结构不同2.设计不同3…

Linux常用操作命令

Linux常用操作命令 1.文件管理catfile 2.文档编辑3.文件传输4.磁盘管理5.磁盘维护6.网络通讯7.系统管理8.系统设置9.备份压缩10.设备管理 Linux 英文解释为 Linux is not Unix。 Linux内核最初只是由芬兰人李纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上…