2025.12.17华为软开

作者:ゞ 正在缓冲99%…日期:2026/1/19

细胞增殖

1import java.util.HashMap;
2import java.util.Map;
3import java.util.Scanner;
4
5public class Main {
6    public static void main(String[] args) {
7        Scanner scanner = new Scanner(System.in);
8        long n = scanner.nextLong();//n个观测值
9        long m = scanner.nextLong();//m组<增值基数,稳定基数>
10        Map<Long, Long> freqMap = new HashMap<>((int) n);//存储观测值以及他对应出现的频率
11        long maxObservation = 0;//记录最大的观测值
12        //1.将输入的观测值存储到哈希表中,并找出最大的观测值
13        for (int i = 0; i < n; i++) {
14            long observation = scanner.nextLong();
15            freqMap.put(observation, freqMap.getOrDefault(observation, 0L) + 1);
16            maxObservation = Math.max(maxObservation, observation);
17        }
18        //2.对于每个B和S求出符合的总观测记录总数,该假说模式下的增值峰值
19        for (long i = 0; i < m; i++) {
20            long b = scanner.nextLong();
21            long s = scanner.nextLong();
22
23            long count = 0;//记录总观测记录数
24            long maxPeak = 0;//记录最大峰值
25
26            //2.1如果b是0,那么预测值只能是S
27            if (b == 0) {
28                if (freqMap.containsKey(s)) {
29                    long freq = freqMap.get(s);
30                    count += freq;
31                    maxPeak = Math.max(maxPeak, freq);
32                }
33            } else if (b == 1) {
34                //2.2如果b是1,那么预测值只能是1+s
35                if (freqMap.containsKey(s + 1)) {
36                    long freq = freqMap.get(s + 1);
37                    count += freq;
38                    maxPeak = Math.max(maxPeak, freq);
39                }
40            } else {
41                //2.3当b是大于1的,那么预测值会不断增大到超过最大观测值
42                long bTemp = b;
43                for (long c = b + s; c <= maxObservation; c = (b *= bTemp) + s) {
44                    if (freqMap.containsKey(c)) {
45                        Long freq = freqMap.get(c);
46                        count += freq;
47                        maxPeak = Math.max(maxPeak, freq);
48                    }
49                }
50            }
51            //3.输出结果
52            System.out.println(count + " " + maxPeak);
53        }
54        scanner.close();
55    }
56}

小店的经营分析

你想要解决的是统计咖啡店连续经营周期中总利润落在指定区间 [L, R] 内的数量问题,核心是利用前缀和结合二分查找来高效计算符合条件的连续子数组个数。

解题思路

  1. 前缀和转换:设前缀和数组S,其中S[0] = 0S[k]表示前k天的利润总和。那么从第i天到第j天的利润和为S[j+1] - S[i]
  2. 问题转化:要求L ≤ S[j+1] - S[i] ≤ R,等价于S[j+1]-R ≤ S[i] ≤ S[j+1]-L
1import java.util.Scanner;
2import java.util.TreeMap;
3
4public class Main {
5    public static void main(String[] args) {
6        //1.初始化输入
7        Scanner scanner = new Scanner(System.in);
8        int N = scanner.nextInt();
9        int[] P = new int[N];
10        for (int i = 0; i < N; i++) {
11            P[i] = scanner.nextInt();
12        }
13        int L = scanner.nextInt(), R = scanner.nextInt();
14        //2.前缀和求解
15        int result = 0;
16        int currentSum = 0;
17        TreeMap<Integer, Integer> countMap = new TreeMap<>();
18        countMap.put(0, 1);
19        for (int i = 0; i < P.length; i++) {
20            currentSum += P[i];
21            result += countMap.subMap(currentSum - R, true, currentSum - L, true)
22                    .values().stream().mapToInt(Integer::intValue).sum();
23            countMap.put(currentSum, countMap.getOrDefault(currentSum, 0) + 1);
24        }
25        System.out.println(result);
26        scanner.close();
27    }
28}

整理科研数据文件

解题思路

  1. 分段处理:将每个文件名分割成 “连续非数字段” 和 “连续数字段” 的列表(比如ts010tc12["ts","010","tc","12"]);
  2. 逐段比较:按规则比较两个文件名的分段列表,直到找到差异:
    • 非数字段:按区分大小写的字典序比较;
    • 数字段:转成数值比较大小;
    • 不同类型段:数字段排在前面;
  3. 前缀优先:若一个是另一个的前缀,短的排前面;
  4. 稳定性保证:若两个文件名完全等价,保持它们在输入中的原始顺序
1import java.util.*;
2import java.util.regex.Matcher;
3import java.util.regex.Pattern;
4
5public class Main {
6    private static final Pattern PATTERN = Pattern.compile("\\d+|\\D+");
7
8    private static class FileComaprator implements Comparator<String> {
9        @Override
10        public int compare(String file1, String file2) {
11            //1.将两个文件名字按照数字和非数字组进行拆分,收集成链表
12            List<String> segments1 = splitTosegments(file1);
13            List<String> segments2 = splitTosegments(file2);
14            //2.逐个比较
15            int minSize = Math.min(segments1.size(), segments2.size());
16            for (int i = 0; i < minSize; i++) {
17                int cmp = 0;
18                String seg1 = segments1.get(i);
19                boolean seg1isDigit = isDigitSegment(seg1);
20                String seg2 = segments2.get(i);
21                boolean seg2isDigit = isDigitSegment(seg2);
22                //2.1如果两个分割片段都是数字,那么谁小谁在前面
23                if (seg1isDigit && seg2isDigit) {
24                    cmp = Integer.compare(Integer.parseInt(seg1), Integer.parseInt(seg2));
25                } else if (!seg1isDigit && !seg2isDigit) {
26                    //2.2两个都是字符串直接字符串比较
27                    cmp = seg1.compareTo(seg2);
28                } else {
29                    //2.3一个数字一个字符,非数字串大
30                    cmp = seg1isDigit ? -1 : 1;
31                }
32                //3.如果比较出了结果,直接返回
33                if (cmp != 0) {
34                    return cmp;
35                }
36            }
37            //3.逐个比较失败,说明前minSize个二者是一样的,那么选择长度最短的优先
38            if (segments1.size() != segments2.size()) {
39                return segments1.size() > segments2.size() ? 1 : -1;
40            }
41            //4.如果完全相同那么按照原顺序保持不变
42            return 0;
43        }
44    }
45
46    private static List<String> splitTosegments(String s) {
47        List<String> segments = new ArrayList<>();
48        Matcher matcher = PATTERN.matcher(s);
49        while (matcher.find()) {
50            segments.add(matcher.group());
51        }
52        return segments;
53    }
54
55    private static boolean isDigitSegment(String s) {
56        return Character.isDigit(s.charAt(0));
57    }
58
59    public static void main(String[] args) {
60        Scanner scanner = new Scanner(System.in);
61        int n = scanner.nextInt();
62        scanner.nextLine();
63        List<String> fileList = new ArrayList<>(n);
64        for (int i = 0; i < n; i++) {
65            String file = scanner.nextLine().trim();
66            fileList.add(file);
67        }
68        Collections.sort(fileList, new FileComaprator());
69        for (String file : fileList) {
70            System.out.println(file);
71        }
72        scanner.close();
73    }
74}

2025.12.17华为软开》 是转载文章,点击查看原文


相关推荐


hive问题
心止水j2026/1/11

一、基础概念 问题:简述 Hive 的定义及核心作用?答案:Hive 是基于 Hadoop 的数据仓库工具,支持类 SQL(HQL)查询分析;核心作用是让非开发人员通过 SQL 分析 Hadoop 上的海量数据。 问题:Hive 的元数据默认存储在哪里?生产环境中为什么要替换为 MySQL?答案:默认存 Derby;生产换 MySQL 因 Derby 仅单用户、不支持并发,MySQL 支持多用户并发、数据持久化且易维护。 问题:Hive 支持哪些执行引擎?它们的区别是什么?答案


GDAL 实现自定义数据坐标系
GIS之路2026/1/3

^ 关注我,带你一起学GIS ^ 前言 ❝ 在GIS开发中,经常需要进行数据的转换处理,特别是Shapefile数据的投影转换更是重中之重,如何高效、准确的将源数据坐标系转换到目标坐标系是我们需要研究解决的问题。 在之前的文章中讲了如何使用GDAL或者ogr2ogr工具将txt以及csv文本数据转换为Shp格式,本篇教程在之前一系列文章的基础上讲解如何使用GDAL实现自定义数据坐标系。 GDAL 简介 GDAL 下载安装 GDAL 开发起步 GDAL 实现 GIS 数据读取转换(全) 如


刷新后点赞全变 0?别急着怪 Redis,这八成是 Long 被 JavaScript 偷偷“改号”了(一次线上复盘)
WanderInk2025/12/25

做社区功能的人,多半都经历过这种抓狂时刻:你在帖子上点了个赞,按钮立刻高亮,数字也加一,用户体验看起来很丝滑;可你一刷新页面,点赞数像被人清空了一样,全部回到 0。你打开 Redis 客户端看,计数 key 明明存在,值也不是 0。于是你开始怀疑缓存一致性,怀疑是不是读了另一台 Redis,怀疑线上 jar 没更新,甚至怀疑自己是不是在梦里写代码。 我得说,这类问题最阴的地方就在于它特别像缓存问题,实际上却往往跟缓存一点关系都没有。真正的凶手是数据类型边界,准确地说,是 Java 的 long


【金猿人物展】涛思数据创始人、CEO陶建辉:实现AI时代时序数据库向“数据平台”的转型
数据猿2025/12/16

陶建辉 “【提示】2025第八届年度金猿颁奖典礼将在上海举行,此次榜单/奖项的评选依然会进行初审、公审、终审三轮严格评定,并会在国内外渠道大规模发布传播欢迎申报。 大数据产业创新服务媒体 ——聚焦数据 · 改变商业 在数字化转型与AI技术爆发的浪潮中,时序数据库作为处理海量实时数据的核心工具,已成为工业互联网、自动驾驶、能源电力等领域的刚需。 作为国内时序数据库赛道的领军企业,涛思数据从2016年入局至今,凭借精准的赛道选择、持续的技术迭代与独特的发展策略,实现了从单一产品到生


深度学习在教育数据挖掘(EDM)中的方法体系:从任务建模到算法范式的理论梳理与总结
智算菩萨2025/12/8

目录 1 引言 2 理论知识与技术基础 2.1 教育数据的形式化:事件流、序列、图与稀疏矩阵 2.2 监督学习的目标函数:从分类到排序 2.3 表示学习与自编码器:从重构到迁移 2.4 图神经网络与知识图谱:结构归纳偏置 2.5 生成模型与能量函数:RBM/DBN 的另一条线 2.6 强化学习:把推荐与学习路径当作序列决策 3 EDM 的典型任务与场景:问题定义、输入输出与评价方式 4 深度学习范式在 EDM 中的总体框架:监督、无监督与强化学习如何落到教育任务 4.1 监


一文搞懂 Webpack 分包:async、initial 与 all 的区别【附源码】
程序员大卫2025/11/28

大家好,我是前端架构师,关注微信公众号【程序员大卫】免费领取精品资料。 1. 背景 最近在优化一个项目的加载性能时,对 optimization.splitChunks.chunks 的三个可选值 async、initial 和 all 的具体效果产生了疑惑。为了彻底搞清楚它们的区别,我专门搭建了一个 Demo 进行对比研究。 2. 核心区别:async vs initial chunks 属性决定了 Webpack 对哪些类型的代码块进行分割。其中 async 是默认配置。 经过测试发现:在单

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客