当前位置: 首页 > article >正文

【C++算法】分治——快排

颜色分类

  • 题目链接

颜色分类icon-default.png?t=O83Ahttps://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]);
        }   
    }
};

排序数组

  • 题目链接

排序数组icon-default.png?t=O83Ahttps://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个最大元素icon-default.png?t=O83Ahttps://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

  • 题目链接

库存管理IIIicon-default.png?t=O83Ahttps://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];
    }
};

http://www.kler.cn/news/316555.html

相关文章:

  • 力扣(leetcode)每日一题 2374 边积分最高的节点
  • 神经生物学精解【2】
  • LeetCode[中等]
  • 迷雾大陆免费辅助:强流派推荐攻略!VMOS云手机自动辅助挂机教程!
  • [JavaEE] TCP协议
  • hql杂谈一
  • 黑马智数Day3
  • C#设计模式之备忘录模式
  • CMake 构建Qt程序弹出黑色控制台
  • vue3+ant design vue 中弹窗自定义按钮设置及以冒号为基准布局
  • IM项目-----语音识别子服务
  • Java笔试面试题AI答之设计模式(4)
  • 进击J7:对于ResNeXt-50算法的思考
  • [深度学习]Pytorch框架
  • 猿大师办公助手在线编辑Office为什么要在客户端电脑安装插件微软Office或金山WPS?
  • 政务安全体系构建中的挑战
  • 使用思科搭建企业网规划训练,让网络全部互通,使用规则提高工作效率。
  • 深入解析数据库DQL语言:查询的艺术
  • 如何在SpringCloud中使用Consul进行服务发现与配置管理
  • Redis的主从模式、哨兵模式、集群模式
  • 电子电气架构 --- 基于ISO 26262的车载电子软件开发流程
  • 基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
  • 快速下载Imagenet数据集
  • Python模块和包:标准库模块(os, sys, datetime, math等)②
  • CVE-2024-2389 未经身份验证的命令注入
  • LeetCode --- 139双周赛
  • STM32篇:开发环境安装
  • 基于微信小程序的科创微应用平台设计与实现+ssm(lw+演示+源码+运行)
  • MongoDB 双活集群在运营商的实践
  • 利用mybatis拦截器完成入库加密出库解密