给定一个数字序列list和一个数字x,找出序列中第3个比x大的数

问题描述:

给定一个数字序列,找出第3个比x大的数。比如:

给定序列: 9,7,5,2,18,8,10

x: 5

则输出9

x=9

则输出不存在

问题分析:

保存一个包含3个元素的有序列,在找到更合适的数的时候,把最后一个删除.需要考虑以下特殊情况:

1, 读入的数比x小

2,3个元素的序列尚未存满

3,3个元素的序列存满了,但是读入的数比任何一个都大

4,返回的时候如果尚未填满3个元素则返回没有结果

代码实现:

package oschina.onsite;
/**
 * @project: oschina
 * @filename: find3larger.java
 * @version: 0.10
 * @author: JM Han
 * @date: 9:26 2015/10/31
 * @comment: 在序列中找出第三个比一个数大的数
 * @result:
 */

import java.util.*;

import static tool.util.printGenericIterator;

public class find3larger {
   public static final int NUM = 3;

   public static void find3larger(int n, List<Integer> lst) {
      TreeSet<Integer> innerlst = new TreeSet<Integer>();

      for (int i = 0; i < lst.size(); i++) {
         int x = lst.get(i);

         if(x <= n)
            continue;

         if (innerlst.size() < NUM) {
            innerlst.add(x);
         } else {
            int max = innerlst.last();
            if (x > max)
               continue;
            else{
               innerlst.add(x);
               innerlst.remove(max);
            }
         }
      }

      if(innerlst.size() == NUM)
         System.out.println("3rd larger item: " + innerlst.last());
      else
         System.out.println("no 3rd larger item exist");
   }

   public static void main(String[] args) {
      Integer[] testArray = new Integer[]{9,7,5,2,18,8,10};
      List<Integer> lst = Arrays.asList(testArray);
      find3larger(2, lst);
   }
}



你可能感兴趣的:(给定一个数字序列list和一个数字x,找出序列中第3个比x大的数)