【刷题节】美团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;
        }

        @Override
        public 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;
        }

        @Override
        public 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.mfbz.cn/a/456250.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Python对文本文件进行分词、词频统计和可视化

目录 一、引言 二、文本分词 三、词频统计 四、可视化 五、案例与总结 六、注意事项与扩展 七、总结与展望 一、引言 在大数据时代&#xff0c;文本处理是信息提取和数据分析的重要一环。分词、词频统计和可视化是文本处理中的基础任务&#xff0c;它们能够帮助…

生产线平衡改善的四大方法及vioovi ECRS工时分析软件的应用

生产线平衡是制造业生产过程中的关键环节&#xff0c;它直接影响到生产效率、成本及产品质量。在追求精益生产的今天&#xff0c;改善生产线平衡成为众多企业的重要目标。生产线平衡改善的四大方法包括&#xff1a;保证各工序之间的先后顺序、组合的工序时间不能大于节拍、各工…

Hadoop大数据应用:HDFS 集群节点扩容

目录 一、实验 1.环境 2.HDFS 集群节点扩容 二、问题 1.rsync 同步报错 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构软件版本IP备注hadoop NameNode &#xff08;已部署&#xff09; SecondaryNameNode &#xff08;已部署&#xff09; Resourc…

迁移学习怎么用

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

【OceanBase诊断调优 】——全链路诊断日志看不懂?obdiag来帮你!

最近总结一些诊断OCeanBase的一些经验&#xff0c;出一个【OceanBase诊断调优】专题&#xff0c;也欢迎大家贡献自己的诊断OceanBase的方法。 1. 前言 OceanBase 数据库是分布式数据库&#xff0c;因此调用链路复杂&#xff0c;当出现超时问题的时&#xff0c;往往无法快速定…

【Redis系列】深入了解 Redis:一种高性能的内存数据库

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

EI期刊复现:面向配电网韧性提升的移动储能预布局与动态调度策略程序代码!

适用平台&#xff1a;MatlabYalmipCplex/Gurobi/Mosek 程序提出一种多源协同的两阶段配电网韧性提升策略。在灾前考虑光伏出力不确定性与网络重构&#xff0c;以移动储能配置成本与负荷削减风险成本最小为目标对储能的配置数量与位置进行预布局&#xff1b;在灾后通过多源协同…

离线数仓(六)【ODS 层开发】

前言 今天开始正式的数仓搭建&#xff0c;所谓 ODS 层的工作就是把我们各种数据源采集发送来的各种类型的数据&#xff08;Json、tsv类型&#xff09;映射到 Hive 表中&#xff0c;映射时可以进行一些简单的处理&#xff0c;比如简单的数据清洗&#xff0c;舍弃一些没有必要的字…

3d场景重建图像渲染 | 神经辐射场NeRF(Neural Radiance Fields)

神经辐射场NeRF&#xff08;Neural Radiance Fields&#xff09; 概念 NeRF&#xff08;Neural Radiance Fields&#xff0c;神经辐射场&#xff09;是一种用于3D场景重建和图像渲染的深度学习方法。它由Ben Mildenhall等人在2020年的论文《NeRF: Representing Scenes as Neur…

武汉星起航:创新驱动,共赢未来,引领跨境电商新潮流

在跨境电商这个充满挑战与机遇的领域&#xff0c;武汉星起航凭借其创新思维和共赢理念&#xff0c;正引领着行业发展的新潮流。 武汉星起航深知创新是企业在激烈竞争中立于不败之地的关键。公司始终关注市场动态&#xff0c;紧跟行业趋势&#xff0c;不断探索新的商业模式和运…

京东云主机+京美建站SaaS版

京美建站SaaS版 京美建站搭建企业网站、小程序、3000精美模板 链接:https://daili.jd.com/s?linkNo57UBX34BZMWGNFYTOCPVUE7SN36CCIPKLTFLPCUCPYBKSYYBIPS2BJ57GP7RACLDHU66X526ZOULMIXL2VN7DT7IHU 京东云主机&#xff0c;安全稳定&#xff0c;性能强劲&#xff0c;新客下单…

深入了解RC电路的分类及优化应用方法!

RC电路是由电阻&#xff08;R&#xff09;和电容&#xff08;C&#xff09;组成的电路&#xff0c;它是一种常见的模拟电路&#xff0c;也在数字电路和信号处理中有广泛的应用。RC电路的特性由电阻、电容和电路连接方式决定&#xff0c;它可以用于滤波、时序控制、信号整形等多…

有来团队后台项目-解析6

element-icon 引入 安装 在解析3中&#xff0c;已经安装过 创建plugins 文件夹 icons 文件 import type { App } from "vue"; import * as ElementPlusIconsVue from "element-plus/icons-vue";// 注册所有图标 export function setupElIcons(app: App…

Linux 文件基本属性

Linux 文件基本属性 Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。 为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。 在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与…

ASP.NET Core 8.0 WebApi 从零开始学习JWT登录认证

文章目录 前言相关链接Nuget选择知识补充JWT不是加密算法可逆加密和不可逆加密 普通Jwt&#xff08;不推荐&#xff09;项目环境Nuget 最小JWT测试在WebApi中简单使用简单使用运行结果 WebApi 授权&#xff0c;博客太老了&#xff0c;尝试失败 WebApi .net core 8.0 最新版Jwt …

【投稿优惠-EI稳定检索】2024年图像处理与机械系统工程国际学术会议 (ICIPMSE 2024)

【投稿优惠-EI稳定检索】2024年图像处理与机械系统工程国际学术会议 (ICIPMSE 2024) 大会主题: (主题包括但不限于, 更多主题请咨询会务组苏老师) 图像处理 基于图像的渲染 计算机视觉 可视化分析 模式识别 3D打印 渲染和动画 渲染技术 电脑动画 基于草图的建模 机械…

详解Python中%r和%s的区别及用法

首先看下面的定义&#xff1a; %r用rper()方法处理对象 %s用str()方法处理对象 函数str() 用于将值转化为适于人阅读的形式&#xff0c;而repr() 转化为供解释器读取的形式&#xff08;如果没有等价的语法&#xff0c;则会发生SyntaxError 异常&#xff09; 某对象没有适于人…

【leetcode+深度/广度优先搜索】841. 钥匙和房间 (DFS,BFS)

leetcode-cn&#xff1a;leetcode面试75道精华&#xff1a;https://leetcode.cn/studyplan/leetcode-75/ 841.钥匙和房间&#xff1a;https://leetcode.cn/problems/keys-and-rooms/description/ 一、题目&#xff1a;841. 钥匙和房间 有 n 个房间&#xff0c;房间按从 0 到 n…

零代码开发的优势 零代码平台开发的好处

随着数字化浪潮的推进&#xff0c;企业对于数据驱动的需求越来越高&#xff0c;而零代码快速开发平台正是满足这一需求的重要工具之一。零代码开发平台是一种无需编写代码即可开发应用程序的平台&#xff0c;它可以让用户通过拖、拉、拽的方式快速创建高度定制化的应用。这种平…

VC++ BitBlt函数学习

1 BitBlt BitBlt函数执行与像素矩形相对应的颜色数据的位块传输,从指定的源设备上下文传输到目标设备上下文。 把位块从一个DC传到另一个DC; VC单文档工程,写3句代码如下; void CDeskdcView::OnDraw(CDC* pDC) {CDeskdcDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);//…
最新文章