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();
        }
    }
    
  • 相关阅读:
    pku 1061 青蛙的约会 扩展欧几里得
    莫比乌斯反演
    51Nod 1240 莫比乌斯函数
    51Nod 1284 2 3 5 7的倍数 容斥原理
    51Nod 1110 距离之和最小 V3 中位数 思维
    51Nod 1108 距离之和最小 V2 1096 距离之和最小 中位数性质
    HDU 2686 Matrix 多线程dp
    51Nod 1084 矩阵取数问题 V2 双线程DP 滚动数组优化
    HDU 1317XYZZY spfa+判断正环+链式前向星(感觉不对,但能A)
    设计模式(4)---单例模式
  • 原文地址:https://www.cnblogs.com/zhouyu0-0/p/14857513.html
Copyright © 2011-2022 走看看