浪潮笔试编程题

package leetcode;

import java.util.*;

/**
 * @author 江河
 * @date 2019-08-26 20:04
 */
public class MaxTree {
  private static int[] oddArr;
  private static int[] evenArr;
  public static int[] getLongestTreeSequence(int[] arr, List<Integer> cutTreeList) {

    PriorityQueue<Integer> queue = new PriorityQueue<>();
    for (int i = 0; i < arr.length; i++) {
      queue.add(arr[i]);
    }
    Collections.sort(cutTreeList);
    int pos = -1;
    int longest = 0;
    int i = 0;
    while (!queue.isEmpty() && i < cutTreeList.size()) {
      int cutTreeVal = cutTreeList.get(i);
      int curLen = 0;
      int curPos = queue.peek();
      while (!queue.isEmpty() && queue.peek() < cutTreeVal) {
        queue.poll();
        curLen++;
      }
      if (!queue.isEmpty() && cutTreeVal == queue.peek()) {
        queue.poll();
      }
      if (curLen > longest) {
        pos = curPos;
        longest = curLen;
      }
      i++;
    }
    if (!queue.isEmpty()) {
      if (queue.size() > longest) {
        pos = queue.peek();
        longest = queue.size();
      }
    }
    int[] ret = new int[2];
    ret[0] = pos;
    ret[1] = longest;
    return ret;
  }

  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int[] oddArr = new int[50];
    oddArr[0] = 1;
    for (int i = 2; i <= 50; i++) {
      oddArr[i - 1] = 2 * i - 1;
    }
    int[] evenArr = new int[50];
    for (int j = 1; j <= 50; j++) {
      evenArr[j - 1] = j * 2;
    }
    while (in.hasNext()) {
      String input1 = in.nextLine();
      int N = Integer.parseInt(input1);
      String input2 = in.nextLine();
      String[] cutTrees = input2.split(" ");
      List<Integer> oddList = new ArrayList<>();
      List<Integer> evenList = new ArrayList<>();
      for (int j = 0; j < cutTrees.length; j++) {
        int temp = Integer.parseInt(cutTrees[j]);
        if ((temp & 1) == 0) {
          evenList.add(temp);
        } else {
          oddList.add(temp);
        }
      }
      int[] oddLongest = getLongestTreeSequence(oddArr, oddList);
      int[] evenLongedt = getLongestTreeSequence(evenArr, evenList);
      if (oddLongest[1] > evenLongedt[1]) {
        System.out.print(oddLongest[0] + " " + oddLongest[1]);
      } else if (oddLongest[1] < evenLongedt[1]) {
        System.out.print(evenLongedt[0] + " " + evenLongedt[1]);
      } else {
        if (evenLongedt[0] < oddLongest[0]) {
          System.out.print(evenLongedt[0] + " " + evenLongedt[1]);

        } else {
          System.out.print(oddLongest[0] + " " + oddLongest[1]);
        }
      }
    }
  }
}

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值