剑指Offer—29—最小的 K 个数
来源:互联网 发布:python xgboost 编辑:程序博客网 时间:2024/05/21 11:18
最小的K个数 : 输入n个整数,找出其中最小的 K 个数。例如输入4, 5, 1, 6, 2, 7, 3, 8 这 8 个数字,则最小的 4 个数字是 1, 2, 3, 4 。
package A29最小的K个数;import java.util.ArrayList;import java.util.List;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> list = new ArrayList<>(); if (k > input.length) { return list; } //1. 冒泡排序,每轮选出一个最小的加入到List,外层循环K次即可,时间复杂度O(n*K) for (int i = 0; i < k; i++){ for (int j = input.length-1; j > i ; j--) { if (input[i] > input[j]){ int temp = input[i]; input[i] = input[j]; input[j] = temp; } } list.add(input[i]); } return list; } public static void main(String[] args) { Solution solution = new Solution(); int[] input = {6,3,9,3,6,12,1,0}; List<Integer> list = solution.GetLeastNumbers_Solution(input,3); for (int i : list) { System.out.println(i); } }}
package A29最小的K个数;import java.util.ArrayList;import java.util.List;public class Solution2 { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { // 基于快排的思想,每一次划分都会有一个数字位于最终位置 ArrayList<Integer> list = new ArrayList<>(); if (k > input.length) { return list; } int low = 0; int high = input.length-1; int index = partition(input, low, high); while (index != k-1){ if (index > k-1){ high = index - 1; }else { low = index + 1; } index = partition(input,low,high); } for (int i = 0; i < k; i++) { list.add(input[i]); } return list; } // 返回start位置的数最终的索引 public int partition(int[] input,int start,int end){ int temp = input[start]; while (start < end){ while( temp <= input[end] && start < end){ end--; } input[start] = input[end]; while (temp >= input[start] && start < end){ start++; } input[end] = input[start]; } input[start] = temp; return start; } public static void main(String[] args) { Solution2 solution2 = new Solution2(); int[] temp = {4,7,1,3,9,7}; //solution2.partition(temp,0,5); List<Integer> list = solution2.GetLeastNumbers_Solution(temp,3); for (int i : list) { System.out.println(i); } }}
阅读全文
0 0
- 剑指offer—最小的K个数
- 剑指offer — 最小的k个数
- 剑指Offer——(29)最小的k个数
- 剑指Offer—29—最小的 K 个数
- 剑指offer(29)—最小的K个数
- 剑指offer 29 最小的k个数
- 《剑指offer》——最小的k个数
- 剑指offer——最小的K个数
- 剑指Offer—— 最小的K个数
- 剑指offer——最小的K个数
- 剑指offer——29.最小的k个数
- 剑指offer 面试题30—最小的k个数
- 剑指offer:最小的k个数
- 【剑指offer】最小的k个数
- 剑指offer-30:最小的k个数
- 最小的k个数(剑指offer)
- 剑指offer--最小的K个数
- 剑指Offer之 - 最小的k个数
- Spring Framework
- jq 对each和$()的理解
- Android开发之多线程
- UVa 11054 例题8-5 Gergovia的酒交易
- 分页工具类
- 剑指Offer—29—最小的 K 个数
- 慎用锁
- Numbers HDU
- Struts2的学习之路(五)
- final和static的区别
- richface1-3
- 当你面临选择的时候
- CodeForces
- SetupDiCallClassInstaller处理流程