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;
}

}

相关推荐
AllData公司负责人1 小时前
亲测丝滑,体验跃迁|AllData通过集成开源项目Cube-Studio,降低机器学习落地门槛
java·大数据·数据库·人工智能·机器学习·开源·cube-studio
AI算法沐枫1 小时前
机器学习经典小项目4:泰坦尼克号生存预测
人工智能·python·深度学习·线性代数·算法·机器学习·回归
玖釉-1 小时前
单词搜索:二维网格中的 DFS 回溯与剪枝优化
c++·windows·算法·深度优先·剪枝
吴可可1231 小时前
C++与C#版Teigha样条离散化差异解析
c++·算法·c#
KaMeidebaby2 小时前
卡梅德生物技术快报|抗体的制备与纯化:分子实验实操:番茄 sHSP 重组表达与抗体的制备与纯化工艺
前端·数据库·人工智能·其他·算法·百度·新浪微博
zxd0203112 小时前
DevOps + CI/CD:从理念到 Jenkins 实战落地
java·开发语言
qq_白羊座2 小时前
GitLab CI + Jenkins 双流水线模式Jenkins 端实现
java·开发语言
填满你的记忆2 小时前
《RAG 完整工作流程详解》
java·ai·agent·rag
Kurisu5752 小时前
深度解析:Go 语言 GMP 调度器模型与内核线程探测
java·数据库·golang