题目:
题解:
滑动窗口+模拟
1.滑动窗口来求取当前列表歌曲
2.需要考虑特殊翻页情况
3.每次光标移动之后需要更新当前窗口
public void getMP3Cursor(int number, String path) {
// 当前光标位置
int cursor = 1;
// 起始窗口位置
int up = 1, down = 4;
for (char c : path.toCharArray()) {
if (c == 'U') {
// 特殊向上翻页,需要更新当前光标和窗口位置
if (cursor == 1) {
down = number;
// up最小取到起始位置1
up = Math.max(down - 3, 1);
cursor = down;
} else {
cursor--;
}
}
if (c == 'D') {
// 特殊向下翻页,需要更新当前光标和窗口位置
if (cursor == number) {
up = 1;
// down最大取到最后位置number
down = Math.min(up+3, number);
cursor = 1;
} else {
cursor++;
}
}
// 更新窗口
if (cursor < up) {
up--;
down--;
}
// 更新窗口
if (cursor > down) {
up++;
down++;
}
}
时间复杂度:O(n)