题解 | #MP3光标位置#

MP3光标位置

https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15

#include <iostream>
using namespace std;
#include <list>
#include <string>
int main() {
    int num;
    string cmd;
    cin >> num >> cmd;

    int winp = 1;
    list<int> lst;
    for (int i = 1; i <= num; i++) {
        lst.push_back(i);
    }
    auto p = lst.begin();
    auto beg = lst.begin();
    auto end = lst.begin();
    auto lstEnd = lst.end()--;
    for (int i = 0; i < 3; i++) {
        end++;
    }
    //cout << "p: " << *p << " beg: " << * beg << " end: " << * end << endl;

    for (int i = 0; i < cmd.size(); i++) {
        if (cmd[i] == 'U') {
            if (*p == *beg && *p != *lst.begin()) {
                beg--;
                end--;
            } else if (*p == *beg && *p == *lst.begin()) {
                //cout << "superU" << endl;
                for (int j = 0; j < 4; j++) {
                    beg--;
                    end--;
                }
                beg--;
                end--;
                p--;
            }

            p--;

        } else if (cmd[i] == 'D') {

            if (*p == *end && *p != *lstEnd) {
                beg++;
                end++;
            } else if (*p == *end && *p == *lstEnd) {
                //cout << "superD" << endl;
                for (int j = 0; j < 4; j++) {
                    beg++;
                    end++;
                }
                beg++;
                p++;
                end++;
            }
            p++;

        }

        //cout << "cmd: " << cmd[i] << " p: " << *p << " beg: " << * beg << " end: " << *
        //     end << endl;
    }

    for (int i = 0; i < 4 && i < num; i++) {
        cout << *beg << " ";
        beg++;
    }
    cout << "\n"
         << *p << endl;
}

C++的STL的list是双向循环链表,但是记住头尾都会遇到一个额外的迭代器可访问的区域,所以跨过边界的时候需要多加/减一次

利用双向循环的特性和头尾指针,可以实现题目所需的功能

最后有样例曲子少于4首的,记得特殊条件也要更改输出

这样的写的好处在于逻辑代码其实是兼容所有情况

华为机试刷题记录 文章被收录于专栏

记录一下手打代码的解题思路方便复习

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-20 14:55
点赞 评论 收藏
分享
05-29 20:34
门头沟学院 C++
KarlAllen:得做好直接春招的准备。学历差的话,一是面试要求会比学历好的严格不少,二是就算面试通过了也会被排序。总之暑期和秋招对于学历差的就是及其不友好
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务