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

}

相关推荐
lzhdim12 小时前
AI的分类
人工智能·算法·机器学习·分类·数据挖掘
凤凰院凶涛QAQ14 小时前
《Java版数据结构 & 集合类剖析》Map & Set & 反射:“从哈希碰撞到红黑树转换,反射帮你扒开 HashMap 的桶数组看个究竟”
java·数据结构·算法
H.莓飛15 小时前
【数据结构】排序_OJ题(一):计数、桶与排序后的处理
java·开发语言·数据结构
wangchunyu11415 小时前
JAVA AQS与Lock实现原理(含CAS)
java·开发语言·word
w_zero_one16 小时前
算法--模拟
java·数据结构·算法
Javatutouhouduan17 小时前
阿里1658页Java面试题总结(含答案)
java·高并发·java面试·java面试题·后端开发·java程序员·java八股文
秋天的怀念_David17 小时前
算法一千零一夜 · 第十三夜 幻方,武侠世界里的数学迷宫
java·程序人生·算法
专业程序开发源17 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
秋天的怀念_David17 小时前
算法一千零一夜 · 第十四夜 幻方与奇妙的二进制
java·程序人生·算法
thefool11226618 小时前
网络编程^
java