问题描述:
给定一个数字序列,找出第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);
}
}