LintCode 6、合并排序数组 II

题目概述

给两个数组int类型,将他们合并进行排序。(可能数组一个过长一个过短)

解题思路

思路一:将较短的那条的数据向长的里面比较插入,注意无用的循环。(效果较2优)
思路二:将较短的追加在较长的后面,利用sort排序即可。

代码实现

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;


vector<int> mergeSortedArray(vector<int> &A, vector<int> &B) {
    //声明两个vector做中转
    vector<int> tem;
    vector<int> base;
    //通过数组的size判断出长短并选小的来插入长的里面
    if(A.size() >= B.size()){
        tem = B;
        base =A;
    }
    else{
        tem = A;
        base = B;
    }
    /**
     * 第一种排序方法:比较依次插入
     */
    //表示当前循环中的数是否插入的的状态
    bool flag = false;
    for(int i = 0; i < tem.size(); i++){
        flag = false;//重新赋值
        for(int j = 0; j < base.size(); j++){
            //在最后一个元素的前面符合的位置插入
            if (tem[i] <= base[j]){
                //insert()方法:迭代器移位的方法
                base.insert(base.begin() + j, tem[i]);
                flag = true;//改变状态值
                break;//已插入直接跳出该循环,避免多余的浪费
            }
        }
        //当状态值为false时,将元素追加的末尾
        if (!flag){
            base.push_back(tem[i]);
        }
    }
    /**
     * 第二种排序方法:调用存在的排序函数
     */
    /*for (int i = 0; i < tem.size(); i++) {
        base.push_back(tem[i]);
    }
    sort(base.begin(), base.end());*/

    return base;
}


int main(){
    vector<int> sc = {1,5};
    vector<int> tem = {2,3};
    tem = mergeSortedArray(sc,tem);
    cout << "[";
    for (int i = 0; i < tem.size(); i++){
        cout << tem[i] << (i == tem.size() - 1 ? "" : ", ");
    }
    cout << "]";
    return 0;
}

个人纪录

  1. sort(base.begin(), base.end()); 排序的用法:直接返回数组对应的迭代器
  2. base.insert(base.begin() + j, tem[i]); insert方法:可以通过位移迭代器的方法来使用
发布了28 篇原创文章 · 获赞 5 · 访问量 2188

猜你喜欢

转载自blog.csdn.net/qq_40307379/article/details/104976216