劍指offer66題--Java實現,c++實現和python實現 29.最小的K個數
阿新 • • 發佈:2018-12-29
題目描述
輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。
C++
//堆排 class Solution { public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int> res; if(input.empty()||k>(int)input.size()||k<1) return res; make_heap(input.begin(),input.end(),greater<int>());//生成小根堆 for(int i=0;i<k;i++) { res.push_back(input.front()); pop_heap(input.begin(),input.end(),greater<int>()); input.pop_back(); push_heap(input.begin(),input.end(),greater<int>()); } return res; } };
JAVA
//快排 import java.util.ArrayList; import java.util.Arrays; public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> list=new ArrayList<>(); if(input.length<k||k==0) return list; Arrays.sort(input); for(int i=0;i<k;i++) list.add(input[i]); return list; } }
Python
# -*- coding:utf-8 -*- class Solution: def GetLeastNumbers_Solution(self, tinput, k): # write code here if tinput == None: return None l = len(tinput) if k > l: return [] tinput = sorted(tinput) return tinput[:k]