vector刷题lc

131 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情


118.杨辉三角

思路

题目的本身的思路并不是很难,就是ij列的数等于i-1j列的数加上i-1j-1列的数相加的和。 用c语言写的话比较麻烦,需要自己开辟一个二维数组。 用C++就比较舒服了。首先我们开numRows行,里面的元素类型为vector<int>。我们用的是vector里面的resize 在这里插入图片描述 resize表示重新分配多少有用的空间。value_type为模板实参的类型,表示把比以前多出来的空间初始化为val。 接下来我们继续更改每个vector<int>的空间。同时把新增的有用的空间初始为0。同时把第一个和最后一个修改成1。 这里我们用到的是frontback在这里插入图片描述 在这里插入图片描述 返回第一个,最后一个的引用。做好这些之后,最后按上面的操作加就可以了。

代码

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> vv;
        vv.resize(numRows);
        for(int i=0;i<numRows;++i)
        {
            vv[i].resize(i+1,0);
            vv[i].front()=vv[i].back()=1;
        }
        for(int i=2;i<numRows;++i)
        {
            for(int j=1;j<vv[i].size()-1;++j)
            {
                vv[i][j]=vv[i-1][j]+vv[i-1][j-1];
            }
        }
        return vv;
    }
};

26.删除有序数组中的重复项

思路

因为数组中的数是有序的,所以我们用前后指针法。判断前一个数是否和后面的数相等。如果相等,那么后指针继续往后遍历,发现数不同的时候,就把该数覆盖给前指针所指的数。直到遍历完。

代码

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        size_t a,b;
        a=b=0;
        for(;b<nums.size();++b)
        {
            if(nums[a]!=nums[b])
            {
                nums[++a]=nums[b];
            }
        }
        nums.resize(a+1);
        return a+1;
    }
};