问题描述:
给定一个数字序列,找出第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大的数
原文:http://my.oschina.net/jimmyhan/blog/524756