import java.util.Scanner;
/**
* 移动光标位置
* @author Green.Gee
* @date 2022/11/15 14:33
* @email green.gee.lu@gmail.com
*/
public class MoveCursePosition {
/**
* 环形数组处理能力
* 处理尾页不满足 页数大小
* 处理尾页回溯窗口边界缩小
* 处理普通翻页滚动下滑窗口
* 处理总页数不满足页数大小
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
final int pageSize = 4;
int num = Integer.valueOf(in.nextLine());
String cmd = in.nextLine();// must be U/D
int [] arr = new int[num];
for(int i = 0; i < num; i++){
arr[i] = i + 1;
}
int currentIndex = 0;// default first music of the list
int endIndex = arr.length - 1;// last index
int begin = 0,end = 3;
for(String item : cmd.split("")){
if("U".equals(item)){
if(currentIndex == 0){
currentIndex = endIndex;
begin = arr.length % 4 == 0 ? endIndex - 4 : endIndex - (arr.length % 4);
end = endIndex;
}else{
--currentIndex;
if(currentIndex < begin)
--begin;
if(end - currentIndex >= pageSize)
--end;
}
}else if("D".equals(item)){
if(currentIndex == endIndex){
currentIndex = 0;
begin = 0;
end = 3;
}else{
++currentIndex;
if(currentIndex > end){
++begin;
++end;
}
}
}else break;
}
if(num <= pageSize){
begin = 0;
end = num - 1;
}
for(int i = begin; begin < end; begin++){
System.out.print(arr[begin]+" ");
}
System.out.print(arr[end]+"\n");
System.out.println(arr[currentIndex]);
}
}
}
环形数组模拟滑动窗口
最新推荐文章于 2024-07-10 21:37:49 发布