zoukankan      html  css  js  c++  java
  • n个整数,求这中间最小的k个整数(Java)

    好久没有写博客了,处于对于编程的热爱,我又回来了

    回到这个问题,总共有两种思路

    1、1)建立一个ArrayList,先存进去前k个数,接着从小到大排序

    2)从这个n个数的第k+1数开始和ArrayList最后的一个数比较,如果比最后一个数小,就替换。接着排序。

    3)重复上一个过程,直到所有的数遍历完毕。

    import java.util.ArrayList;
    public class Solution {
        public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
            ArrayList<Integer> kArray = new ArrayList<Integer>();
            if (k > input.length || k == 0) {
                return kArray;
            }
            for(int i = 0;i < k; i++) {
                kArray.add(input[i]);
            }
            kArray.sort(null);
            /*for (int i = 0;i < k; i++) {
                System.out.print(kArray.get(i));
            }
            System.out.println();*/
           for (int i = k; i < input.length; i++) {
                if (kArray.get(kArray.size() - 1) > input[i]) {
                    kArray.remove(kArray.size() - 1);
                    kArray.add(input[i]);
                    kArray.sort(null);
                }
            }
           return kArray;
        }
    }
    添加笔记

    2、思路同上,但是这次中间过程采用存n个数的容器不是ArrayList,而是改为最大值堆,也就是使用优先队列

    package com.example.test;
    
    import java.util.ArrayList;
    import java.util.Comparator;
    import java.util.Iterator;
    import java.util.PriorityQueue;
    import java.util.function.Function;
    import java.util.function.ToDoubleFunction;
    import java.util.function.ToIntFunction;
    import java.util.function.ToLongFunction;
    
    public class Solution {
        public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
            ArrayList<Integer> kArray = new ArrayList<Integer>();
            //如果想要得到的k个数目比n还大,返回k空的ArrayList
            if (k > input.length || k == 0) {
                return kArray;
            }
            class InternalComparator implements Comparator<Integer>{
    
                public int compare(Integer arg0, Integer arg1) {
                    // TODO Auto-generated method stub
                    if (arg0.intValue() < arg1.intValue()) {
                        return 1;
                    } else if (arg0.intValue() == arg1.intValue()) {
                        return 0;
                    }
                    return -1;
                }
            }
            InternalComparator paramComparator = new InternalComparator();
            PriorityQueue<Integer> pq = new PriorityQueue<Integer>(paramComparator);
            //添加k个数
            for(int i = 0;i < k; i++) {
                pq.add(input[i]);
            }
    //        for (Iterator<Integer> i = pq.iterator(); i.hasNext(); ) {
    //            System.out.println(i.next());
    //        }
    //        System.out.println();
            //删除并新添加
           for (int i = k; i < input.length; i++) {
                if (input[i] < pq.element()) {
                    pq.remove();
                    pq.add(input[i]);
                }
            }
           kArray.addAll(pq);
           kArray.sort(null);
           return kArray;
        }
        public static void main(String []args) {
            int input[] = {4,5,1,6,2,7,3,8};
            ArrayList<Integer> kArray = new Solution().GetLeastNumbers_Solution(input, 4);
            if (kArray.size() != 4) {
                return;
            }
            for (int i = 0;i < 4; i++) {
                System.out.print(kArray.get(i));
            }
            System.out.println();
        }
    }
  • 相关阅读:
    HDU 5059 Help him
    HDU 5058 So easy
    HDU 5056 Boring count
    HDU 5055 Bob and math problem
    HDU 5054 Alice and Bob
    HDU 5019 Revenge of GCD
    HDU 5018 Revenge of Fibonacci
    HDU 1556 Color the ball
    CodeForces 702D Road to Post Office
    CodeForces 702C Cellular Network
  • 原文地址:https://www.cnblogs.com/adamhome/p/7886287.html
Copyright © 2011-2022 走看看