刷题记录(2)

news/2024/9/19 0:52:39/ 标签: java, 开发语言, 算法

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

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

java">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 {@Testpublic 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);}}}

改进

java">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;}@Overridepublic int compareTo(Pair other) {return Integer.compare(this.x, other.x);}}
}

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

在这里插入图片描述

java">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的元素个数

java">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)在这里插入图片描述

java">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
java">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.ppmy.cn/news/1519890.html

相关文章

SAPUI5基础知识25 - 聚合绑定(Aggregation Binding)

1. 背景 Aggregation Binding 是 SAPUI5 中的一种数据绑定方式&#xff0c;用于将数据模型中的集合&#xff08;如数组&#xff09;绑定到 UI 控件的聚合&#xff08;如列表项、表格行等&#xff09;。 常见的场景包括将一个数组绑定到 sap.m.List 的 items 聚合&#xff0c;…

如何定义核心场景用例?

​首先我们解决两个问题&#xff1a; 1.什么是场景测试&#xff1f; 2.什么是核心场景&#xff1f; 1、什么是场景测试&#xff1f; &#x1f3af; 1.1&#xff1a;什么是场景 事件触发时的情景形成了场景。场景必不可少的几个要素&#xff1a;环境、人、时间、行为。简而…

JavaWeb——介绍(什么是Web、Web网站的开发模式)、初始Web前端(Web标准、学习内容)

目录 介绍 什么是Web Web网站的开发模式 初识Web前端 Web标准 学习内容 介绍 JavaWeb学习路线 &#xff08;仅用作参考&#xff09; 什么是Web Web&#xff1a;全球广域网&#xff0c;也称为万维网&#xff08;www World Wide Web)&#xff0c;能够通过浏览器访问的…

揭秘面试官常见问题 —— JavaScript 闭包

1. 什么是闭包&#xff1f; 闭包是 JavaScript 中的一种特性&#xff0c;它允许一个函数在定义的环境之外仍然能够访问和操作定义时的作用域中的变量。换句话说&#xff0c;闭包是指函数可以“记住”并访问它被创建时所处的词法作用域。 简单来说&#xff1a; - 当一个函数被…

[Meachines] [Medium] SecNotes XSRF跨站请求伪造+SMB-Webshell上传+Linux子系统命令历史记录泄露权限提升

信息收集 IP AddressOpening Ports10.10.10.97TCP:80&#xff0c;445&#xff0c;8808 $ nmap -p- 10.10.10.97 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 | http-title: Secure Notes - Login |…

SpringBoot中基于MongoDB的findAndModify原子操作实现分布式锁原理详解

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

网络是怎样连接的

网络是怎样连接的 HTTPDNS数据通信协议栈——TCP/IPRJ-45接口信号衰减噪声干扰双绞线MDI接口集线器交换机路由器接入网ADSL接入网FTTH接入网用户认证和配置下发DHCPPOPWeb服务器的部署地点防火墙 HTTP HTTP发展史&#xff1a; 1991 – HTTP/0.91996 – HTTP/1.01997 – HTTP/…

人工智能领域面试基础问题整理(二):什么是人工智能?

当你说你的专业是“人工智能”时&#xff0c;面试官问你&#xff1a;“假如我是一个不懂AI的人&#xff0c;你能和我说说&#xff0c;什么是AI吗&#xff1f;”你会怎么回答。 我们可以从以下几个方面入手&#xff1a; 1、人工智能的定义 人工智能&#xff08;Artificial Inte…

Android Studio gradle下载太慢了!怎么办?(已解决)

Android Studio&#xff01;你到底干了什么&#xff1f;&#xff01; 不能高速下载gradle&#xff0c;我等如何进行app编程&#xff1f;&#xff01; 很简单&#xff0c;我修改gradle地址不就是了。 找到gradle-wrapper.properties文件 修改其中distributionUrl的地址。 将 ht…

[Leetcode 51][Hard]-n皇后问题-回溯

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 这种可以算是组合问题的变种&#xff0c;在回溯函数中我们要保存当前已放置皇后的所有位置&#xff0c;同时递归调用时要进行寻找下一个皇后的放置位置。那么我们可以逐行遍历棋盘并作为递归调…

如何完美实现 Go 服务的平滑升级

Go 服务作为常驻进程,如何进行服务升级呢?你可能会觉得这还不简单,先将现有服务停止,再启动新的服务不就可以了。可是将现有服务停止时,如果它还在处理请求,那么这些请求该如何处理?另外,在现有服务已经退出但是新服务还没有启动期间,新的请求到达了又该如何处理? Go…

Logistic分类算法原理及Python实践

一、Logistic分类算法原理 Logistic分类算法&#xff0c;也称为逻辑回归&#xff08;Logistic Regression&#xff09;&#xff0c;是机器学习中的一种经典分类算法&#xff0c;主要用于解决二分类问题。其原理基于线性回归和逻辑函数&#xff08;Sigmoid函数&#xff09;的组…

3.4 数据传送指令

&#x1f393; 微机原理考点专栏&#xff08;通篇免费&#xff09; 欢迎来到我的微机原理专栏&#xff01;我将帮助你在最短时间内掌握微机原理的核心内容&#xff0c;为你的考研或期末考试保驾护航。 为什么选择我的视频&#xff1f; 全程考点讲解&#xff1a;每一节视频都…

使用JavaScript读取手机联系人列表:从理论到实践

更多内容前往个人网站&#xff1a;孔乙己大叔 在现代Web开发中&#xff0c;随着技术的不断进步&#xff0c;以前看似不可能的任务现在变得可行。例如&#xff0c;使用JavaScript读取手机联系人列表这一功能&#xff0c;在几年前几乎是不可想象的&#xff0c;但现在随着Web API的…

MyBatis之XML配置文件(一)

Mbatis是一个ORM框架&#xff0c;可以用XML配置文件或注解映射SQL语句&#xff0c;映射文件是MyBatis框架的核心&#xff0c;本文主要讲述XML 映射文件的结构和使用方法。 一、SQL映射文件 SQL映射文件就是mapperxml配置文件&#xff0c;主要实现SQL语句的配置和映射&#xf…

pdf.js如何支持base64的查看

1.pdf.js 作为一个查看在线阅读pdf的软件&#xff0c;常常被运用到前端开发中&#xff0c;但是如何让pdf支持base64的查看&#xff0c;这边就需要去进行修改一些代码了 这边我们就进行开发修改 首先去下载 https://mozilla.github.io/pdf.js/ 当然了&#xff0c;低版本的可以…

Kubernetes 上安装 Jenkins

安装 Helm curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash添加 Jenkins Helm 仓库 首先添加 Jenkins Helm 仓库 helm repo add jenkins https://charts.jenkins.io helm repo update安装 Jenkins 使用 Helm 安装 Jenkins 的最新版本&…

基于分布式计算的电商系统设计与实现【系统设计、模型预测、大屏设计、海量数据、Hadoop集群】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目展示项目介绍 目录摘要Abstract1 引言1.1 研究背景1.2 国内外研究现状1.3 研究目的1.4 研究意义 2 关键技术理论介绍2.1 Hadoop相关组件介绍2.2 分布式集群介绍2.3 Pyecharts介绍2.4 Fl…

Android音视频开发,需要学些什么?

如果你想学习 Android 音视频开发&#xff0c;以下是一些需要学习的内容&#xff1a; 一、基础知识 Java 或 Kotlin 编程语言&#xff1a;Android 开发主要使用这两种语言&#xff0c;确保你对其中一种有扎实的掌握&#xff0c;包括语法、面向对象编程概念、数据结构和算法等…

docker-compose 启动的harbor页面能登录,但是不能推送镜像

问题现象&#xff1a; docker-compose 安装的harbor&#xff0c;页面可以正常打开&#xff0c;但是不能推送镜像。 报错信息提示&#xff1a;connect: connection refused 故障原因&#xff1a; harbor.yml 中的external_url参数写错。这个是提供外部访问。页面请求地址和…