zoukankan      html  css  js  c++  java
  • 剑指offer

    point offer 40

    package PointOffer;
    
    import java.util.Comparator;
    import java.util.PriorityQueue;
    
    public class Solution40 {
    
        public static int[] getLeastNumbers(int[] arr, int k) {
            PriorityQueue<Integer> heap = new PriorityQueue<>(k, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return o2 - o1;
                }
            });
            for (int i = 0; i < arr.length; i++) {
                heap.offer(arr[i]);
                if (heap.size() > k) {
                    heap.poll();
                }
            }
            int[] res = new int[k];
            for (int i = 0; i < heap.size(); i++) {
                res[i] = heap.poll();
            }
            return res;
        }
    
        public static void swap(int[] arr, int x, int y) {
            int temp = arr[x];
            arr[x] = arr[y];
            arr[y] = temp;
        }
    
        //快排搜索
        public static int quickSearch(int[] arr, int l, int r, int k) {
            int t = partition(arr, l, r);
            if (t == k) {
                return arr[t];
            } else if (t > k) {
                System.out.println("t=" + t + ",k=" + k);
                return quickSearch(arr, l, t - 1, k);
            } else {
                System.out.println("t=" + t + ",k=" + k);
                return quickSearch(arr, t + 1, r, k);
            }
        }
    
        //快排
        public static void quickSort(int[] arr, int l, int r) {
            if (l < r) {
                int t = partition(arr, l, r);
                quickSort(arr, l, t - 1);
                quickSort(arr, t + 1, r);
            }
        }
    
        public static int partition(int[] arr, int L, int R) {
            int l = L + 1, r = R, t = arr[L];
            System.out.println("l=" + l + ",r=" + r);
    //        System.out.println("arr[l]="+arr[l]);
            if (l < r) {
                while (true) {
                    while (l < r && arr[r] > t) r--;
                    while (l < r && arr[l] < t) l++;
                    if (l >= r) break;
                    swap(arr, l, r);
                }
                printArray(arr);
                swap(arr, L, r);
            }
            return r;
        }
    
        public static void printArray(int[] arr) {
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + ",");
            }
            System.out.println();
        }
    
        public static void main(String[] args) {
            int[] arr = new int[]{213, 32, 1243, 33, 88, 2};
            quickSort(arr, 0, arr.length - 1);
    //        System.out.println(quickSearch(arr,0,arr.length-1,5));
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + ",");
            }
            System.out.println();
        }
    }
    
  • 相关阅读:
    数据库中表的主键的定义
    软件的三大类型
    常用逻辑公式
    软件开发中常用英文含义
    2017.11.27T19_8zuoye
    2017.11.29T19_B1_9zuoye chihuolianmeng
    2017.12.1T19_B2_1zuoye
    2017.12.6T19_B2_3.4
    2017.12.1T19_B2_2zuoye
    2017.12.6T19_B2_3.2 zuoye
  • 原文地址:https://www.cnblogs.com/zhouyu0-0/p/14857513.html
Copyright © 2011-2022 走看看