刷题记录(2)

news2024/9/20 20:45:56

1. HWOD机试 - 模拟消息队列(100)

在这里插入图片描述
在这里插入图片描述

package com.yue.test;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

/**
 * @Author: 夜雨
 * @Date: 2021-12-08-10:31
 * @Description:
 * @Version 1.0
 */
public class tsest01 {
    @Test
    public void demo01() {
        String one = "2 22 1 11 4 44 5 55 3 33";
        String two = "1 7 2 3";
        LinkedList<String> baseOne = new LinkedList<>(Arrays.asList(one.split(" ")));
        LinkedList<String> baseTwo = new LinkedList<>(Arrays.asList(two.split(" ")));
        int resultSize = baseTwo.size() / 2;
        List<List<Integer>> result = new ArrayList<>();
        for (int j = baseTwo.size() - 1; j >= 0; j -= 2) {
            List<Integer> tmp = new ArrayList<>();
            for (int k = 0; k < baseOne.size() - 1; ) {
                int time = Integer.parseInt(baseOne.get(k));
                if (Integer.parseInt(baseTwo.get(j)) > time && Integer.parseInt(baseTwo.get(j - 1)) <= time) {
                    tmp.add(Integer.valueOf(baseOne.get(k + 1)));
                    baseOne.remove(k);
                    baseOne.remove(k);
                    continue;
                }
                k += 2;
            }
            if (tmp.isEmpty()){
                tmp.add(-1);
            }
            result.add(tmp);
        }
        
    }


}

改进

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String[] aStr = scanner.nextLine().split(" ");
        int[] a = new int[aStr.length];
        for (int i = 0; i < aStr.length; i++) {
            a[i] = Integer.parseInt(aStr[i]);
        }

        List<Pair> t = new ArrayList<>();
        for (int i = 0; i < a.length; i += 2) { // 第一行输入两个一对,为发布者的发布时刻和发布内容
            t.add(new Pair(a[i], a[i + 1]));
        }
        t.sort(null); // 按发布时间排序

        String[] bStr = scanner.nextLine().split(" ");
        int[] b = new int[bStr.length];
        for (int i = 0; i < bStr.length; i++) {
            b[i] = Integer.parseInt(bStr[i]);
        }

        List<List<Integer>> msg = new ArrayList<>();
        for (int i = 0; i < b.length - 1; i += 2) {
            msg.add(new ArrayList<>());
        }

        for (Pair pair : t) {
            int x = pair.x;
            int y = pair.y;
            int ans = -1;
            for (int i = b.length - 2; i >= 0; i -= 2) { // 从优先级高的订阅者开始遍历,优先匹配优先级高的订阅者
                if (b[i] <= x && x < b[i + 1]) { // 如果发布时刻在订阅时间中,订阅者收到发布内容
                    ans = i / 2;
                    break; // 只有优先级最高的收到
                }
            }
            if (ans != -1) {
                msg.get(ans).add(y); // 收到内容
            }
        }

        for (List<Integer> list : msg) {
            if (list.isEmpty()) {
                System.out.println(-1);
            } else {
                for (int i : list) {
                    System.out.print(i + " ");
                }
                System.out.println();
            }
        }
    }

    static class Pair implements Comparable<Pair> {
        int x, y;

        public Pair(int x, int y) {
            this.x = x;
            this.y = y;
        }

        @Override
        public int compareTo(Pair other) {
            return Integer.compare(this.x, other.x);
        }
    }
}


2. 分割数组的最大差值(100)

在这里插入图片描述

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];
        long sum = 0;

        for (int i = 0; i < n; i++) {
            int num = scanner.nextInt();
            sum += num;
            nums[i] = num;
        }

        long maxAbs = 0, leftSum = 0;
        for (int i = 0; i < n - 1; i++) {
            leftSum += nums[i];

            // rightSum = sum - leftSum, 差值 = rightSum - leftSum = Math.abs(sum - leftSum)
            maxAbs = Math.max(maxAbs, Math.abs(sum - 2 * leftSum));
        }

        System.out.println(maxAbs);
    }
}

3. 数值同化(200)-BFS

存在一个m*n的二维数组,其成员取值范围为0,1,2。其中值为1的元素具备同化特性,每经过1s,将上下左右值为0的元素同化为1。而值为2的元素,免疫同化。将数组所有成员随机初始化为0或2,再将矩阵的[0,0]元素修改成1,在经过足够长的时间后,求矩阵中有多少个元素是0或2(即0和2数量之和)
输入:输入的前两个数字是矩阵大小。后面的数字是矩阵内容。
如:4 4
[[0, 0, 0, 0], [0, 2, 2, 2], [0, 2, 0, 0], [0, 2, 0, 0]]
输出:返回矩阵中非1的元素个数

import java.util.*;  
  
public class MatrixAssimilation {  
  
    static class Point {  
        int x, y;  
  
        Point(int x, int y) {  
            this.x = x;  
            this.y = y;  
        }  
    }  
  
    public static int countNonOnes(int[][] matrix) {  
        int m = matrix.length;  
        int n = matrix[0].length;  
  
        // 使用队列来进行BFS  
        Queue<Point> queue = new LinkedList<>();  
  
        // 初始化,将所有初始值为1的点加入队列  
        for (int i = 0; i < m; i++) {  
            for (int j = 0; j < n; j++) {  
                if (matrix[i][j] == 1) {  
                    queue.offer(new Point(i, j));  
                }  
            }  
        }  
  
        // 定义四个方向的偏移量  
        int[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};  
  
        // 广度优先搜索  
        while (!queue.isEmpty()) {  
            Point current = queue.poll();  
            for (int[] dir : directions) {  
                int newX = current.x + dir[0];  
                int newY = current.y + dir[1];  
                // 检查新坐标是否有效且值为0  
                if (newX >= 0 && newX < m && newY >= 0 && newY < n && matrix[newX][newY] == 0) {  
                    // 同化该点,并将其加入队列以便进一步同化其相邻的0  
                    matrix[newX][newY] = 1;  
                    queue.offer(new Point(newX, newY));  
                }  
            }  
        }  
  
        // 计算非1的元素个数  
        int count = 0;  
        for (int i = 0; i < m; i++) {  
            for (int j = 0; j < n; j++) {  
                if (matrix[i][j] != 1) {  
                    count++;  
                }  
            }  
        }  
  
        return count;  
    }  
  
    public static void main(String[] args) {  
        Scanner scanner = new Scanner(System.in);  
        int m = scanner.nextInt();  
        int n = scanner.nextInt();  
        int[][] matrix = new int[m][n];  
  
        for (int i = 0; i < m; i++) {  
            for (int j = 0; j < n; j++) {  
                matrix[i][j] = scanner.nextInt();  
            }  
        }  
  
        // 确保起始点为1  
        if (matrix[0][0] != 1) {  
            matrix[0][0] = 1;  
        }  
  
        System.out.println(countNonOnes(matrix));  
    }  
}

4. 数组组成的最小数字(100)在这里插入图片描述

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] str = scanner.nextLine().split(",");
        Arrays.sort(str, (a, b) -> {
            int lengthA = a.length();
            int lengthB = b.length();
            if (lengthA != lengthB) {
                return lengthA - lengthB;
            } else {
                return a.compareTo(b);
            }
        });

        StringBuilder stringBuilder = new StringBuilder();
        if (str.length == 1) {
            stringBuilder.append(str[0]);
            System.out.println(stringBuilder);
        } else if (str.length == 2) {
            String s1 = str[0] + str[1];
            String s2 = str[1] + str[0];
            stringBuilder.append(s1.compareTo(s2) < 0 ? s1 : s2);
            System.out.println(stringBuilder);
        } else {
            String[] res = Arrays.copyOf(str, 3);
            Arrays.sort(res);
            for (String r : res) {
                System.out.print(r);
            }
        }
    }
}

5. 垃圾信息拦截(200)

问题描述:按照如下规则进行垃圾信息识别,发送者A符合以下条件之一,则认为A为垃圾信息发送者:
A发送短信的接收者中,没有发过短信给A的人数L>5
A发送的短信数-A接收的短信数M>10
如果存在X,A发送给X的短信数-A接收到X的短信数N>5

输入描述第一行为条目数目,接下来几行是具体的条目,每个条目是一对ID,第一个数字是发送者ID,后面的数字是接收者ID,中间空格隔开,所有的ID都是为无符号整型,ID最大值为100;
同一个条目中,两个ID不会相同(不会自己给自己发信息)
最后一行为指定ID

输出描述:输出该ID是否为垃圾短信发送者,并且按序列输出L M的值(由于N值不唯一,不需要输出)

例:输入:

15
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
1 14
14 1
1 15
1

输出:

true 13 13

输入:

15
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
1 14
14 1
1 15
2

输出:

false 0 -1
public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Msg> msgList = new ArrayList<>();
        int count = Integer.parseInt(scanner.nextLine());
        for (int i=0;i<count;i++){
            String[] str = scanner.nextLine().split(" ");
            msgList.add(new Msg(Integer.parseInt(str[0]),Integer.parseInt(str[1])));
        }
        Boolean flag = false;
        int A = Integer.parseInt(scanner.nextLine());

        List<Msg> aSendList = msgList.stream().filter(msg -> msg.sendUser==A).collect(Collectors.toList());
        List<Integer> receiveFromA = aSendList.stream().map(msg -> {return msg.receiveUser;}).distinct().collect(Collectors.toList());

        List<Msg> otherSendList = msgList.stream().filter(msg -> msg.sendUser!=A).collect(Collectors.toList());

        List<Integer> aReceiveList = msgList.stream().filter(msg -> msg.receiveUser==A).map(msg -> {return msg.sendUser;}).collect(Collectors.toList());


        int M = aSendList.size()-aReceiveList.size();
        int L = aSendList.size();
        for (int i=0;i<otherSendList.size();i++){
            if (receiveFromA.contains(otherSendList.get(i).sendUser)){
                L-=1;
            }
        }

        if (M>10 || L>5){
            flag = true;
            System.out.print(flag + " " +   L + " " + M);
        }else {

            List<Msg> msgList1 = new ArrayList<>();
            for (int i = 0;i<receiveFromA.size();i++) {
                int Y = 0;
                int X = 0;
                int id = receiveFromA.get(i);

                Y = aReceiveList.stream().filter(m -> id ==m).collect(Collectors.toList()).size();
                X = aSendList.stream().filter(msg -> msg.receiveUser == id).collect(Collectors.toList()).size();
                if (Math.abs(X-Y)>5){
                    flag = true;
                    break;
                }

            }

            System.out.print(flag + " " +   L + " " + M);
        }

    }
    static  class  Msg{
        int sendUser;
        int receiveUser;
        Msg( int sendUser, int receiveUser){
            this.sendUser = sendUser;
            this.receiveUser = receiveUser;
        }

    }
}

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

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

相关文章

C#编译成32和64位的区别

C#编译成32和64位的区别 背景 C#32位客户端项目在把代码提交到客户端之后&#xff0c;jinkens直接崩掉了。原因是内存占用100%运维同学建议改成64位&#xff0c;理由是电脑内存大&#xff0c;客观条件IT不给扩。那么在同一台电脑上&#xff0c;32位和64位在编译过程中有什么区…

【DEV工具-IDEA】idea的光标变成黑块了?

项目场景&#xff1a; 解决&#xff1a;windows&#xff1a;按一下insert键。

Python获取次幂数据公众号榜单数据

公众号排行榜,wx公众号排行榜,原创排行榜,赞赏排行榜,评论排行榜 教程仅供参考,请勿滥用,由此带来的法律责任,需由自己承担。 一、运行效果 二、程序代码 #!/usr/bin/python # -*- coding: UTF-8 -*- """ @author: Roc-xb """import request…

Java学习第六天

Java进阶知识面向对象 static&#xff1a;是静态的意思&#xff0c;可以修饰成员变量&#xff0c;表示该成员变量在内存中只存储一份&#xff0c;可以被共享访问。 静态成员变量&#xff08;有static修饰&#xff0c;属于类&#xff0c;内存中加载一次&#xff09;&#xff1a…

三元里等你!融合三个经典模型!Transformer-LSTM-SVM多变量时间序列预测(Matlab)

三元里等你&#xff01;融合三个经典模型&#xff01;Transformer-LSTM-SVM多变量时间序列预测&#xff08;Matlab&#xff09; 目录 三元里等你&#xff01;融合三个经典模型&#xff01;Transformer-LSTM-SVM多变量时间序列预测&#xff08;Matlab&#xff09;效果一览基本介…

I2C总线的标准收发代码

结合I2C总线协议的知识&#xff0c;我们可以知道I2C写数据由一下10个步骤组成。 第一步&#xff0c;发送一个起始信号。 第二步&#xff0c;发送7bit从机地址&#xff0c;即OZ9350的地址。此处需要注意&#xff0c;发送数据时&#xff0c;无法发送7bit数据&#xff0c;此处发…

求和放大器(单位/非单位增益加法器+比例加法器)+运算放大器实现积分器和微分器

2024-9-2&#xff0c;星期一&#xff0c;22:00&#xff0c;天气&#xff1a;晴转雨&#xff0c;心情&#xff1a;晴。新的一周开始了&#xff0c;新的一个月又开始啦&#xff0c;希望大家开开心心&#xff0c;以崭新的面貌迎接中秋和十一假期&#xff01;废话不多说&#xff0c…

LinkAI工作流支持广场访问和api调用啦

什么是工作流 LinkAI工作流&#xff08;WorkFlow&#xff09;是一种灵活的智能体搭建方式。可以自由选择「大模型、应用、知识库、插件、意图识别、转人工、渠道消息发送」等多种原子能力&#xff0c;通过可视化拖拉拽的方式进行组合编排&#xff0c;零代码搭出一个业务流程。…

PPT制作加速器:3款工具插件的演示文稿制作更高效

IvyhTools英豪插件 IvyhTools是一款功能强大的PPT插件&#xff0c;主要用于辅助用户进行各种PPT编辑和处理操作。该插件具备以下主要功能&#xff1a; 字体编辑&#xff1a;用户可以对PPT中的字体进行编辑和调整。 动图录制&#xff1a;支持录制动态图像&#xff0c;方便用户在…

深度学习(四)-卷积神经网络

神经网络局限 不考虑数据形状 未考虑数据的“形状”&#xff0c;会破坏数据空间结构。例如&#xff0c;输入数据是图像时&#xff0c;图像通常是高长通道方向上的3维形状。但是&#xff0c;向全连接层输入时&#xff0c;需要将3维数据拉平为1维数据 参数庞大 全连接网络参数…

中小企业怎么选择MES:专用MES、集成MES和可配置MES

专用MES、集成MES和可配置MES是MES&#xff08;制造执行系统&#xff09;在不同发展阶段和应用场景下的三种主要形式。它们各自具有不同的特点和应用优势&#xff0c;下面将分别进行详细介绍。 专用MES 定义与特点&#xff1a; 专用MES是针对特定行业或特定生产流程而设计的…

CCS报错:error: cannot find file “libc.a“+CCS安装包

1、编译工程出现报错以下报错信息&#xff1a; error: cannot find file "libc.a" warning: automatic RTS selection: attempt to automatically link in index library "libc.a" failed; file not found warning: entry-point symbol "_c_int0…

新剧震撼登场,首集飙到9.2分,观众无不惊叹

自2022年《弹子球游戏》首季发布以来&#xff0c;它以其无与伦比的电影质感和精湛的双线叙事手法&#xff0c;让人印象深刻。这部Apple TV出品的剧集&#xff0c;改编自作家李敏金的小说《柏青哥》&#xff0c;讲述了四代移民的艰辛故事。它不仅仅是一部剧集&#xff0c;更是一…

RuoYi-Cloud 部署与配置 [CentOS7]

静态IP设置 # 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33# 修改文件内容 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic IPADDR192.168.18.130 NETMASK255.255.255.0 GATEWAY192.168.18.2 DEFROUTEyes IPV4_FAILURE_FATALno IPV6INIT…

电脑屏幕监控软件有哪些?10款真实好用的电脑屏幕监控软件 | 超全盘点,不容错过!

"千里眼&#xff0c;顺风耳&#xff0c;世间万事皆能察。" 在当今数字化时代&#xff0c;却有了现实版的映射——电脑屏幕监控软件&#xff0c;这些软件如同企业的“千里眼”&#xff0c;能够实时洞察员工的电脑使用情况&#xff0c;确保信息安全&#xff0c;提升工…

动态规划法-资源分配问题

动态规划法 - 资源分配问题 问题描述 把4个份额的资源分配给3个工程&#xff0c;给定利润表如下表所示&#xff0c;写出资源的最优分配方案的求解过程。 4份资源分配给3个工程的利润表 步骤一&#xff1a;求各个阶段不同分配份额时的最大利润及分配份额 目标 我们的目标是…

加速电商物流效率:推荐几款实用的快递批量查询工具

做电商必不可少的快递批量查询平台分享&#xff1a;固乔快递查询助手使用全攻略 在电商行业日益竞争的今天&#xff0c;高效管理物流信息成为了商家们不可或缺的一环。面对每天成百上千的订单和快递单号&#xff0c;如何快速、准确地查询并跟踪物流状态&#xff0c;成为了电商…

SpringBoot的配置文件详解

SpringBoot配置文件概述 1&#xff09;SpringBoot的配置文件的名字必须以application开头&#xff1a; 2&#xff09;SpringBoot配置文件有两种后缀&#xff1a;.properties和.yml&#xff08;表示的意思是一样&#xff0c;只是编写数据的格式不同&#xff09; application.p…

Pixelmator Pro for Mac 专业图像处理软件【媲美PS的修图软件】

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件…

js逆向--断点

js逆向--断点 一、断点的定义及作用1、定义2、断点在js逆向中的作用二、断点方法1、DOM事件断点定位加密三、断点按钮功能1、快速执行到下一个断点的位置2、执行代码,但是不会进入函数内部3、执行代码,会进入函数的内部4、回到调用这个函数的位置5、详细执行每一步一、断点的…