码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【LeetCode】C++:数组类算法-运用基础算法思想


    目录

    75.颜色分类

    215.数组中的第K个最大元素

    88.合并两个有序数组


    75.颜色分类

    给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

    • 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
    • 必须在不使用库内置的 sort 函数的情况下解决这个问题。

    思考:

    1.首先检查数组长度,是否为空?

    2.数组不为空,依次检查数组的值情况

    策略1:3种情况,是不是可以考虑3个数组?筛选再拼接?

    策略2:为0往前移,为1不移动,为2往后移;比大小?

    策略3:哈希数组?

    实际上:

    暂时考虑策略2,利用单/双指针实现。

    1. class Solution {
    2. public:
    3. void sortColors(vector<int>& nums) {
    4. int n = nums.size();
    5. int ptr =0;
    6. for(int i=0; i
    7. if(nums[i]==0){
    8. swap(nums[i],nums[ptr]);
    9. ++ptr;
    10. }
    11. }
    12. for(int i=ptr; i
    13. if(nums[i]==1){
    14. swap(nums[i],nums[ptr]);
    15. ++ptr;
    16. }
    17. }
    18. }
    19. };

    215.数组中的第K个最大元素

    给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

    • 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
    • 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

    思考:

    1.数组排序后找寻最大的元素,sort 内置函数,从大到小?

    2.循环找寻第K个值

    1. class Solution {
    2. public:
    3. int findKthLargest(vector<int>& nums, int k) {
    4. int n=nums.size();
    5. sort(nums.begin(), nums.end());
    6. return nums[n-k];
    7. }
    8. };

    88.合并两个有序数组

    给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n ,分别表示nums1 和 nums2中的元素数目。

    请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。

    • 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n个元素为 0 ,应忽略。nums2 的长度为 n 。

    思考:

    1.合并的概念如 nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 得到 [1,2,2,3,5,6]

    2.从num2中读取的数插入nums1中,因为保持非递减,递减排序直接sort !

    3.合并后sort!

    1. class Solution {
    2. public:
    3. void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
    4. for (int i = 0; i != n; ++i) {
    5. nums1[m + i] = nums2[i];
    6. }
    7. sort(nums1.begin(), nums1.end());
    8. }
    9. };

     

  • 相关阅读:
    Spring Cloud Gateway实现限流
    计算机毕业设计(附源码)python在线学习系统
    Sentinel 工作主流程
    win10 sourcetree打开一闪就退出
    Android与单片机 | 开发板 | 智能硬件 | 智能设备 | 数据协议 |开发总结
    ideaSSM社区二手交易平台C2C模式开发mysql数据库web结构java编程计算机网页源码maven项目
    小美的外卖订单编号---牛客周赛 Round 11
    Oauth2.0的内容
    Flink开发语言使用Java还是Scala合适?
    快手怎么涨粉最快?10个实用方法让你迅速积累粉丝
  • 原文地址:https://blog.csdn.net/MengYa_Dream/article/details/128209965
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号