• 【C++】“334. 队列检查”题目解析及所用vector相关用法总结


    ​前言

    刷 LintCode 等时,针对 “ 334. 队列检查 ” 题目进行解析。

    点击 C++ 代码常用的是 vector。为防忘记,文章最后特此结合题目总结 vector 一些常用的用法。

    LintCode 传送门:LintCode 炼码

    目录

    ​前言

    一、练习:队列检查

    (一)题目及答案

     (二)可运行代码及演示结果

     二、vector 用法总结

    (一)复制整个 vector

    (二)排序


    一、练习:队列检查

    (一)题目及答案

    班上的学生根据他们的年级照片的身高升序排列,确定当前未站在正确位置的学生人数。

    •  1\leq len(heights)\leq 10^5
    •  1\leq heights[i]\leq 10^9
    1. 输入: heights = [1,1,3,3,4,1]
    2. 输出: 3
    3. 解释: 经过排序后 heights变成了[1,1,1,3,3,4],有三个学生不在应在的位置上
    1. public:
    2. int orderCheck(vector<int> &heights) {
    3. vector<int> after;
    4. after.assign(heights.begin(), heights.end()); //复制 heights 到 after
    5. sort(after.begin(), after.end()); //排序
    6. int count = 0;
    7. for (int i = 0; i < heights.size(); i++){
    8. //通过比较两个vector的值,得出位置不同的个数 count
    9. if (after[i] != heights[i]) {
    10. count++;
    11. }
    12. }
    13. return count;
    14. }
    15. };

     (二)可运行代码及演示结果

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. void printVector(vector<int>& v)
    6. {
    7. for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    8. {
    9. cout << *it << " ";
    10. }
    11. cout << endl;
    12. }
    13. int main() {
    14. vector<int> heights;
    15. int a[6] = { 1,1,1,3,4,1 };
    16. for (int k = 0; k < 6; k++)
    17. {
    18. heights.push_back(a[k]);
    19. }
    20. cout << "输出原序列:";
    21. printVector(heights);
    22. vector<int> after;
    23. after.assign(heights.begin(), heights.end());
    24. sort(after.begin(), after.end()); //由小到大排序
    25. cout << "输出排序后的序列:";
    26. printVector(after); //此时 heights 的序列保持不变
    27. int count = 0;
    28. for (int i = 0; i < heights.size(); i++) {
    29. if (after[i] != heights[i]) {
    30. count++;
    31. }
    32. }
    33. cout << "学生不在应在的位置上的数量: " << count;
    34. return 0;
    35. }

     

     二、vector 用法总结

    (一)复制整个 vector

    1、关键代码

    1. vector<int> heights;
    2. int a[6] = { 1,1,1,3,4,1 };
    3. for (int k = 0; k < 6; k++)
    4. {
    5. heights.push_back(a[k]); //输入
    6. }
    7. vector<int> after1;
    8. vector<int> after2;
    9. // 第一种
    10. after1.assign(heights.begin(), heights.end());
    11. //第二种
    12. after2 = heights;
    13. //第三种
    14. vector<int> after3(heights);

    2、可执行代码及输出结果

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. void printVector(vector<int>& v) //输出序列
    6. {
    7. for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    8. {
    9. cout << *it << " ";
    10. }
    11. cout << endl << endl;
    12. }
    13. int main() {
    14. vector<int> heights;
    15. int a[6] = { 1,1,1,3,4,1 };
    16. for (int k = 0; k < 6; k++)
    17. {
    18. heights.push_back(a[k]);
    19. }
    20. cout << "输出原序列:";
    21. printVector(heights);
    22. vector<int> after1;
    23. vector<int> after2;
    24. vector<int> after3(heights);
    25. after1.assign(heights.begin(), heights.end());
    26. after2 = heights;
    27. cout << "输出after1:";
    28. printVector(after1);
    29. cout << "输出after2:";
    30. printVector(after2);
    31. cout << "输出after3:";
    32. printVector(after3);
    33. return 0;
    34. }

     

    (二)排序

    1、关键代码

    1. //从小到大排序
    2. sort(after.begin(), after.end());
    3. //从大到小排序
    4. sort(after.rbegin(), after.rend());

    2、可执行代码及输出结果

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. void printVector(vector<int>& v) //输出序列
    6. {
    7. for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    8. {
    9. cout << *it << " ";
    10. }
    11. cout << endl << endl;
    12. }
    13. int main() {
    14. vector<int> heights;
    15. int a[6] = { 1,1,1,3,4,1 };
    16. for (int k = 0; k < 6; k++)
    17. {
    18. heights.push_back(a[k]);
    19. }
    20. cout << "输出原序列:";
    21. printVector(heights);
    22. vector<int> after;
    23. after.assign(heights.begin(), heights.end());
    24. //由小到大排序
    25. sort(after.begin(), after.end());
    26. //begin 指向第一个元素,end 指向最后一个元素的后一个位置
    27. cout << "输出由小到大排序后的序列:";
    28. printVector(after); //此时 heights 的序列保持不变
    29. //从大到小排序
    30. sort(after.rbegin(), after.rend());
    31. //rbegin 指向最后一个元素,rend 指向第一个元素的前一个元素
    32. cout << "输出由大到小排序后的序列:";
    33. printVector(after); //此时 heights 的序列保持不变
    34. cout << endl;
    35. return 0;
    36. }

  • 相关阅读:
    Python编程 字符串介绍以及切片
    C++20之Module(浅析)
    Scott Brinker:API对今天的Martech用户来说「非常重要」 ,但它们对即将到来的人工智能代理浪潮至关重要
    数制与逻辑代数
    【大厂高频真题100题】单词拆分Ⅱ 真题练习第8题 持续更新~
    基于高斯混合模型的视频背景提取和人员跟踪算法matlab仿真
    UM Company区块链游戏登场全球 元宇宙场景再获国际关注
    fastjson 1.2.24 rce漏洞复现
    mariadb弱口令登录
    如何评判程序员的好坏和程序员成长的各个阶段
  • 原文地址:https://blog.csdn.net/qq_34438969/article/details/126388591