2026华为OD机考真题附答案-计算数列位置N的值

题目描述:

1、 输入M、N两个数,则按照以下规则形成一个数列;

2、 数列的前M个元素的值为1到M;

3、从M+1个元素开始,计算的逻辑为:

如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元

素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;

请计算该数列第N个位置上的数值

补充说明

M取值范围:3<=M<=10

N取值范围:1<= N<=50

输入描述

两个整数,用逗号分割,分别表示M和N

输出描述

一个整数,表示数列第N个位置上的数值

示例1

输入

5,1

输出

1

package org.example;

import java.util.ArrayList;

import java.util.HashSet;

import java.util.List;

import java.util.Set;

public class 计算数列位置N的值 {

public static void main() {

System.out.println(getResult(5,6));

}

复制代码
public static int getResult(int M, int N) {
    // 初始化数列,前M个元素
    List<Integer> sequence = new ArrayList<>();
    for (int i = 1; i <= M; i++) {
        sequence.add(i);
    }

    // 如果N在M中,直接输出结果
    if (N <= M) {
        return sequence.get(N - 1);
    }

    // 循环计算从第M+1个道第N个元素
    for (int i = M; i < N; i++) {
        // 截取前面连续的M个元素
        List<Integer> pre = sequence.subList(i - M, i);
        // 求最大值
        int max = getMax(pre);
        // 求最小值
        int min = getMin(pre);
        // 判断是否有重复元素
        boolean hasDuplicate = hasDuplicate(pre);
        int currentNum;
        if (hasDuplicate) {
            currentNum = max + min;
        } else {
            currentNum = max - min;
        }

        sequence.add(currentNum);
    }
    return sequence.get(N-1);
}

private static boolean hasDuplicate(List<Integer> pre) {
    Set<Integer> set = new HashSet<>(pre);
    return set.size() == pre.size();
}

private static int getMin(List<Integer> pre) {
    int min = Integer.MAX_VALUE;
    for (Integer i : pre) {
        min = Math.min(min, i);
    }
    return min;
}

private static int getMax(List<Integer> pre) {
    int max = 0;
    for (Integer i : pre) {
        max = Math.max(i, max);
    }
    return max;
}

}

相关推荐
变量未定义~4 小时前
单调栈、单调队列(模板)、子矩阵(模板)
数据结构·算法·蓝桥杯
不会就选b4 小时前
算法日常・每日刷题--<快速排序>2
数据结构·算法
郑州光合科技余经理4 小时前
海外外卖平台源码改造实战——多语言核心代码实现
java·开发语言·前端·后端·mysql·架构·php
耀耀_很无聊4 小时前
12_Redis Lua 脚本踩坑:为什么 tonumber(ARGV[x]) 会得到 nil?
java·redis·lua
CClaris4 小时前
大模型量化从0到1(五):GPTQ 原理详解 + 从零量化一个真实大模型
人工智能·python·算法·机器学习
凯瑟琳.奥古斯特4 小时前
力扣1012数位DP解法详解
开发语言·c++·算法·leetcode·职场和发展
奶油话梅糖4 小时前
锐捷常用命令速查表
java·网络·windows
code_std4 小时前
java WebSocket 使用
java·开发语言·websocket
大鱼>5 小时前
AI+货物追踪:贵重物品智能追踪系统
人工智能·深度学习·算法·机器学习
大鱼>5 小时前
AI+货物追踪:集装箱智能追踪系统
人工智能·深度学习·算法·机器学习