顺序表vector--------练习题2题解
前言
在刷顺序表有关题目的时候遇到了一些有关面向对象的类的相关问题,也是有点意外收获了,现在分享一下。
代码
class Solution {
public:int arr[100001];int findMaxConsecutiveOnes(vector<int>& nums) {int max=0;int j=0;for(int i=0;i<nums.size();i++){if(nums[i]==1){arr[j]++;cout<<"arr["<<j<<"]="<<arr[j]<<endl;}else{j++;}}j++;int i=0;while(j--){if(arr[i]>=max){max = arr[i];// cout<<i<<endl;}i++;}return max;}
};反思
考察知识点:顺序表vector.
踩的坑:
1.关于里面的j和i的值的问题,涉及循环次数错误和变量i定义位置错误导致结果异常等低级错误;
2.关于这个数组的声明位置,也有问题,我这里数组的目的是存储连续一的个数,但是反复调用以后,数组中的值并没有重新初始化,所以我要对这里特别解释说明一下;
可以优化的地方:可以不用数组,我们可以利用两个变量来实现这个存储的目的:
class Solution {
public:int findMaxConsecutiveOnes(vector<int>& nums) {int cnt=0;int bef=0;for(int i=0;i<nums.size();i++){if(nums[i]==1){bef+=1;if(bef>cnt){cnt = bef;}}else{bef=0;}}return cnt;}
};这样的话是不是就简便了好多呢。
收获
这里讲一下那个类中的数组在成员函数里面定义与在成员函数外面定义的区别:
1.当数组在成员函数里面时,被看作是局部数组,默认是静态存储,也就是静态变量,不会因为函数的结束而销毁,就像是用static修饰了数组;
2.当数组在成员函数外面时,属于类的实例对象,每次创建实例化对象或者调用成员函数时都会自动初始化,所以不会留存上一次调用的值。
