开发者社区 问答 正文

求有序整数Set<Integer>集合内最近且大于他的数

输入一个数,求有序整数Set集合内最近的数
如:Set orders = new HashSet();
orders.add(8);
orders.add(3);
orders.add(4);
orders.add(7);
orders.add(6);
orders.add(5);

输入2:得到3;
输入8:找不到返回null;

展开
收起
蛮大人123 2016-05-31 11:23:27 2391 分享 版权
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    首先,对集合进行排序;其次,执行查找过程,先看能否找到输入的值,如果找到且该元素不是最后一个元素的话,则返回其后一个元素;
    最后,如果找不到这个输入值,就找第一个比其大的数并返回。
    其他情况,均返回null。实现代码参考:

    public class OrderTest {
        public static void main(String[] args) {
            Set orders = new HashSet();
             orders.add(8);
             orders.add(3);
             orders.add(4);
             orders.add(7);
             orders.add(6);
             orders.add(5);
             System.out.println(getLatestLargerNumber(orders,2));
             System.out.println(getLatestLargerNumber(orders,8));
             System.out.println(getLatestLargerNumber(orders,6));
        }
    
        //查找第一个大等于number的数
        public static Integer getLatestLargerNumber(Set<Integer> list,int number){
            //集合为空或者只有一个元素时返回空
            if(list==null||list.size()==0){
                return null;
            }
    
            //先对Set集合进行排序
            Object[] numbers = (Object[]) list.toArray();
            Arrays.sort(numbers);
    
            Integer value = null;
            int length = numbers.length;
            for(int i =0;i<length;i++){
                int current = (Integer)numbers[i];
                //找到number,且它不是最后一个元素,那么i+1位置处的值一定是第一个大于number的数
                if(current==number){
                    if(i+1<length){
                        value = (Integer)numbers[i+1];
                    }
                    break;  
                }
    
                //找不到number时,就找第一个比其大的元素
                if(current>number){
                    value= current;
                    break;
                }
            }
    
            return value;
        }
    }
    2019-07-17 19:21:39
    赞同 展开评论
问答地址: