zoukankan      html  css  js  c++  java
  • Leetcode 面试题40. 最小的k个数

    在这里插入图片描述
    直接使用API函数调用快速排序,面试种肯定是不行的!

    利用快速排序的分区思想,我们知道快排的划分函数每次执行完后都能将数组分成两个部分,小于等于分界值 pivot 的元素的都会被放到数组的左边,大于的都会被放到数组的右边,然后返回分界值的下标pos

    那么:
    如果
    pos = k 直接返回
    pos<k 对左边再次分区,因为正好k大的数一定再边,我们要找到它
    pos<k对左边再次分区,因为正好k大的数一定再边,我们要找到它

    import java.util.Arrays;
    
    class Solution {
        private int k ;
        private int[] arr ;
        public int[] getLeastNumbers(int[] arr, int k) {
            this.k = k;
            this.arr = arr;
            if(k != arr.length) {//如果等于length的话不用找了,就是整个数组
                quickSort(0, arr.length - 1);
            }
            int[] res = new int[k];
            for (int i = 0; i < k; i++) {
                res[i] = arr[i];
            }
            return res;
        }
        public void quickSort(int left,int right){
            int pos = partition(arr, left, right);
            if(pos == k) return;
            if(pos < k){
                quickSort(pos+1,right);
            }else
                quickSort(left,pos-1);
        }
        private int partition(int[] arr , int left , int right){
            int base = left;
            while(left <= right){
                while (left <= right && arr[left] <= arr[base]){
                    left++;
                }
                while (left <= right && arr[right] >= arr[base]){
                    right--;
                }
                if (left <= right)
                    swap(arr,left,right);
            }
            swap(arr,right,base);
            return right;
        }
        private void swap(int[] arr,int a,int b){
            int t=  arr[a];
            arr[a] = arr[b];
            arr[b] = t;
        }
    
        public static void main(String[] args) {
            System.out.println(Arrays.toString(new Solution().getLeastNumbers(new int[]{0,0,1,5,4,2,4,3,1,4}, 5)));
        }
    }
    
  • 相关阅读:
    ajax 发送请求无法重定向问题
    网页中转跳转的几种方式
    后台返回的HTML整个页面代码打开方法
    Json对象与Json字符串的转化、JSON字符串与Java对象的转换
    SpringMVC ModelAndView跳转失效
    springMVC中前台ajax传json数据后台controller接受对象为null
    $.ajax 中的contentType
    springMVC--请求的跳转和传值
    Windows NT WinLogon Notify
    虚拟机检测技术剖析
  • 原文地址:https://www.cnblogs.com/HoweZhan/p/12531174.html
Copyright © 2011-2022 走看看