题目描述
输入描述:
第一行输入为一个整数N(1~10),表示每N个结果里最多出一个图片结果
第二行输入为一个整数M(1~100),表示有M个待处理的推荐结果
第三行~第2+M行为具体的 M 个待处理结果,每行具体为:字符串 V_ 或 P_ 打头,后面接输入时0~M-1的顺序标号
输入描述:
第1行为K,表示打散处理后结果的长度
第2~K+1行为打散后的结果,具体为:字符串 V_ 或 P_ 打头,后面接输入时 0~M-1 的顺序标号
List<String> param = new ArrayList<>();
param.add("V_0");
param.add("V_1");
param.add("V_2");
param.add("P_3");
param.add("P_4");
param.add("P_5");
param.add("V_6");
param.add("P_7");
param.add("V_8");
param.add("V_9");
如上 M=10 当 N=3 时,
输出应为:V_0 V_1 V_2 P_3 V_6 V_8 P_4 V_9 最终结果 每三个元素中 最多有一个 picture
解题思路-java
public List<String> getRecommendResult(List<String> picAndVideo, int maxInterval) {
if(picAndVideo == null || picAndVideo.size() == 0) {
return null;
}
List<String> result = new ArrayList<>();
boolean firstPic = false;
int index = 0;
while (!firstPic && index <= picAndVideo.size()) {
if(picAndVideo.get(index).startsWith("V_")) {
result.add(picAndVideo.get(index));
index++;
} else {
firstPic = true;
}
}
int currentSize = result.size();
if(currentSize == picAndVideo.size()) {
return result;
}
Queue<String> pic = new LinkedList<>();
Queue<String> vid = new LinkedList<>();
while(index <= picAndVideo.size()) {
if(picAndVideo.get(index).startsWith("V_")) {
vid.add(picAndVideo.get(index));
} else {
pic.add(picAndVideo.get(index));
}
index++;
}
while(!pic.isEmpty() && !vid.isEmpty()) {
if(currentSize >= (maxInterval - 1)) {
result.add(pic.poll());
currentSize = 0;
} else {
result.add(vid.poll());
currentSize++;
}
}
while(!vid.isEmpty()) {
result.add(vid.poll());
}
if(!pic.isEmpty() && currentSize >= (maxInterval - 1)) {
result.add(pic.poll());
}
return result;
}
- 测试结果