当前位置: 首页 > article >正文

24小R的随机播放顺序

问题描述

小R有一个特殊的随机播放规则。他首先播放歌单中的第一首歌,播放后将其从歌单中移除。如果歌单中还有歌曲,则会将当前第一首歌移到最后一首。这个过程会一直重复,直到歌单中没有任何歌曲。

例如,给定歌单 [5, 3, 2, 1, 4],真实的播放顺序是 [5, 2, 4, 1, 3]

保证歌曲中的id两两不同。


测试样例

样例1:

输入:n = 5 ,a = [5, 3, 2, 1, 4]
输出:[5, 2, 4, 1, 3]

样例2:

输入:n = 4 ,a = [4, 1, 3, 2]
输出:[4, 3, 1, 2]

样例3:

输入:n = 6 ,a = [1, 2, 3, 4, 5, 6]
输出:[1, 3, 5, 2, 6, 4]

Java代码实现

import java.util.Arrays;
import java.util.LinkedList;

public class Main {
    public static int[] solution(int n, int[] a) {
        // 使用LinkedList来模拟队列操作
        LinkedList<Integer> songQueue = new LinkedList<>();
        for (int song : a) {
            songQueue.add(song);
        }

        // 用于存储播放顺序
        int[] result = new int[n];
        int index = 0;

        // 模拟播放过程
        while (!songQueue.isEmpty()) {
            // 取出队列中的第一首歌,并将其加入结果数组
            int currentSong = songQueue.poll();
            result[index++] = currentSong;

            // 如果队列中还有歌曲,将当前队列的第一首歌移到队列的末尾
            if (!songQueue.isEmpty()) {
                int nextSong = songQueue.poll();
                songQueue.add(nextSong);
            }
        }

        return result;  // 返回最终的播放顺序
    }

    public static void main(String[] args) {
        System.out.println(Arrays.equals(solution(5, new int[]{5, 3, 2, 1, 4}), new int[]{5, 2, 4, 1, 3}));
        System.out.println(Arrays.equals(solution(4, new int[]{4, 1, 3, 2}), new int[]{4, 3, 1, 2}));
        System.out.println(Arrays.equals(solution(6, new int[]{1, 2, 3, 4, 5, 6}), new int[]{1, 3, 5, 2, 6, 4}));
    }
}

代码解释

1. 使用LinkedList模拟队列
  • LinkedList类实现了Queue接口,可以方便地模拟队列操作。

  • 使用add()方法将元素添加到队列末尾。

  • 使用poll()方法从队列中移除并返回第一个元素。

2. 模拟播放过程
  • 每次从队列中取出第一首歌(poll()),并将其加入结果数组。

  • 如果队列中还有歌曲,将当前队列的第一首歌移到队列的末尾(再次使用poll()add())。

3. 测试用例
  • 使用Arrays.equals()方法比较返回的结果与预期结果是否一致。

  • Arrays.equals()方法会比较两个数组的内容是否完全一致。

运行结果

运行上述代码后,输出结果如下:

true
true
true

这表明solution方法的实现是正确的,并且能够正确地模拟歌单的播放顺序。

注意事项

  • 在Java中,LinkedList是一个双向链表,可以高效地实现队列操作。

  • poll()方法在队列为空时返回null,因此在使用时需要确保队列不为空。

  • Arrays.equals()方法用于比较两个数组的内容是否一致,非常适用于测试数组类型的返回值。

通过上述实现,你可以正确地模拟歌单的播放顺序。

 


http://www.kler.cn/a/522005.html

相关文章:

  • 【python】subprocess.Popen执行adb shell指令进入linux系统后连续使用指令,出现cmd窗口阻塞问题
  • 17.Word:李楠-学术期刊❗【29】
  • Git进阶之旅:Git 配置信息 Config
  • 3、C#基于.net framework的应用开发实战编程 - 实现(三、三) - 编程手把手系列文章...
  • games101-作业2
  • k8s支持自定义field-selector spec.hostNetwork过滤
  • 使用TensorFlow实现逻辑回归:从训练到模型保存与加载
  • 信息学奥赛一本通 2110:【例5.1】素数环
  • 2025数学建模美赛|A题成品论文
  • 神经网络|(六)概率论基础知识-全概率公式
  • 爱快 IK-X9 吸顶AP 简单开箱评测和拆解,三频WiFi7,BE5000,2.5G网口
  • Continuous Batching 连续批处理
  • 基于ESP8266的多功能环境监测与反馈系统开发指南
  • 嵌入式C语言:结构体
  • KF-GINS 和 OB-GINS 的 Earth类 和 Rotation 类
  • 安卓日常问题杂谈(一)
  • Java-数据结构-二叉树习题(3)
  • 落地 基于特征的对象检测
  • leetcode 面试经典 150 题:简化路径
  • 鲁滨逊漂流记读后感
  • 【PySide6快速入门】QGridLayout 网格布局
  • 如何使用 DeepSeek API 结合 VSCode 提升开发效率
  • 深度学习笔记13-CIFAR彩色图片识别(Pytorch)
  • 供应链管理中的BOM 和 MRP 是什么,如何计算
  • 探索前端可观察性:如何使用Telemetry提高用户体验
  • 基于Java+Springboot+MySQL校园在线考试网站系统设计与实现