推荐结果打散

题目描述

 输入描述:
   第一行输入为一个整数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

    /**
     * 推荐结果打散
     * @param picAndVideo   用 list 代表输入的 M 行数据
     * @param maxInterval   用 maxInterval 代表 N ,表示每 maxInterval 中最多允许一个 图片出现
     * @return              最终打散的结果集
     */
    public List<String> getRecommendResult(List<String> picAndVideo, int maxInterval) {
    
    
      	if(picAndVideo == null || picAndVideo.size() == 0) {
    
    
          return null;
        }
      	// 首先定义一个结果集
      	List<String> result = new ArrayList<>();
      	// 假如第一个 是  video  那么可以直接添加到结果集中去
      	boolean firstPic = false;
      	int index = 0;
      	while (!firstPic && index <= picAndVideo.size()) {
    
    
          if(picAndVideo.get(index).startsWith("V_")) {
    
    
            result.add(picAndVideo.get(index));
            index++;
          } else {
    
    
            // 遇到了 picture
            firstPic = true;
          }
        }
     		// 此时 处理完毕,若是入参数 中没有一个  picture 直接返回
      	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()) {
    
    
          // 如果当前 currentSize >= maxInterval-1 则满足放入一个 picture 的标准
          if(currentSize >= (maxInterval - 1)) {
    
    
            result.add(pic.poll());
            currentSize = 0;
          } else {
    
    
            result.add(vid.poll());
            currentSize++;
          }
        }
      
      	// 处理完毕,如果  vid  不为空,全部加入到结果集中去
      	while(!vid.isEmpty()) {
    
    
          result.add(vid.poll());
        }
      
        // 如果此时 currentSize >= maxInterval-1 且恰好  pic 不为空
      	if(!pic.isEmpty() && currentSize >= (maxInterval - 1)) {
    
    
          result.add(pic.poll());
        }
     		
        return result;
    }
  • 测试结果
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/GoNewWay/article/details/115096487