【算法基础】真题实战 - 歌曲列表播放删除

题目详情

小明听歌,小明会播放歌单中的第一首曲子,然后将播放的这首曲子移除出歌单,
如果歌单里还有曲子,就把剩余曲子中的第一首挪到最后一首去。
小明会如此播放直到所有曲子都被移除出歌单(也就是都被播放了一遍)。
小明播了几次就累了,他不想一遍又一遍操作,于是向你求助:
他把初始的歌单给你,希望你能直接把按照小明规则下的真实播放顺序告诉给他。
输入描述
第一行1个整数n,表示歌单的长度。
第二行n个整数a1 a2…an,表示从第一首到最后一首顺序的初始歌单中各歌曲的ID。
对于100%的数据,1≤n≤50000,1≤a≤10^9
输出描述
输出一行n个整数表示按照规则后真正的放歌顺序。

题目分解/做题思路

题目分解:
给一个歌曲列表
1、首先先听第一首歌,然后删除。
2、判断歌单是否为空,如果不为空,剩下的歌单作为一个新的歌单
3、将新歌单中的第一首歌 移到 最后一首
4、播放移动后新列表的第一首歌,并删除。
5、知道新列表中的歌曲为空,返回结果,结果是每次播放歌曲的ID
可以理解为一个list列表,第一次删除第一个元素,然后列表的第一个元素移动到最后一个元素,然后再删除第一个元素。知道列表为空

解题方法01

解题步骤

public class ListenMusic {
    public static void main(String[ ] args) {
        Scanner sc =new Scanner(System.in);
        int n = sc.nextInt();
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            list.add(sc.nextInt());
        }

        sc.close();

        List<Integer> result = new ArrayList<>();   // 存放当前播放的歌曲
        while (!list.isEmpty()){                    // 如果列表不为空
            result.add(list.get(0));                // 将当前列表的第一首播放的歌放入结果中
            list.remove(0);                         // 播放后移除

            if(!list.isEmpty()){                    // 判断剩下的歌曲是否为空
                list.add(list.get(0));              // 如果不为空,将第一首在末尾处
                list.remove(0);                     // 将第一个放到末尾了,所以删除原来位置的元素
            }
        }
        
        for (int i = 0; i < result.size(); i++) {
            System.out.print(result.get(i) +" ");
        }
    }
}

相关标签:循环

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值