顺序表vector--------练习题6题解

题目

代码

class Solution {
public:
    vector<int> getConcatenation(vector<int>& nums) {
        int i = 0;
        // int size = nums.size();
        // while(i<size){//这里不可以直接用nums.size(),随着插入它会逐渐变大
        //     nums.push_back(nums[i]);
        //     i++;
        // }
        // return nums;
        vector<int> ans;
        while(i<nums.size()){
            ans.push_back(nums[i]);
            i++;
        }
        i = 0;
        while(i<nums.size()){
            ans.push_back(nums[i]);
            i++;
        }
        return ans;
    }
};

思路

本题目就是将给定的数组拷贝一份,两份连接起来,形成一个新的数组并返回。

不过,有原地算法和创建新数组两种。

反思

1.考察知识点:vector顺序表、顺序表的插入

2.踩的坑:一开始用的是原地算法,结果条件直接用的是nums.size(),这导致在插入的过程中,这个值一直在变大,使得循环无法结束;另外,由于这个题目对于时间复杂度的限制并不是很苛刻,所以优先考虑运行时间的话,新建一个新的数组比较好,原因在于vector原地扩容的“拷贝开销”和新数组直接填充

3.可以优化的地方:无。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值