第二天
1 vector.push_back()
2 vector.at(i):返回第i个元素
看了答案以后,有几种其他的方法:
桶排序+前缀和的方法:
由于题目的nums[i]值域范围在0-100,这就表示可能值是有限的,共101种情况,那么只需要使用相应的桶来存储出现的个数即可
比如nums=[8,1,2,2,3],创建一个array[101]
则array[8]=1,array[1]=2,array[2]=2,array[3]=1;
这样的话array[i]的前面所有的元素都一定小于它,那么只需要遍历前面的元素,总和加起来就可以了
有两种思路,一个是单独用一个数组来存储,但是会出现重复的相加,比如result[3]是array[0]+array[1]+array[2],而result[4]又会再把这三者加一遍
但是实际上,result[i]就是前面所有的result[i-1]加起来,这就是前缀和的思想
所以直接用array[i]来存储结果,此时该数组表示的不是每个元素的个数,而是最终的结果
上图来自leetcode官方解
一、Vector的几种定义和初始化方式(以int数据为例)
Vector<int> v1; // 默认构造函数v1为空
Vector<int> v2(v1); // v2是v1的一个副本
Vector<int> v3(n,i); // v3包含n个值为i的元素
Vector<int> v4(n); // v4含有n个值为0的元素
二、Vector对象常用的几种操作
push_back(t); // 在数组的最后添加一个值为t的数据
pop_back(); // 在数组的最后移除最后一个数据
clear(); // 清空所有元素
size(); // 返回数组元素的个数
erase(t); // 删除指定元素t