• leetcode快排相关


    leetcode:75颜色分类(3way)、215数组中的第K个最大元素(normal)

    3way

    private static void quick3waySort(int[] arr, int left, int hi) {
        if (lo >= hi) return; // 注意大于等于
    
        int mid = left + (right - left) / 2;
        swap(arr, lo, mid);
    
        int val = arr[lo];
        // lt表示等于val的,lt-1才是小于val的位置
        // gt表示还没比较的位置,但gt+1就是大于val的
        int lt = lo, gt = hi;
        int i = lo + 1;
        while (i <= gt) {
            if (arr[i] < val) swap(arr, lt++, i++); // nums[i] == 0 颜色分类
            else if (arr[i] > val) swap(arr, i, gt--); // nums[p] == 2 颜色分类
            else i++;
        }
    
        quick3waySort(arr, lo, lt - 1);
        quick3waySort(arr, gt + 1, hi);
    }
    

    normal

    注意这里用for循环!!!

    public int findKthLargest(int[] nums, int k) {
        // 左右指针,调整k
        int left = 0, right = nums.length - 1, n = nums.length - k, rank = 0;
        // 遍历,下面写法与二分查找十分相像
        while (right >= left){
            // 比较partition结果调整指针
            rank = partition(nums, left, right);
            if (rank < n){
                left = rank + 1;
            } else if (rank > n){
                right = rank - 1;
            } else {
                break;
            }
        }
        return nums[rank];
    }
    
    // partition函数
    private int partition(int[] nums, int left, int right){
        // 设置mid,保存mid值pivot,lt指针
        int mid = left + (right - left) / 2, val = nums[mid], lt = left;
        // 交换mid与right
        swap(nums, mid, right);
        // 遍历
        for (int i = left; i < right; i++){
            // 如果小于pivot,就掉到前面,lt++    
            if (nums[i] < val){
                swap(nums, lt, i);
                lt++;
            }
        }
        
        // 交换pivot和lt
        swap(nums, lt, right);
        // 返回lt
        return lt;
    }
    
  • 相关阅读:
    人民币对美元汇率的大数据分析与预测【完整代码】
    碧瑶答疑网——用户使用手册和反馈
    碧瑶答疑网—系统设计和任务分配
    碧瑶答疑网之选题报告
    碧瑶答疑网-软件需求规格说明书
    UEgCWbGGLA
    https://www.cnblogs.com/ggzjf/
    66666
    继承-代码块-接口
    人民币对澳元汇率的大数据分析与预测
  • 原文地址:https://www.cnblogs.com/code2one/p/10177011.html
Copyright © 2020-2023  润新知