颜色分类
- 题目链接
 
颜色分类
https://leetcode.cn/problems/sort-colors/description/
- 算法原理
 

- 代码步骤
 
class Solution {
public:
    void sortColors(vector<int>& nums) 
    {
        int n = nums.size();
        int i = 0, left = -1, right = n;
        while(i < right)
        {
            if(nums[i] == 0) swap(nums[++left], nums[i++]);
            else if(nums[i] == 1) i++;
            else swap(nums[--right], nums[i]);
        }   
    }
}; 
排序数组
- 题目链接
 
排序数组
https://leetcode.cn/problems/sort-an-array/description/
- 算法原理
 

- 代码步骤
 
class Solution {
public:
    vector<int> sortArray(vector<int>& nums) 
    {
        srand(time(NULL));
        qsort(nums, 0, nums.size() - 1);
        return nums;
    }
    void qsort(vector<int>& nums, int l, int r)
    {
        if(l >= r) return;
        int key = getRandom(nums, l, r);
        int i = l, left = l - 1, right = r + 1;
        while(i < right)
        {
            if(nums[i] < key) swap(nums[++left], nums[i++]);
            else if(nums[i] == key) i++;
            else swap(nums[--right], nums[i]);
        } 
        qsort(nums, l, left);
        qsort(nums, right, r);
    }
    int getRandom(vector<int>& nums, int left, int right)
    {
        return nums[rand() % (right - left + 1) + left];
    }
}; 
数组中第k个最大元素
- 题目链接
 
数组中的第k个最大元素
https://leetcode.cn/problems/kth-largest-element-in-an-array/description/
- 算法原理
 

- 代码步骤
 
class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) 
    {
        srand(time(NULL));
        return qsort(nums, 0, nums.size() - 1, k);    
    }
    int qsort(vector<int>& nums, int l, int r, int k)
    {
        if(l == r) return nums[l];
        int key = getRandom(nums, l, r);
        int i = l, left = l - 1, right = r + 1;
        while(i < right)
        {
            if(nums[i] < key) swap(nums[++left], nums[i++]);
            else if(nums[i] == key) i++;
            else swap(nums[--right], nums[i]);
        }
        int c = r - right + 1, b = right - left - 1;
        if(c >= k) return qsort(nums, right, r, k);
        else if(c + b >= k) return key;
        else return qsort(nums, l, left, k - c - b);
    }
    int getRandom(vector<int>& nums, int left, int right)
    {
        return nums[rand() % (right - left + 1) + left];
    }
}; 
库存管理III
- 题目链接
 
库存管理III
https://leetcode.cn/problems/zui-xiao-de-kge-shu-lcof/description/
- 算法原理
 

- 代码步骤
 
class Solution {
public:
    vector<int> inventoryManagement(vector<int>& stock, int cnt) 
    {
        srand(time(NULL));
        qsort(stock, 0, stock.size() - 1, cnt);
        return {stock.begin(), stock.begin() + cnt};
    }
    void qsort(vector<int>& stock, int l, int r, int cnt)
    {
        if(l >= r) return;
        int key = getRandom(stock, l, r);
        int i = l, left = l - 1, right = r + 1;
        while(i < right)
        {
            if(stock[i] < key) swap(stock[++left], stock[i++]);
            else if(stock[i] == key) i++;
            else swap(stock[--right], stock[i]);
        }
        int a = left - l + 1, b = right - left - 1;
        if(cnt < a) qsort(stock, l, left, cnt);
        else if(cnt <= a + b) return;
        else qsort(stock, right, r, cnt - a - b);
    }
    int getRandom(vector<int>& stock, int left, int right)
    {
        return stock[rand() % (right - left + 1) + left];
    }
};
                

![[spring]MyBatis介绍 及 用MyBatis操作简单数据库](https://i-blog.csdnimg.cn/direct/1d5f116660074c0081468a38e19c2208.png)
















